VK1ET : Use error corrected DF17
Actually use the (DF17) messages where we do bit correction. Other changes to AVR message I/O. 1) treat mlat timestamp of zero as invalid (easier to work with than (-1) and equally unlikely). 2) If we don't have a valid timestamp send a without timestamp '*.......' message rather than '@.......' with invalid time. 3) Drop interpretation of obsolete AVR ' #' & '$' formats - they wouldn't have worked anyway (wrong length).
This commit is contained in:
parent
e33591d65d
commit
be6cb6eaf0
26
dump1090.c
26
dump1090.c
|
@ -1974,7 +1974,7 @@ void displayModesMessage(struct modesMessage *mm) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show the raw message.
|
// Show the raw message.
|
||||||
if (Modes.mlat) {
|
if (Modes.mlat && mm->timestampMsg) {
|
||||||
printf("@");
|
printf("@");
|
||||||
pTimeStamp = (unsigned char *) &mm->timestampMsg;
|
pTimeStamp = (unsigned char *) &mm->timestampMsg;
|
||||||
for (j=5; j>=0;j--) {
|
for (j=5; j>=0;j--) {
|
||||||
|
@ -2465,7 +2465,7 @@ void detectModeS(uint16_t *m, uint32_t mlen) {
|
||||||
|
|
||||||
// Update statistics
|
// Update statistics
|
||||||
if (Modes.stats) {
|
if (Modes.stats) {
|
||||||
if (mm.crcok || use_correction) {
|
if (mm.crcok || use_correction || !mm.crc) {
|
||||||
if (errors == 0) Modes.stat_demodulated++;
|
if (errors == 0) Modes.stat_demodulated++;
|
||||||
if (mm.correctedbits == 0) {
|
if (mm.correctedbits == 0) {
|
||||||
if (mm.crcok) {Modes.stat_goodcrc++;}
|
if (mm.crcok) {Modes.stat_goodcrc++;}
|
||||||
|
@ -2542,7 +2542,7 @@ void detectModeS(uint16_t *m, uint32_t mlen) {
|
||||||
// processing and visualization
|
// processing and visualization
|
||||||
//
|
//
|
||||||
void useModesMessage(struct modesMessage *mm) {
|
void useModesMessage(struct modesMessage *mm) {
|
||||||
if ((Modes.check_crc == 0) || (mm->crcok)) {
|
if ((Modes.check_crc == 0) || (mm->crcok) || (mm->crc == 0)) { // not checking, ok or fixed
|
||||||
|
|
||||||
// Track aircrafts if...
|
// Track aircrafts if...
|
||||||
if ( (Modes.interactive) // in interactive mode
|
if ( (Modes.interactive) // in interactive mode
|
||||||
|
@ -2916,7 +2916,9 @@ int decodeCPRrelative(struct aircraft *a, int fflag, int surface) {
|
||||||
struct aircraft *interactiveReceiveData(struct modesMessage *mm) {
|
struct aircraft *interactiveReceiveData(struct modesMessage *mm) {
|
||||||
struct aircraft *a, *aux;
|
struct aircraft *a, *aux;
|
||||||
|
|
||||||
if (Modes.check_crc && mm->crcok == 0) return NULL;
|
// Return if (checking crc) AND (not crcok) AND (not fixed)
|
||||||
|
if (Modes.check_crc && (mm->crcok == 0) && mm->crc)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
// Loookup our aircraft or create a new one
|
// Loookup our aircraft or create a new one
|
||||||
a = interactiveFindAircraft(mm->addr);
|
a = interactiveFindAircraft(mm->addr);
|
||||||
|
@ -3357,7 +3359,7 @@ void modesSendRawOutput(struct modesMessage *mm) {
|
||||||
int j;
|
int j;
|
||||||
unsigned char * pTimeStamp;
|
unsigned char * pTimeStamp;
|
||||||
|
|
||||||
if (Modes.mlat) {
|
if (Modes.mlat && mm->timestampMsg) {
|
||||||
*p++ = '@';
|
*p++ = '@';
|
||||||
pTimeStamp = (unsigned char *) &mm->timestampMsg;
|
pTimeStamp = (unsigned char *) &mm->timestampMsg;
|
||||||
for (j = 5; j >= 0; j--) {
|
for (j = 5; j >= 0; j--) {
|
||||||
|
@ -3429,7 +3431,7 @@ void modesSendSBSOutput(struct modesMessage *mm) {
|
||||||
p += sprintf(p, "MSG,%d,111,11111,%06X,111111,", msgType, mm->addr);
|
p += sprintf(p, "MSG,%d,111,11111,%06X,111111,", msgType, mm->addr);
|
||||||
|
|
||||||
// Fields 7 & 8 are the current time and date
|
// Fields 7 & 8 are the current time and date
|
||||||
if (mm->timestampMsg != (uint64_t)(-1)) { // Make sure the records' timestamp is valid before outputing it
|
if (mm->timestampMsg) { // Make sure the records' timestamp is valid before outputing it
|
||||||
epocTime = Modes.stSystemTimeBlk; // This is the time of the start of the Block we're processing
|
epocTime = Modes.stSystemTimeBlk; // This is the time of the start of the Block we're processing
|
||||||
offset = (int) (mm->timestampMsg - Modes.timestampBlk); // This is the time (in 12Mhz ticks) into the Block
|
offset = (int) (mm->timestampMsg - Modes.timestampBlk); // This is the time (in 12Mhz ticks) into the Block
|
||||||
offset = offset / 12000; // convert to milliseconds
|
offset = offset / 12000; // convert to milliseconds
|
||||||
|
@ -3559,7 +3561,7 @@ int decodeHexMessage(struct client *c) {
|
||||||
// Mixing of data from two or more different receivers and publishing
|
// Mixing of data from two or more different receivers and publishing
|
||||||
// as coming from one would lead to corrupt mlat data
|
// as coming from one would lead to corrupt mlat data
|
||||||
// Non timemarked internet data has indeterminate delay
|
// Non timemarked internet data has indeterminate delay
|
||||||
mm.timestampMsg = -1;
|
mm.timestampMsg = 0;
|
||||||
mm.signalLevel = -1;
|
mm.signalLevel = -1;
|
||||||
|
|
||||||
// Remove spaces on the left and on the right
|
// Remove spaces on the left and on the right
|
||||||
|
@ -3572,7 +3574,7 @@ int decodeHexMessage(struct client *c) {
|
||||||
|
|
||||||
// Turn the message into binary.
|
// Turn the message into binary.
|
||||||
// Accept *-AVR raw @-AVR/BEAST timeS+raw %-AVR timeS+raw (CRC good) <-BEAST timeS+sigL+raw
|
// Accept *-AVR raw @-AVR/BEAST timeS+raw %-AVR timeS+raw (CRC good) <-BEAST timeS+sigL+raw
|
||||||
// and some AVR recorer that we can understand
|
// and some AVR records that we can understand
|
||||||
if (hex[l-1] != ';') {return (0);} // not complete - abort
|
if (hex[l-1] != ';') {return (0);} // not complete - abort
|
||||||
|
|
||||||
switch(hex[0]) {
|
switch(hex[0]) {
|
||||||
|
@ -3581,11 +3583,9 @@ int decodeHexMessage(struct client *c) {
|
||||||
hex += 15; l -= 16; // Skip <, timestamp and siglevel, and ;
|
hex += 15; l -= 16; // Skip <, timestamp and siglevel, and ;
|
||||||
break;}
|
break;}
|
||||||
|
|
||||||
case '@':
|
case '@': // No CRC check
|
||||||
case '%':
|
case '%': { // CRC is OK
|
||||||
case '#':
|
hex += 13; l -= 14; // Skip @,%, and timestamp, and ;
|
||||||
case '$': {
|
|
||||||
hex += 13; l -= 14; // Skip @,%,#,$, and timestamp, and ;
|
|
||||||
break;}
|
break;}
|
||||||
|
|
||||||
case '*':
|
case '*':
|
||||||
|
|
Loading…
Reference in a new issue