Begin P25 Header detection.

This commit is contained in:
Jonathan Naylor 2017-01-29 19:28:27 +00:00
parent 9d1fbcfc73
commit 4bc0f36b49
2 changed files with 31 additions and 12 deletions

View File

@ -42,8 +42,10 @@ m_bitBuffer(),
m_buffer(), m_buffer(),
m_bitPtr(0U), m_bitPtr(0U),
m_dataPtr(0U), m_dataPtr(0U),
m_endPtr(NOENDPTR), m_endLduPtr(NOENDPTR),
m_syncPtr(NOENDPTR), m_syncPtr(NOENDPTR),
m_minHdrPtr(NOENDPTR),
m_maxHdrPtr(NOENDPTR),
m_minSyncPtr(NOENDPTR), m_minSyncPtr(NOENDPTR),
m_maxSyncPtr(NOENDPTR), m_maxSyncPtr(NOENDPTR),
m_maxCorr(0), m_maxCorr(0),
@ -67,8 +69,10 @@ void CP25RX::reset()
m_bitPtr = 0U; m_bitPtr = 0U;
m_maxCorr = 0; m_maxCorr = 0;
m_averagePtr = 0U; m_averagePtr = 0U;
m_endPtr = NOENDPTR; m_endLduPtr = NOENDPTR;
m_syncPtr = NOENDPTR; m_syncPtr = NOENDPTR;
m_minHdrPtr = NOENDPTR;
m_maxHdrPtr = NOENDPTR;
m_minSyncPtr = NOENDPTR; m_minSyncPtr = NOENDPTR;
m_maxSyncPtr = NOENDPTR; m_maxSyncPtr = NOENDPTR;
m_centreVal = 0; m_centreVal = 0;
@ -116,9 +120,12 @@ void CP25RX::processNone(q15_t sample)
io.setDecode(true); io.setDecode(true);
io.setADCDetection(true); io.setADCDetection(true);
// If sync is between the two Hdr ptrs then we have a Hdr
// Send data out and update the m_endLduPtr
} }
if (m_dataPtr == m_endPtr) { if (m_dataPtr == m_endLduPtr) {
for (uint8_t i = 0U; i < 16U; i++) { for (uint8_t i = 0U; i < 16U; i++) {
m_centre[i] = m_centreBest; m_centre[i] = m_centreBest;
m_threshold[i] = m_thresholdBest; m_threshold[i] = m_thresholdBest;
@ -129,7 +136,7 @@ void CP25RX::processNone(q15_t sample)
DEBUG4("P25RX: sync found in None pos/centre/threshold", m_syncPtr, m_centreVal, m_thresholdVal); DEBUG4("P25RX: sync found in None pos/centre/threshold", m_syncPtr, m_centreVal, m_thresholdVal);
uint16_t ptr = m_endPtr + P25_RADIO_SYMBOL_LENGTH + 1U; uint16_t ptr = m_endLduPtr + P25_RADIO_SYMBOL_LENGTH + 1U;
if (ptr >= P25_LDU_FRAME_LENGTH_SAMPLES) if (ptr >= P25_LDU_FRAME_LENGTH_SAMPLES)
ptr -= P25_LDU_FRAME_LENGTH_SAMPLES; ptr -= P25_LDU_FRAME_LENGTH_SAMPLES;
@ -165,8 +172,8 @@ void CP25RX::processData(q15_t sample)
correlateSync(false); correlateSync(false);
} }
if (m_dataPtr == m_endPtr) { if (m_dataPtr == m_endLduPtr) {
uint16_t ptr = m_endPtr + P25_RADIO_SYMBOL_LENGTH + 1U; uint16_t ptr = m_endLduPtr + P25_RADIO_SYMBOL_LENGTH + 1U;
if (ptr >= P25_LDU_FRAME_LENGTH_SAMPLES) if (ptr >= P25_LDU_FRAME_LENGTH_SAMPLES)
ptr -= P25_LDU_FRAME_LENGTH_SAMPLES; ptr -= P25_LDU_FRAME_LENGTH_SAMPLES;
@ -215,7 +222,7 @@ void CP25RX::processData(q15_t sample)
serial.writeP25Lost(); serial.writeP25Lost();
m_state = P25RXS_NONE; m_state = P25RXS_NONE;
m_endPtr = NOENDPTR; m_endLduPtr = NOENDPTR;
} else { } else {
frame[0U] = m_lostCount == (MAX_SYNC_FRAMES - 1U) ? 0x01U : 0x00U; frame[0U] = m_lostCount == (MAX_SYNC_FRAMES - 1U) ? 0x01U : 0x00U;
@ -284,9 +291,19 @@ bool CP25RX::correlateSync(bool none)
m_lostCount = MAX_SYNC_FRAMES; m_lostCount = MAX_SYNC_FRAMES;
m_syncPtr = m_dataPtr; m_syncPtr = m_dataPtr;
m_endPtr = m_dataPtr + P25_LDU_FRAME_LENGTH_SAMPLES - P25_SYNC_LENGTH_SAMPLES - 1U; m_endLduPtr = m_dataPtr + P25_LDU_FRAME_LENGTH_SAMPLES - P25_SYNC_LENGTH_SAMPLES - 1U;
if (m_endPtr >= P25_LDU_FRAME_LENGTH_SAMPLES) if (m_endLduPtr >= P25_LDU_FRAME_LENGTH_SAMPLES)
m_endPtr -= P25_LDU_FRAME_LENGTH_SAMPLES; m_endLduPtr -= P25_LDU_FRAME_LENGTH_SAMPLES;
if (none) {
m_minHdrPtr = m_dataPtr + P25_HDR_FRAME_LENGTH_SAMPLES - 1U;
if (m_minHdrPtr >= P25_LDU_FRAME_LENGTH_SAMPLES)
m_minHdrPtr -= P25_LDU_FRAME_LENGTH_SAMPLES;
m_maxHdrPtr = m_dataPtr + P25_HDR_FRAME_LENGTH_SAMPLES + 1U;
if (m_maxHdrPtr >= P25_LDU_FRAME_LENGTH_SAMPLES)
m_maxHdrPtr -= P25_LDU_FRAME_LENGTH_SAMPLES;
}
return true; return true;
} }

View File

@ -41,7 +41,9 @@ private:
q15_t m_buffer[P25_LDU_FRAME_LENGTH_SAMPLES]; q15_t m_buffer[P25_LDU_FRAME_LENGTH_SAMPLES];
uint16_t m_bitPtr; uint16_t m_bitPtr;
uint16_t m_dataPtr; uint16_t m_dataPtr;
uint16_t m_endPtr; uint16_t m_endLduPtr;
uint16_t m_minHdrPtr;
uint16_t m_maxHdrPtr;
uint16_t m_minSyncPtr; uint16_t m_minSyncPtr;
uint16_t m_maxSyncPtr; uint16_t m_maxSyncPtr;
uint16_t m_syncPtr; uint16_t m_syncPtr;