From 1d4bd4e40965e31411f70d5980317766bdcca8ca Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 8 Feb 2018 18:40:23 +0000 Subject: [PATCH] Make NXDN sync detection more lenient when receiving a transmission. --- NXDNRX.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/NXDNRX.cpp b/NXDNRX.cpp index eab67dd..e9bd41b 100644 --- a/NXDNRX.cpp +++ b/NXDNRX.cpp @@ -23,9 +23,10 @@ const q15_t SCALING_FACTOR = 18750; // Q15(0.55) -const uint8_t MAX_FSW_BIT_ERRS = 1U; +const uint8_t MAX_FSW_BIT_START_ERRS = 1U; +const uint8_t MAX_FSW_BIT_RUN_ERRS = 3U; -const uint8_t MAX_FSW_SYMBOLS_ERRS = 1U; +const uint8_t MAX_FSW_SYMBOLS_ERRS = 2U; const uint8_t BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U}; @@ -255,11 +256,17 @@ bool CNXDNRX::correlateFSW() uint8_t sync[NXDN_FSW_BYTES_LENGTH]; samplesToBits(startPtr, NXDN_FSW_LENGTH_SYMBOLS, sync, 0U, m_centreVal, m_thresholdVal); - uint8_t errs = 0U; + uint8_t maxErrs; + if (m_state == NXDNRXS_NONE) + maxErrs = MAX_FSW_BIT_START_ERRS; + else + maxErrs = MAX_FSW_BIT_RUN_ERRS; + + uint8_t errs = 0U; for (uint8_t i = 0U; i < NXDN_FSW_BYTES_LENGTH; i++) errs += countBits8((sync[i] & NXDN_FSW_BYTES_MASK[i]) ^ NXDN_FSW_BYTES[i]); - if (errs <= MAX_FSW_BIT_ERRS) { + if (errs <= maxErrs) { m_maxCorr = corr; m_lostCount = MAX_FSW_FRAMES; m_fswPtr = m_dataPtr;