From 9c2091c060579a1cfbe66218d515aa8d9b67c78d Mon Sep 17 00:00:00 2001 From: Silvano Seva Date: Thu, 21 Jul 2022 22:14:55 +0200 Subject: [PATCH] Changed M17 RX behaviour so that received stream data is forwarded to codec2 decode only when a full valid LSF is received. --- openrtx/include/protocols/M17/M17LinkSetupFrame.hpp | 4 ++-- openrtx/src/protocols/M17/M17LinkSetupFrame.cpp | 4 ++-- openrtx/src/rtx/OpMode_M17.cpp | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/openrtx/include/protocols/M17/M17LinkSetupFrame.hpp b/openrtx/include/protocols/M17/M17LinkSetupFrame.hpp index d8848130..82601a51 100644 --- a/openrtx/include/protocols/M17/M17LinkSetupFrame.hpp +++ b/openrtx/include/protocols/M17/M17LinkSetupFrame.hpp @@ -122,7 +122,7 @@ public: * @return true if CRC of LSF data matches the one stored in the LSF itself, * false otherwise. */ - bool valid(); + bool valid() const; /** * Get underlying data. @@ -150,7 +150,7 @@ private: * \param len: lenght of the data block, in bytes. * \return computed CRC16 over the data block. */ - uint16_t crc16(const void *data, const size_t len); + uint16_t crc16(const void *data, const size_t len) const; struct __attribute__((packed)) diff --git a/openrtx/src/protocols/M17/M17LinkSetupFrame.cpp b/openrtx/src/protocols/M17/M17LinkSetupFrame.cpp index f096e546..4bdc849b 100644 --- a/openrtx/src/protocols/M17/M17LinkSetupFrame.cpp +++ b/openrtx/src/protocols/M17/M17LinkSetupFrame.cpp @@ -88,7 +88,7 @@ void M17LinkSetupFrame::updateCrc() data.crc = __builtin_bswap16(crc); } -bool M17LinkSetupFrame::valid() +bool M17LinkSetupFrame::valid() const { uint16_t crc = crc16(&data, 28); if(data.crc == __builtin_bswap16(crc)) return true; @@ -138,7 +138,7 @@ lich_t M17LinkSetupFrame::generateLichSegment(const uint8_t segmentNum) return result; } -uint16_t M17LinkSetupFrame::crc16(const void *data, const size_t len) +uint16_t M17LinkSetupFrame::crc16(const void *data, const size_t len) const { const uint8_t *ptr = reinterpret_cast< const uint8_t *>(data); uint16_t crc = 0xFFFF; diff --git a/openrtx/src/rtx/OpMode_M17.cpp b/openrtx/src/rtx/OpMode_M17.cpp index 11f65e5c..74c065f1 100644 --- a/openrtx/src/rtx/OpMode_M17.cpp +++ b/openrtx/src/rtx/OpMode_M17.cpp @@ -163,8 +163,9 @@ void OpMode_M17::rxState(rtxStatus_t *const status) { auto& frame = demodulator.getFrame(); auto type = decoder.decodeFrame(frame); + bool lsfOk = decoder.getLsf().valid(); - if(type == M17FrameType::STREAM) + if((type == M17FrameType::STREAM) && (lsfOk == true)) { M17StreamFrame sf = decoder.getStreamFrame(); codec_pushFrame(sf.payload().data(), false);