Skip to content

Commit a5b0952

Browse files
W3AXLgatekeepaxel
authored
Fixes for more reliable P25 decode at the start of calls (#8)
* DO NOT USE THIS BRANCH; remove sync position settings from processSample(); use calculateLevels for the NID; * whoops put back NID decode dumping; * don't calculateLevels for the NID (it breaks TSDUs, but doesn't seem to impact HDU decoding??); * correlateSync() after handling HDU and set state to P25RXS_VOICE; * Revert: correlateSync() after handling HDU and set state to P25RXS_VOICE; * added state machine debug and removed HDU state reset() --------- Co-authored-by: Bryan Biedenkapp <gatekeep@gmail.com> Co-authored-by: axel <axel@deb.trac>
1 parent 5623f5c commit a5b0952

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

p25/P25RX.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ void P25RX::reset()
8686
m_lostCount = 0U;
8787
m_countdown = 0U;
8888

89+
DEBUG1("P25RX::samples() m_state = P25RXS_NONE");
8990
m_state = P25RXS_NONE;
9091

9192
m_duid = 0xFFU;
@@ -152,6 +153,7 @@ void P25RX::samples(const q15_t* samples, uint16_t* rssi, uint8_t length)
152153
DEBUG4("P25RX::samples() dataPtr/startPtr/endPtr", m_dataPtr, m_startPtr, m_endPtr);
153154
DEBUG4("P25RX::samples() lostCount/maxSyncPtr/minSyncPtr", m_lostCount, m_maxSyncPtr, m_minSyncPtr);
154155

156+
DEBUG1("P25RX::samples() m_state = P25RXS_SYNC");
155157
m_state = P25RXS_SYNC;
156158
m_countdown = 0U;
157159
}
@@ -198,21 +200,14 @@ void P25RX::setCorrCount(uint8_t count)
198200

199201
void P25RX::processSample(q15_t sample)
200202
{
201-
if (m_minSyncPtr < m_maxSyncPtr) {
202-
if (m_dataPtr >= m_minSyncPtr && m_dataPtr <= m_maxSyncPtr)
203-
correlateSync();
204-
}
205-
else {
206-
if (m_dataPtr >= m_minSyncPtr || m_dataPtr <= m_maxSyncPtr)
207-
correlateSync();
208-
}
209-
210203
// initial sample processing does not have an end pointer -- we simply wait till we've read
211204
// the samples up to the maximum sync pointer
212205
if (m_dataPtr == m_maxSyncPtr) {
213206
DEBUG4("P25RX::processSample() dataPtr/startPtr/endPtr", m_dataPtr, m_startPtr, m_maxSyncPtr);
214207
DEBUG4("P25RX::processSample() lostCount/maxSyncPtr/minSyncPtr", m_lostCount, m_maxSyncPtr, m_minSyncPtr);
215208

209+
// calculateLevels(m_startPtr, P25_NID_LENGTH_SYMBOLS);
210+
216211
if (!decodeNid(m_startPtr)) {
217212
io.setDecode(false);
218213
io.setADCDetection(false);
@@ -233,7 +228,7 @@ void P25RX::processSample(q15_t sample)
233228

234229
frame[0U] = 0x01U; // has sync
235230
serial.writeP25Data(frame, P25_HDU_FRAME_LENGTH_BYTES + 1U);
236-
reset();
231+
//reset();
237232
}
238233
return;
239234
case P25_DUID_TDU:
@@ -252,6 +247,7 @@ void P25RX::processSample(q15_t sample)
252247
return;
253248
case P25_DUID_LDU1:
254249
case P25_DUID_VSELP1:
250+
DEBUG1("P25RX::samples() m_state = P25RXS_VOICE");
255251
m_state = P25RXS_VOICE;
256252
break;
257253
case P25_DUID_TSDU:
@@ -270,9 +266,11 @@ void P25RX::processSample(q15_t sample)
270266
return;
271267
case P25_DUID_LDU2:
272268
case P25_DUID_VSELP2:
269+
DEBUG1("P25RX::samples() m_state = P25RXS_VOICE");
273270
m_state = P25RXS_VOICE;
274271
break;
275272
case P25_DUID_PDU:
273+
DEBUG1("P25RX::samples() m_state = P25RXS_DATA");
276274
m_state = P25RXS_DATA;
277275
break;
278276
case P25_DUID_TDULC:
@@ -598,6 +596,8 @@ bool P25RX::decodeNid(uint16_t start)
598596
uint8_t nid[P25_NID_LENGTH_BYTES];
599597
samplesToBits(nidStartPtr, P25_NID_LENGTH_SYMBOLS, nid, 0U, m_centreVal, m_thresholdVal);
600598

599+
DEBUG3("P25RX::decodeNid() sync [b0 - b1]", nid[0], nid[1]);
600+
601601
if (m_nac == 0xF7EU) {
602602
m_duid = nid[1U] & 0x0FU;
603603
DEBUG2("P25RX::decodeNid() DUID for xDU", m_duid);

0 commit comments

Comments
 (0)