If we squelch the first message from an aircraft, emit it when we see a second message.
This is possible now that the SBS output doesn't rely on the global block timestamp; the output will look like this: MSG,8,111,11111,4AC954,111111,2015/02/08,17:57:53.917,2015/02/08,17:57:53.936,,,,,,,,,,,,0 MSG,7,111,11111,392AEB,111111,2015/02/08,17:57:53.744,2015/02/08,17:57:53.936,,15375,,,,,,,,,,0 MSG,8,111,11111,392AEB,111111,2015/02/08,17:57:53.917,2015/02/08,17:57:53.936,,,,,,,,,,,,0 MSG,6,111,11111,800387,111111,2015/02/08,17:57:53.919,2015/02/08,17:57:53.936,,,,,,,,4745,0,0,0,0 where the "receive timestamp" (first time column) goes backwards to reflect the original reception time of the delayed message, but the "forwarded timestamp" (second time column) reflects the actual forwarding time.
This commit is contained in:
parent
c0af448efa
commit
4ecd6958a1
|
@ -218,7 +218,6 @@
|
||||||
#include "stats.h"
|
#include "stats.h"
|
||||||
#include "cpr.h"
|
#include "cpr.h"
|
||||||
#include "icao_filter.h"
|
#include "icao_filter.h"
|
||||||
#include "track.h"
|
|
||||||
|
|
||||||
//======================== structure declarations =========================
|
//======================== structure declarations =========================
|
||||||
|
|
||||||
|
@ -406,6 +405,9 @@ struct modesMessage {
|
||||||
int bFlags; // Flags related to fields in this structure
|
int bFlags; // Flags related to fields in this structure
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// This one needs modesMessage:
|
||||||
|
#include "track.h"
|
||||||
|
|
||||||
// ======================== function declarations =========================
|
// ======================== function declarations =========================
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
12
mode_s.c
12
mode_s.c
|
@ -1212,10 +1212,20 @@ void useModesMessage(struct modesMessage *mm) {
|
||||||
// see a second message?
|
// see a second message?
|
||||||
|
|
||||||
if (Modes.net) {
|
if (Modes.net) {
|
||||||
if (Modes.net_verbatim || a->messages > 1)
|
if (Modes.net_verbatim || a->messages > 1) {
|
||||||
|
// If this is the second message, and we
|
||||||
|
// squelched the first message, then re-emit the
|
||||||
|
// first message now.
|
||||||
|
if (!Modes.net_verbatim && a->messages == 2) {
|
||||||
|
fprintf(stderr, "reemit first message for %06x\n", a->addr);
|
||||||
|
displayModesMessage(&a->first_message);
|
||||||
|
modesQueueOutput(&a->first_message);
|
||||||
|
}
|
||||||
|
|
||||||
modesQueueOutput(mm);
|
modesQueueOutput(mm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ===================== Mode S detection and decoding ===================
|
// ===================== Mode S detection and decoding ===================
|
||||||
|
|
4
track.c
4
track.c
|
@ -80,6 +80,10 @@ struct aircraft *trackCreateAircraft(struct modesMessage *mm) {
|
||||||
mm->bFlags |= MODES_ACFLAGS_ALTITUDE_VALID;
|
mm->bFlags |= MODES_ACFLAGS_ALTITUDE_VALID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy the first message so we can emit it later when a second message arrives.
|
||||||
|
a->first_message = *mm;
|
||||||
|
|
||||||
return (a);
|
return (a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
track.h
2
track.h
|
@ -90,6 +90,8 @@ struct aircraft {
|
||||||
double lat, lon; // Coordinated obtained from CPR encoded data
|
double lat, lon; // Coordinated obtained from CPR encoded data
|
||||||
int bFlags; // Flags related to valid fields in this structure
|
int bFlags; // Flags related to valid fields in this structure
|
||||||
struct aircraft *next; // Next aircraft in our linked list
|
struct aircraft *next; // Next aircraft in our linked list
|
||||||
|
|
||||||
|
struct modesMessage first_message; // A copy of the first message we received for this aircraft.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue