Add new processing for D-Star Fast Data which doesn't clobber normal

D-Star audio.
This commit is contained in:
Jonathan Naylor
2025-03-12 12:55:25 +00:00
parent 351c1199fb
commit 78fc96b0a5
12 changed files with 259 additions and 113 deletions

View File

@@ -44,6 +44,7 @@ bool CDMRSlot::m_duplex = true;
CDMRLookup* CDMRSlot::m_lookup = NULL;
unsigned int CDMRSlot::m_hangCount = 3U * 17U;
DMR_OVCM_TYPES CDMRSlot::m_ovcm = DMR_OVCM_OFF;
bool CDMRSlot::m_protect = false;
CRSSIInterpolator* CDMRSlot::m_rssiMapper = NULL;
@@ -222,6 +223,15 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
unsigned int dstId = lc->getDstId();
FLCO flco = lc->getFLCO();
if (!m_protect) {
if (lc->getPF()) {
LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId);
delete lc;
m_rfState = RS_RF_LISTENING;
return false;
}
}
if (!CDMRAccessControl::validateSrcId(srcId)) {
LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId);
delete lc;
@@ -320,10 +330,12 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
writeQueueRF(data);
if (m_protect) {
if (m_duplex)
writeQueueRF(data);
writeNetworkRF(data, DT_VOICE_PI_HEADER);
writeNetworkRF(data, DT_VOICE_PI_HEADER);
}
return true;
} else if (dataType == DT_TERMINATOR_WITH_LC) {
@@ -810,6 +822,15 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
unsigned int dstId = lc->getDstId();
FLCO flco = lc->getFLCO();
if (!m_protect) {
if (lc->getPF()) {
LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId);
delete lc;
m_rfState = RS_RF_LISTENING;
return false;
}
}
if (!CDMRAccessControl::validateSrcId(srcId)) {
LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId);
delete lc;
@@ -1246,7 +1267,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeQueueNet(data);
if (m_protect)
writeQueueNet(data);
#if defined(DUMP_DMR)
writeFile(data);
@@ -1957,7 +1979,7 @@ void CDMRSlot::writeQueueNet(const unsigned char *data)
m_queue.addData(data, len);
}
void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM_TYPES ovcm)
void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM_TYPES ovcm, bool protect)
{
assert(modem != NULL);
assert(display != NULL);
@@ -1974,6 +1996,7 @@ void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData
m_lookup = lookup;
m_hangCount = callHang * 17U;
m_ovcm = ovcm;
m_protect = protect;
m_rssiMapper = rssiMapper;