From 6d1afdcce4c8dbdfaad4eb7a0ab8292f227f9f38 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 31 Oct 2022 21:59:36 -0400 Subject: [PATCH] fix issue where data buffer isn't properly cleared on a reset of P25RX data; slightly refactor how P25 sync is detected for performance reasons; --- p25/P25RX.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/p25/P25RX.cpp b/p25/P25RX.cpp index e803bc4..0281b9b 100644 --- a/p25/P25RX.cpp +++ b/p25/P25RX.cpp @@ -74,6 +74,8 @@ void P25RX::reset() m_bitBuffer = 0x00U; m_dataPtr = 0U; + ::memset(m_buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 3U); + m_endPtr = NOENDPTR; m_lostCount = 0U; @@ -393,24 +395,22 @@ bool P25RX::correlateSync() else maxErrs = MAX_SYNC_BITS_ERRS; - // unpack sync bytes - uint8_t sync[P25_SYNC_BYTES_LENGTH]; - sync[0U] = (uint8_t)((m_bitBuffer >> 40) & 0xFFU); - sync[1U] = (uint8_t)((m_bitBuffer >> 32) & 0xFFU); - sync[2U] = (uint8_t)((m_bitBuffer >> 24) & 0xFFU); - sync[3U] = (uint8_t)((m_bitBuffer >> 16) & 0xFFU); - sync[4U] = (uint8_t)((m_bitBuffer >> 8) & 0xFFU); - sync[5U] = (uint8_t)((m_bitBuffer >> 0) & 0xFFU); - - uint8_t errs = 0U; - for (uint8_t i = 0U; i < P25_SYNC_BYTES_LENGTH; i++) - errs += countBits8(sync[i] ^ P25_SYNC_BYTES[i]); - + // fuzzy matching of the data sync bit sequence + uint8_t errs = countBits64((m_bitBuffer & P25_SYNC_BITS_MASK) ^ P25_SYNC_BITS); if (errs <= maxErrs) { ::memset(m_buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 3U); DEBUG2("P25RX: correlateSync(): correlateSync errs", errs); + // unpack sync bytes + uint8_t sync[P25_SYNC_BYTES_LENGTH]; + sync[0U] = (uint8_t)((m_bitBuffer >> 40) & 0xFFU); + sync[1U] = (uint8_t)((m_bitBuffer >> 32) & 0xFFU); + sync[2U] = (uint8_t)((m_bitBuffer >> 24) & 0xFFU); + sync[3U] = (uint8_t)((m_bitBuffer >> 16) & 0xFFU); + sync[4U] = (uint8_t)((m_bitBuffer >> 8) & 0xFFU); + sync[5U] = (uint8_t)((m_bitBuffer >> 0) & 0xFFU); + DEBUG4("P25RX: correlateSync(): sync [b0 - b2]", sync[0], sync[1], sync[2]); DEBUG4("P25RX: correlateSync(): sync [b3 - b5]", sync[3], sync[4], sync[5]);