Strip out bad callsigns seen in ADS-B ident messages.
Same rules as apply to Comm-B - alphanumeric + space only.
This commit is contained in:
parent
d3448b0efb
commit
b82922e81c
14
mode_s.c
14
mode_s.c
|
@ -716,10 +716,18 @@ static void decodeESIdentAndCategory(struct modesMessage *mm)
|
||||||
mm->callsign[6] = ais_charset[getbits(me, 45, 50)];
|
mm->callsign[6] = ais_charset[getbits(me, 45, 50)];
|
||||||
mm->callsign[7] = ais_charset[getbits(me, 51, 56)];
|
mm->callsign[7] = ais_charset[getbits(me, 51, 56)];
|
||||||
mm->callsign[8] = 0;
|
mm->callsign[8] = 0;
|
||||||
|
mm->callsign_valid = 1;
|
||||||
|
|
||||||
// A common failure mode seems to be to intermittently send
|
// actually valid?
|
||||||
// all zeros. Catch that here.
|
for (unsigned i = 0; i < 8; ++i) {
|
||||||
mm->callsign_valid = (strcmp(mm->callsign, "@@@@@@@@") != 0);
|
if (!(mm->callsign[i] >= 'A' && mm->callsign[i] <= 'Z') &&
|
||||||
|
!(mm->callsign[i] >= '0' && mm->callsign[i] <= '9') &&
|
||||||
|
mm->callsign[i] != ' ') {
|
||||||
|
// Bad callsign, ignore it
|
||||||
|
mm->callsign_valid = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mm->category = ((0x0E - mm->metype) << 4) | mm->mesub;
|
mm->category = ((0x0E - mm->metype) << 4) | mm->mesub;
|
||||||
mm->category_valid = 1;
|
mm->category_valid = 1;
|
||||||
|
|
Loading…
Reference in a new issue