From 8441cf7d90e73b47e109ff6209fab371cd124847 Mon Sep 17 00:00:00 2001 From: Oliver Jowett Date: Wed, 14 Sep 2016 17:02:23 +0100 Subject: [PATCH] Emit non-icao addresses, address types from faup1090 --- net_io.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/net_io.c b/net_io.c index 103230b..414e3cb 100644 --- a/net_io.c +++ b/net_io.c @@ -1692,8 +1692,19 @@ static void writeFATSVEventMessage(struct modesMessage *mm, const char *datafiel char *end = p + TSV_MAX_PACKET_SIZE; # define bufsize(_p,_e) ((_p) >= (_e) ? (size_t)0 : (size_t)((_e) - (_p))) - p += snprintf(p, bufsize(p, end), "clock\t%" PRIu64 "\thexid\t%06X\t%s\t", mstime() / 1000, mm->addr, datafield); + p += snprintf(p, bufsize(p, end), "clock\t%" PRIu64, mstime() / 1000); + if (mm->addr & MODES_NON_ICAO_ADDRESS) { + p += snprintf(p, bufsize(p, end), "otherid\t%06X\t", mm->addr & 0xFFFFFF); + } else { + p += snprintf(p, bufsize(p, end), "hexid\t%06X\t", mm->addr); + } + + if (mm->addrtype != ADDR_ADSB_ICAO) { + p += snprintf(p, bufsize(p, end), "\taddrtype\t%s", addrtype_short_string(mm->addrtype)); + } + + p += snprintf(p, bufsize(p, end), "\t%s\t", datafield); for (size_t i = 0; i < len; ++i) { p += snprintf(p, bufsize(p, end), "%02X", data[i]); } @@ -1715,10 +1726,6 @@ static void writeFATSVEvent(struct modesMessage *mm, struct aircraft *a) return; // not enabled or no active connections } - // skip non-ICAO - if (mm->addr & MODES_NON_ICAO_ADDRESS) - return; - if (a->messages < 2) // basic filter for bad decodes return; @@ -1800,10 +1807,6 @@ static void writeFATSV() int used_tisb = 0; - // skip non-ICAO - if (a->addr & MODES_NON_ICAO_ADDRESS) - continue; - if (a->messages < 2) // basic filter for bad decodes continue; @@ -1883,7 +1886,18 @@ static void writeFATSV() end = p + TSV_MAX_PACKET_SIZE; # define bufsize(_p,_e) ((_p) >= (_e) ? (size_t)0 : (size_t)((_e) - (_p))) - p += snprintf(p, bufsize(p,end), "clock\t%ld\thexid\t%06X", (long)(a->seen / 1000), a->addr); + + p += snprintf(p, bufsize(p, end), "clock\t%" PRIu64, (uint64_t)(a->seen / 1000)); + + if (a->addr & MODES_NON_ICAO_ADDRESS) { + p += snprintf(p, bufsize(p, end), "otherid\t%06X\t", a->addr & 0xFFFFFF); + } else { + p += snprintf(p, bufsize(p, end), "hexid\t%06X\t", a->addr); + } + + if (a->addrtype != ADDR_ADSB_ICAO) { + p += snprintf(p, bufsize(p, end), "\taddrtype\t%s", addrtype_short_string(a->addrtype)); + } if (trackDataValidEx(&a->callsign_valid, now, 120000, SOURCE_MODE_S_CHECKED)) { // we accept quite old idents as they shouldn't change often p += snprintf(p, bufsize(p,end), "\tident\t%s", a->callsign);