From e6adc0a2961e45272fc6529f00cd7e1cb5da1972 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 2 Aug 2017 20:38:46 +0100 Subject: [PATCH 1/2] Forgot the Q31 to Q15 conversion. --- DStarRX.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DStarRX.cpp b/DStarRX.cpp index 962f958..79721cd 100644 --- a/DStarRX.cpp +++ b/DStarRX.cpp @@ -304,11 +304,13 @@ void CDStarRX::samples(q15_t* samples, const uint16_t* rssi, uint8_t length) dcLevel += dcVals[i]; dcLevel /= length; + q15_t offset = q15_t(__SSAT((dcLevel >> 16), 16)); + for (uint16_t i = 0U; i < length; i++) { m_rssiAccum += rssi[i]; m_rssiCount++; - q15_t sample = samples[i] - dcLevel; + q15_t sample = samples[i] - offset; m_bitBuffer[m_bitPtr] <<= 1; if (sample < 0) From c43616f3c528ec0e1175c27526e5926fd4965623 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 13 Aug 2017 18:40:05 +0100 Subject: [PATCH 2/2] Enhancements suggested by IZ1MLT. --- DStarRX.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/DStarRX.cpp b/DStarRX.cpp index 79721cd..519c23a 100644 --- a/DStarRX.cpp +++ b/DStarRX.cpp @@ -22,12 +22,12 @@ #include "DStarRX.h" #include "Utils.h" -const unsigned int MAX_FRAMES = 75U; +const unsigned int MAX_FRAMES = 150U; // D-Star bit order version of 0x55 0x55 0x6E 0x0A const uint32_t FRAME_SYNC_DATA = 0x00557650U; const uint32_t FRAME_SYNC_MASK = 0x00FFFFFFU; -const uint8_t FRAME_SYNC_ERRS = 2U; +const uint8_t FRAME_SYNC_ERRS = 1U; // D-Star bit order version of 0x55 0x2D 0x16 const uint32_t DATA_SYNC_DATA = 0x00AAB468U; @@ -436,14 +436,12 @@ void CDStarRX::processData() } // Fuzzy matching of the data sync bit sequence - if ((m_frameCount % 21U) == 0U) { - if (m_minSyncPtr < m_maxSyncPtr) { - if (m_dataPtr >= m_minSyncPtr && m_dataPtr <= m_maxSyncPtr) - correlateDataSync(); - } else { - if (m_dataPtr >= m_minSyncPtr || m_dataPtr <= m_maxSyncPtr) - correlateDataSync(); - } + if (m_minSyncPtr < m_maxSyncPtr) { + if (m_dataPtr >= m_minSyncPtr && m_dataPtr <= m_maxSyncPtr) + correlateDataSync(); + } else { + if (m_dataPtr >= m_minSyncPtr || m_dataPtr <= m_maxSyncPtr) + correlateDataSync(); } // We've not seen a data sync for too long, signal RXLOST and change to RX_NONE