From 3bae422a8e2886d8571fbea4647947727944b6e7 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 8 Oct 2018 10:19:31 -0400 Subject: [PATCH] fix proper PDU reception and processing; --- P25Defines.h | 5 +++++ P25RX.cpp | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/P25Defines.h b/P25Defines.h index e4fa287c..bb44914e 100644 --- a/P25Defines.h +++ b/P25Defines.h @@ -47,6 +47,11 @@ const unsigned int P25_TSDU_FRAME_LENGTH_BITS = P25_TSDU_FRAME_LENGTH_BYTES const unsigned int P25_TSDU_FRAME_LENGTH_SYMBOLS = P25_TSDU_FRAME_LENGTH_BYTES * 4U; const unsigned int P25_TSDU_FRAME_LENGTH_SAMPLES = P25_TSDU_FRAME_LENGTH_SYMBOLS * P25_RADIO_SYMBOL_LENGTH; +const unsigned int P25_PDU_HDR_FRAME_LENGTH_BYTES = 45U; +const unsigned int P25_PDU_HDR_FRAME_LENGTH_BITS = P25_PDU_HDR_FRAME_LENGTH_BYTES * 8U; +const unsigned int P25_PDU_HDR_FRAME_LENGTH_SYMBOLS = P25_PDU_HDR_FRAME_LENGTH_BYTES * 4U; +const unsigned int P25_PDU_HDR_FRAME_LENGTH_SAMPLES = P25_PDU_HDR_FRAME_LENGTH_SYMBOLS * P25_RADIO_SYMBOL_LENGTH; + const unsigned int P25_SYNC_LENGTH_BYTES = 6U; const unsigned int P25_SYNC_LENGTH_BITS = P25_SYNC_LENGTH_BYTES * 8U; const unsigned int P25_SYNC_LENGTH_SYMBOLS = P25_SYNC_LENGTH_BYTES * 4U; diff --git a/P25RX.cpp b/P25RX.cpp index 54d42377..d322db0b 100644 --- a/P25RX.cpp +++ b/P25RX.cpp @@ -199,7 +199,19 @@ void CP25RX::processHdr(q15_t sample) serial.writeP25Hdr(frame, P25_HDR_FRAME_LENGTH_BYTES + 1U); } break; - case P25_DUID_TSDU: { + case P25_DUID_PDU: { + calculateLevels(m_hdrSyncPtr, P25_PDU_HDR_FRAME_LENGTH_SYMBOLS); + + DEBUG4("P25RX: sync found in PDU pos/centre/threshold", m_hdrSyncPtr, m_centreVal, m_thresholdVal); + + uint8_t frame[P25_PDU_HDR_FRAME_LENGTH_BYTES + 1U]; + samplesToBits(m_hdrSyncPtr, P25_PDU_HDR_FRAME_LENGTH_SYMBOLS, frame, 8U, m_centreVal, m_thresholdVal); + + frame[0U] = 0x01U; + serial.writeP25Hdr(frame, P25_PDU_HDR_FRAME_LENGTH_BYTES + 1U); + } + break; + case P25_DUID_TSDU: { calculateLevels(m_hdrStartPtr, P25_TSDU_FRAME_LENGTH_SYMBOLS); DEBUG4("P25RX: sync found in TSDU pos/centre/threshold", m_hdrSyncPtr, m_centreVal, m_thresholdVal);