Remove idle aircrafts in interactive mode.
This commit is contained in:
parent
3f47bb6f47
commit
f231c7adb2
34
dump1090.c
34
dump1090.c
|
@ -73,7 +73,8 @@
|
||||||
#define MODES_DEBUG_NOPREAMBLE_LEVEL 25
|
#define MODES_DEBUG_NOPREAMBLE_LEVEL 25
|
||||||
|
|
||||||
#define MODES_INTERACTIVE_REFRESH_TIME 250 /* Milliseconds */
|
#define MODES_INTERACTIVE_REFRESH_TIME 250 /* Milliseconds */
|
||||||
#define MODES_INTERACTIVE_ROWS 15
|
#define MODES_INTERACTIVE_ROWS 15 /* Rows on screen */
|
||||||
|
#define MODES_INTERACTIVE_TTL 60 /* TTL before being removed */
|
||||||
|
|
||||||
#define MODES_NOTUSED(V) ((void) V)
|
#define MODES_NOTUSED(V) ((void) V)
|
||||||
|
|
||||||
|
@ -119,6 +120,7 @@ struct {
|
||||||
int debug; /* Debugging mode */
|
int debug; /* Debugging mode */
|
||||||
int interactive; /* Interactive mode */
|
int interactive; /* Interactive mode */
|
||||||
int interactive_rows; /* Interactive mode: max number of rows */
|
int interactive_rows; /* Interactive mode: max number of rows */
|
||||||
|
int interactive_ttl; /* Interactive mode: TTL before deletion */
|
||||||
int stats; /* Print stats at exit in --ifile mode. */
|
int stats; /* Print stats at exit in --ifile mode. */
|
||||||
int onlyaddr; /* Print only ICAO addresses. */
|
int onlyaddr; /* Print only ICAO addresses. */
|
||||||
|
|
||||||
|
@ -208,6 +210,7 @@ void modesInitConfig(void) {
|
||||||
Modes.debug = 0;
|
Modes.debug = 0;
|
||||||
Modes.interactive = 0;
|
Modes.interactive = 0;
|
||||||
Modes.interactive_rows = MODES_INTERACTIVE_ROWS;
|
Modes.interactive_rows = MODES_INTERACTIVE_ROWS;
|
||||||
|
Modes.interactive_ttl = MODES_INTERACTIVE_TTL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void modesInit(void) {
|
void modesInit(void) {
|
||||||
|
@ -1296,6 +1299,31 @@ void interactiveShowData(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* When in interactive mode If we don't receive new nessages within
|
||||||
|
* MODES_INTERACTIVE_TTL seconds we remove the aircraft from the list. */
|
||||||
|
void interactiveRemoveStaleAircrafts(void) {
|
||||||
|
struct aircraft *a = Modes.aircrafts;
|
||||||
|
struct aircraft *prev = NULL;
|
||||||
|
time_t now = time(NULL);
|
||||||
|
|
||||||
|
while(a) {
|
||||||
|
if ((now - a->seen) > Modes.interactive_ttl) {
|
||||||
|
struct aircraft *next = a->next;
|
||||||
|
/* Remove the element from the linked list, with care
|
||||||
|
* if we are removing the first element. */
|
||||||
|
free(a);
|
||||||
|
if (!prev)
|
||||||
|
Modes.aircrafts = next;
|
||||||
|
else
|
||||||
|
prev->next = next;
|
||||||
|
a = next;
|
||||||
|
} else {
|
||||||
|
prev = a;
|
||||||
|
a = a->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ============================== Snip mode ================================= */
|
/* ============================== Snip mode ================================= */
|
||||||
|
|
||||||
/* Get raw IQ samples and filter everything is < than the specified level
|
/* Get raw IQ samples and filter everything is < than the specified level
|
||||||
|
@ -1327,6 +1355,7 @@ void showHelp(void) {
|
||||||
"--ifile <filename> Read data from file (use '-' for stdin).\n"
|
"--ifile <filename> Read data from file (use '-' for stdin).\n"
|
||||||
"--interactive Interactive mode refreshing data on screen.\n"
|
"--interactive Interactive mode refreshing data on screen.\n"
|
||||||
"--interactive-rows <num> Max number of rows in interactive mode (default: 15).\n"
|
"--interactive-rows <num> Max number of rows in interactive mode (default: 15).\n"
|
||||||
|
"--interactive-ttl <sec> Remove from list if idle for <sec> (default: 60).\n"
|
||||||
"--raw Show only messages hex values.\n"
|
"--raw Show only messages hex values.\n"
|
||||||
"--no-fix Disable single-bits error correction using CRC.\n"
|
"--no-fix Disable single-bits error correction using CRC.\n"
|
||||||
"--no-crc-check Disable messages with broken CRC (discouraged).\n"
|
"--no-crc-check Disable messages with broken CRC (discouraged).\n"
|
||||||
|
@ -1370,6 +1399,8 @@ int main(int argc, char **argv) {
|
||||||
Modes.interactive = 1;
|
Modes.interactive = 1;
|
||||||
} else if (!strcmp(argv[j],"--interactive-rows")) {
|
} else if (!strcmp(argv[j],"--interactive-rows")) {
|
||||||
Modes.interactive_rows = atoi(argv[++j]);
|
Modes.interactive_rows = atoi(argv[++j]);
|
||||||
|
} else if (!strcmp(argv[j],"--interactive-ttl")) {
|
||||||
|
Modes.interactive_ttl = atoi(argv[++j]);
|
||||||
} else if (!strcmp(argv[j],"--debug") && more) {
|
} else if (!strcmp(argv[j],"--debug") && more) {
|
||||||
Modes.debug = atoi(argv[++j]);
|
Modes.debug = atoi(argv[++j]);
|
||||||
} else if (!strcmp(argv[j],"--stats")) {
|
} else if (!strcmp(argv[j],"--stats")) {
|
||||||
|
@ -1429,6 +1460,7 @@ int main(int argc, char **argv) {
|
||||||
(mstime() - Modes.interactive_last_update) >
|
(mstime() - Modes.interactive_last_update) >
|
||||||
MODES_INTERACTIVE_REFRESH_TIME)
|
MODES_INTERACTIVE_REFRESH_TIME)
|
||||||
{
|
{
|
||||||
|
interactiveRemoveStaleAircrafts();
|
||||||
interactiveShowData();
|
interactiveShowData();
|
||||||
Modes.interactive_last_update = mstime();
|
Modes.interactive_last_update = mstime();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue