Decode/emit emergency/priority status

This commit is contained in:
Oliver Jowett 2018-01-09 14:43:58 +00:00
parent 079061df3c
commit ea1e9c336b
5 changed files with 60 additions and 2 deletions

View file

@ -986,7 +986,10 @@ static void decodeESAircraftStatus(struct modesMessage *mm, int check_imf)
mm->mesub = getbits(me, 6, 8);
if (mm->mesub == 1) { // Emergency status squawk field
int ID13Field = getbits(me, 12, 24);
mm->emergency_valid = 1;
mm->emergency = (emergency_t) getbits(me, 9, 11);
unsigned ID13Field = getbits(me, 12, 24);
if (ID13Field) {
mm->squawk_valid = 1;
mm->squawk = decodeID13Field(ID13Field);
@ -1130,7 +1133,9 @@ static void decodeESTargetStatus(struct modesMessage *mm, int check_imf)
}
// 54-56: emergency/priority (ignored)
// 54-56: emergency/priority
mm->emergency_valid = 1;
mm->emergency = (emergency_t) getbits(me, 54, 56);
} else if (mm->mesub == 1) { // Target state and status, V2
// 8: SIL
unsigned is_fms = getbit(me, 9);
@ -1590,6 +1595,20 @@ static const char *sil_type_to_string(sil_type_t type)
}
}
static const char *emergency_to_string(emergency_t emergency)
{
switch (emergency) {
case EMERGENCY_NONE: return "no emergency";
case EMERGENCY_GENERAL: return "general emergency (7700)";
case EMERGENCY_LIFEGUARD: return "lifeguard / medical emergency";
case EMERGENCY_MINFUEL: return "minimum fuel";
case EMERGENCY_NORDO: return "no communications (7600)";
case EMERGENCY_UNLAWFUL: return "unlawful interference (7500)";
case EMERGENCY_DOWNED: return "downed aircraft";
default: return "reserved";
}
}
static void print_hex_bytes(unsigned char *data, size_t len) {
size_t i;
for (i = 0; i < len; ++i) {
@ -2050,6 +2069,9 @@ void displayModesMessage(struct modesMessage *mm) {
printf(" Nav modes: %s\n", nav_modes_to_string(mm->nav.modes));
}
if (mm->emergency_valid) {
printf(" Emergency/priority: %s\n", emergency_to_string(mm->emergency));
}
printf("\n");
fflush(stdout);