Only pass on relevent frame types.

This commit is contained in:
Jonathan Naylor 2016-03-29 20:12:37 +01:00
parent c565a505a0
commit fa1a1daa45
1 changed files with 31 additions and 15 deletions

View File

@ -137,19 +137,35 @@ bool CDMRSlotRX::processSample(q15_t sample)
switch (dataType) { switch (dataType) {
case DT_DATA_HEADER: case DT_DATA_HEADER:
case DT_RATE_12_DATA:
case DT_RATE_34_DATA:
case DT_RATE_1_DATA:
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U); serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
m_state = DMRRXS_DATA; m_state = DMRRXS_DATA;
m_type = dataType; m_type = dataType;
break; break;
case DT_RATE_12_DATA:
case DT_RATE_34_DATA:
case DT_RATE_1_DATA:
if (m_state == DMRRXS_DATA) {
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
m_type = dataType;
}
break;
case DT_VOICE_LC_HEADER: case DT_VOICE_LC_HEADER:
case DT_VOICE_PI_HEADER:
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U); serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
m_state = DMRRXS_VOICE; m_state = DMRRXS_VOICE;
break; break;
default: case DT_VOICE_PI_HEADER:
if (m_state == DMRRXS_VOICE)
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
m_state = DMRRXS_VOICE;
break;
case DT_TERMINATOR_WITH_LC:
if (m_state == DMRRXS_VOICE) {
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
m_state = DMRRXS_NONE;
m_endPtr = NOENDPTR;
}
break;
default: // DT_CSBK
serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U); serial.writeDMRData(m_slot, frame, DMR_FRAME_LENGTH_BYTES + 1U);
m_state = DMRRXS_NONE; m_state = DMRRXS_NONE;
m_endPtr = NOENDPTR; m_endPtr = NOENDPTR;
@ -164,6 +180,7 @@ bool CDMRSlotRX::processSample(q15_t sample)
m_syncCount = 0U; m_syncCount = 0U;
m_n = 0U; m_n = 0U;
} else { } else {
if (m_state != DMRRXS_NONE) {
m_syncCount++; m_syncCount++;
if (m_syncCount >= MAX_SYNC_LOST_FRAMES) { if (m_syncCount >= MAX_SYNC_LOST_FRAMES) {
serial.writeDMRLost(m_slot); serial.writeDMRLost(m_slot);
@ -172,10 +189,9 @@ bool CDMRSlotRX::processSample(q15_t sample)
m_centre = 0; m_centre = 0;
m_state = DMRRXS_NONE; m_state = DMRRXS_NONE;
m_endPtr = NOENDPTR; m_endPtr = NOENDPTR;
return false; }
} }
// Voice data
if (m_state == DMRRXS_VOICE) { if (m_state == DMRRXS_VOICE) {
if (m_n >= 5U) { if (m_n >= 5U) {
frame[0U] = CONTROL_VOICE; frame[0U] = CONTROL_VOICE;