diff --git a/dump1090.h b/dump1090.h index e9487dc..9ceafae 100644 --- a/dump1090.h +++ b/dump1090.h @@ -218,7 +218,6 @@ #include "stats.h" #include "cpr.h" #include "icao_filter.h" -#include "track.h" //======================== structure declarations ========================= @@ -406,6 +405,9 @@ struct modesMessage { int bFlags; // Flags related to fields in this structure }; +// This one needs modesMessage: +#include "track.h" + // ======================== function declarations ========================= #ifdef __cplusplus diff --git a/mode_s.c b/mode_s.c index 1a5db10..9c4cda0 100644 --- a/mode_s.c +++ b/mode_s.c @@ -1212,8 +1212,18 @@ void useModesMessage(struct modesMessage *mm) { // see a second message? 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); + } } } diff --git a/track.c b/track.c index 48dda6d..593dc0c 100644 --- a/track.c +++ b/track.c @@ -80,6 +80,10 @@ struct aircraft *trackCreateAircraft(struct modesMessage *mm) { 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); } diff --git a/track.h b/track.h index b7c7535..4647f32 100644 --- a/track.h +++ b/track.h @@ -90,6 +90,8 @@ struct aircraft { double lat, lon; // Coordinated obtained from CPR encoded data int bFlags; // Flags related to valid fields in this structure struct aircraft *next; // Next aircraft in our linked list + + struct modesMessage first_message; // A copy of the first message we received for this aircraft. };