Handle sync-less data frames.

This commit is contained in:
Jonathan Naylor 2016-02-23 21:01:14 +00:00
parent 50314d27ae
commit 1d93f72b52
3 changed files with 37 additions and 7 deletions

View file

@ -245,7 +245,7 @@ void CDMRSlot::writeModem(unsigned char *data)
m_state = RS_RELAYING_RF_DATA;
setShortLC(m_slotNo, m_lc->getDstId(), gi ? FLCO_GROUP : FLCO_USER_USER, false);
setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, false);
m_display->writeDMR(m_slotNo, srcId, gi, dstId, "RD");
@ -349,10 +349,38 @@ void CDMRSlot::writeModem(unsigned char *data)
m_state = RS_LATE_ENTRY;
}
} else {
CDMREMB emb;
emb.putData(data + 2U);
if (m_state == RS_RELAYING_RF_DATA) {
CDMRSlotType slotType;
slotType.putData(data + 2U);
unsigned char dataType = slotType.getDataType();
if (dataType == DT_RATE_12_DATA || dataType == DT_RATE_34_DATA || dataType == DT_RATE_1_DATA) {
// Regenerate the Slot Type
slotType.getData(data + 2U);
m_frames--;
data[0U] = m_frames == 0U ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
writeQueue(data);
writeNetwork(data, dataType);
if (m_frames == 0U) {
LogMessage("DMR Slot %u, ended RF data transmission", m_slotNo);
writeEndOfTransmission();
}
} else {
// Unhandled data type
LogWarning("DMR Slot %u, unhandled RF data type - 0x%02X", m_slotNo, dataType);
}
} else if (m_state == RS_RELAYING_RF_AUDIO) {
CDMREMB emb;
emb.putData(data + 2U);
if (m_state == RS_RELAYING_RF_AUDIO) {
// Regenerate the EMB
emb.setColorCode(m_colorCode);
emb.getData(data + 2U);
@ -377,6 +405,9 @@ void CDMRSlot::writeModem(unsigned char *data)
writeNetwork(data, DT_VOICE);
} else if (m_state == RS_LATE_ENTRY) {
CDMREMB emb;
emb.putData(data + 2U);
// If we haven't received an LC yet, then be strict on the color code
unsigned char colorCode = emb.getColorCode();
if (colorCode != m_colorCode)

View file

@ -22,8 +22,6 @@
#include <cassert>
#include <cstring>
const unsigned int BUFFER_LENGTH = 200U;
const unsigned char BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U};
#define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7])

View file

@ -56,7 +56,8 @@ bool CYSFParrot::write(const unsigned char* data)
void CYSFParrot::end()
{
m_timer.start();
if (m_used > 0U)
m_timer.start();
m_ptr = 0U;
}