From 0f685095e55c3ce4330fdf3731d31cdb483727e9 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 2 Feb 2018 07:34:59 +0000 Subject: [PATCH] Reset the layer3 data accumulator at end of transmissions. --- NXDNControl.cpp | 7 +++---- NXDNLayer3.cpp | 5 +++++ NXDNLayer3.h | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/NXDNControl.cpp b/NXDNControl.cpp index 12b28d4..0ab043c 100644 --- a/NXDNControl.cpp +++ b/NXDNControl.cpp @@ -106,6 +106,7 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len) if (type == TAG_LOST) { m_rfState = RS_RF_LISTENING; m_rfMask = 0x00U; + m_rfLayer3.reset(); return false; } @@ -131,12 +132,8 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len) m_rssiCount++; } - // CUtils::dump(2U, "NXDN, raw data", data + 2U, NXDN_FRAME_LENGTH_BYTES); - scrambler(data + 2U); - // CUtils::dump(2U, "NXDN, after descrambling", data + 2U, NXDN_FRAME_LENGTH_BYTES); - CNXDNLICH lich; bool valid = lich.decode(data + 2U); @@ -200,6 +197,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne if (m_rfState != RS_RF_AUDIO) { m_rfState = RS_RF_LISTENING; m_rfMask = 0x00U; + m_rfLayer3.reset(); return false; } } else { @@ -748,6 +746,7 @@ void CNXDNControl::writeEndRF() m_rfState = RS_RF_LISTENING; m_rfMask = 0x00U; + m_rfLayer3.reset(); m_rfTimeoutTimer.stop(); diff --git a/NXDNLayer3.cpp b/NXDNLayer3.cpp index 3fc6e33..cf32008 100644 --- a/NXDNLayer3.cpp +++ b/NXDNLayer3.cpp @@ -106,6 +106,11 @@ void CNXDNLayer3::getData(unsigned char* data) const ::memcpy(data, m_data, 22U); } +void CNXDNLayer3::reset() +{ + ::memset(m_data, 0x00U, 22U); +} + CNXDNLayer3& CNXDNLayer3::operator=(const CNXDNLayer3& layer3) { if (&layer3 != this) diff --git a/NXDNLayer3.h b/NXDNLayer3.h index cb2f499..827deee 100644 --- a/NXDNLayer3.h +++ b/NXDNLayer3.h @@ -38,6 +38,8 @@ public: void getData(unsigned char* data) const; + void reset(); + CNXDNLayer3& operator=(const CNXDNLayer3& layer3); private: