Handle EOT on rejected frames correctly.

This commit is contained in:
Jonathan Naylor 2020-10-21 10:17:52 +01:00
parent 1bb1e9da59
commit bab4b50d30
2 changed files with 17 additions and 1 deletions

View file

@ -442,6 +442,22 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
}
}
if (m_rfState == RS_RF_REJECTED) {
CM17Convolution conv;
unsigned char frame[M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES + M17_CRC_LENGTH_BYTES];
conv.decodeData(data + 2U + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES, frame);
bool valid = CM17CRC::checkCRC(frame, M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES + M17_CRC_LENGTH_BYTES);
if (valid) {
// Handle the EOT for rejected frames
unsigned int fn = (frame[0U] << 8) + (frame[1U] << 0);
if ((fn & 0x8000U) == 0x8000U)
writeEndRF();
}
return false;
}
return true;
}

View file

@ -19,6 +19,6 @@
#if !defined(VERSION_H)
#define VERSION_H
const char* VERSION = "20201020";
const char* VERSION = "20201021";
#endif