Flush the queues if new data comes in.

This commit is contained in:
Jonathan Naylor 2016-06-17 07:37:49 +01:00
parent 199109417b
commit c1fcc2f2f4
3 changed files with 26 additions and 3 deletions

View file

@ -153,7 +153,6 @@ void CDMRSlot::writeModem(unsigned char *data)
return;
}
did = lc->getDstId();
// true sets allow greater than 4k. Need to add boolean in conf for this later.
if (!DstIdWhitelist(did, m_slotNo, true)) {
LogMessage("DMR Slot %u, invalid access attempt to TG%u (TG not in whitelist)", m_slotNo, did);
@ -162,6 +161,7 @@ void CDMRSlot::writeModem(unsigned char *data)
}
m_queue.clear();
m_modem->writeDMRAbort(m_slotNo);
m_rfLC = lc;
@ -518,7 +518,6 @@ void CDMRSlot::writeModem(unsigned char *data)
return;
}
did = lc->getDstId();
// true sets allow greater than 4k. Need to add boolean in conf for this later.
if (!DstIdWhitelist(did, m_slotNo, true)) {
LogMessage("DMR Slot %u, invalid access attempt to TG%u (TG not in whitelist)", m_slotNo, did);
@ -527,6 +526,7 @@ void CDMRSlot::writeModem(unsigned char *data)
}
m_queue.clear();
m_modem->writeDMRAbort(m_slotNo);
m_rfLC = lc;
@ -807,6 +807,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
}
m_queue.clear();
m_modem->writeDMRAbort(m_slotNo);
// Store the LC for the embedded LC
m_netEmbeddedLC.setData(*m_netLC);
@ -1033,8 +1034,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
LogMessage("DMR Slot %u, invalid traffic to TG%u (TG not in whitelist) dataType: %s", m_slotNo, did, dataType);
return;
}
m_queue.clear();
m_modem->writeDMRAbort(m_slotNo);
m_netTimeoutTimer.start();

View file

@ -57,6 +57,7 @@ const unsigned char MMDVM_DMR_DATA2 = 0x1AU;
const unsigned char MMDVM_DMR_LOST2 = 0x1BU;
const unsigned char MMDVM_DMR_SHORTLC = 0x1CU;
const unsigned char MMDVM_DMR_START = 0x1DU;
const unsigned char MMDVM_DMR_ABORT = 0x1EU;
const unsigned char MMDVM_YSF_DATA = 0x20U;
const unsigned char MMDVM_YSF_LOST = 0x21U;
@ -1035,6 +1036,25 @@ bool CModem::writeDMRStart(bool tx)
return m_serial.write(buffer, 4U) == 4;
}
bool CModem::writeDMRAbort(unsigned int slotNo)
{
if (slotNo == 1U)
m_txDMRData1.clear();
else
m_txDMRData2.clear();
unsigned char buffer[4U];
buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = 4U;
buffer[2U] = MMDVM_DMR_ABORT;
buffer[3U] = slotNo;
// CUtils::dump(1U, "Written", buffer, 4U);
return m_serial.write(buffer, 4U) == 4;
}
bool CModem::writeDMRShortLC(const unsigned char* lc)
{
assert(lc != NULL);

View file

@ -64,6 +64,7 @@ public:
bool writeDMRStart(bool tx);
bool writeDMRShortLC(const unsigned char* lc);
bool writeDMRAbort(unsigned int slotNo);
bool setMode(unsigned char mode);