Fix compilation. Emit some changes immediately in faup1090.

This commit is contained in:
Oliver Jowett 2017-06-15 18:30:12 +01:00
parent 27b0e9c40f
commit 05e9601903
2 changed files with 14 additions and 8 deletions

View file

@ -1866,7 +1866,6 @@ static void writeFATSV()
uint64_t minAge; uint64_t minAge;
int useful = 0; int useful = 0;
int changed = 0;
tisb_flags tisb = 0; tisb_flags tisb = 0;
char *p, *end; char *p, *end;
@ -1897,7 +1896,7 @@ static void writeFATSV()
int intentAltValid = trackDataValidEx(&a->intent_altitude_valid, now, 15000, SOURCE_MODE_S); // Comm-B or ES int intentAltValid = trackDataValidEx(&a->intent_altitude_valid, now, 15000, SOURCE_MODE_S); // Comm-B or ES
int intentHeadingValid = trackDataValidEx(&a->intent_heading_valid, now, 15000, SOURCE_MODE_S); // Comm-B or ES int intentHeadingValid = trackDataValidEx(&a->intent_heading_valid, now, 15000, SOURCE_MODE_S); // Comm-B or ES
int altSettingValid = trackDataValidEx(&a->alt_setting_valid, now, 15000, SOURCE_MODE_S); // Comm-B or ES int altSettingValid = trackDataValidEx(&a->alt_setting_valid, now, 15000, SOURCE_MODE_S); // Comm-B or ES
int callsignValid = trackDataValidEx(&a->callsign, now, 15000, SOURCE_MODE_S); // Comm-B or ES int callsignValid = trackDataValidEx(&a->callsign_valid, now, 15000, SOURCE_MODE_S); // Comm-B or ES
// If we are definitely on the ground, suppress any unreliable altitude info. // If we are definitely on the ground, suppress any unreliable altitude info.
// When on the ground, ADS-B transponders don't emit an ADS-B message that includes // When on the ground, ADS-B transponders don't emit an ADS-B message that includes
@ -1908,7 +1907,8 @@ static void writeFATSV()
// if it hasn't changed altitude, heading, or speed much, // if it hasn't changed altitude, heading, or speed much,
// don't update so often // don't update so often
changed = 0; int changed = 0;
int immediate = 0;
if (altValid && abs(a->altitude - a->fatsv_emitted_altitude) >= 50) { if (altValid && abs(a->altitude - a->fatsv_emitted_altitude) >= 50) {
changed = 1; changed = 1;
} }
@ -1946,21 +1946,25 @@ static void writeFATSV()
changed = 1; changed = 1;
} }
if (intentAltValid && unsigned_difference(a->intent_altitude, a->fatsv_emitted_intent_altitude) > 50) { if (intentAltValid && unsigned_difference(a->intent_altitude, a->fatsv_emitted_intent_altitude) > 50) {
changed = 1; changed = immediate = 1;
} }
if (intentHeadingValid && heading_difference(a->intent_heading, a->fatsv_emitted_intent_heading) > 2) { if (intentHeadingValid && heading_difference(a->intent_heading, a->fatsv_emitted_intent_heading) > 2) {
changed = 1; changed = immediate = 1;
} }
if (altSettingValid && fabs(a->alt_setting - a->fatsv_emitted_alt_setting) > 0.8) { // 0.8 is the ES message resolution if (altSettingValid && fabs(a->alt_setting - a->fatsv_emitted_alt_setting) > 0.8) { // 0.8 is the ES message resolution
changed = 1; changed = immediate = 1;
} }
if (callsignValid && strcmp(a->callsign, a->fatsv_emitted_callsign) != 0) { if (callsignValid && strcmp(a->callsign, a->fatsv_emitted_callsign) != 0) {
changed = 1; changed = immediate = 1;
} }
if (airgroundValid && ((a->airground == AG_AIRBORNE && a->fatsv_emitted_airground == AG_GROUND) || if (airgroundValid && ((a->airground == AG_AIRBORNE && a->fatsv_emitted_airground == AG_GROUND) ||
(a->airground == AG_GROUND && a->fatsv_emitted_airground == AG_AIRBORNE))) { (a->airground == AG_GROUND && a->fatsv_emitted_airground == AG_AIRBORNE))) {
// Air-ground transition, handle it immediately. // Air-ground transition, handle it immediately.
changed = immediate = 1;
}
if (immediate) {
// a change we want to emit right away
minAge = 0; minAge = 0;
} else if (!positionValid) { } else if (!positionValid) {
// don't send mode S very often // don't send mode S very often
@ -2002,6 +2006,7 @@ static void writeFATSV()
if (trackDataValidEx(&a->callsign_valid, now, 35000, SOURCE_MODE_S) && strcmp(a->callsign, " ") != 0 && a->callsign_valid.updated > a->fatsv_last_emitted) { if (trackDataValidEx(&a->callsign_valid, now, 35000, SOURCE_MODE_S) && strcmp(a->callsign, " ") != 0 && a->callsign_valid.updated > a->fatsv_last_emitted) {
p += snprintf(p, bufsize(p,end), "\tident\t%s", a->callsign); p += snprintf(p, bufsize(p,end), "\tident\t%s", a->callsign);
memcpy(a->fatsv_emitted_callsign, a->callsign, sizeof(a->fatsv_emitted_callsign));
switch (a->callsign_valid.source) { switch (a->callsign_valid.source) {
case SOURCE_MODE_S: case SOURCE_MODE_S:
p += snprintf(p, bufsize(p,end), "\tiSource\tmodes"); p += snprintf(p, bufsize(p,end), "\tiSource\tmodes");

View file

@ -181,6 +181,7 @@ struct aircraft {
unsigned char fatsv_emitted_bds_30[7]; // -"- BDS 3,0 message unsigned char fatsv_emitted_bds_30[7]; // -"- BDS 3,0 message
unsigned char fatsv_emitted_es_status[7]; // -"- ES operational status message unsigned char fatsv_emitted_es_status[7]; // -"- ES operational status message
unsigned char fatsv_emitted_es_acas_ra[7]; // -"- ES ACAS RA report message unsigned char fatsv_emitted_es_acas_ra[7]; // -"- ES ACAS RA report message
char fatsv_emitted_callsign[9]; // -"- callsign
uint64_t fatsv_last_emitted; // time (millis) aircraft was last FA emitted uint64_t fatsv_last_emitted; // time (millis) aircraft was last FA emitted