Refine the timeout handling.

This commit is contained in:
Jonathan Naylor 2017-03-12 19:25:01 +00:00
parent 90e2f14db4
commit 8e23051a95

View file

@ -135,8 +135,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
LogMessage("DMR Slot %u, RF voice transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); LogMessage("DMR Slot %u, RF voice transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
else else
LogMessage("DMR Slot %u, RF voice transmission lost, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); LogMessage("DMR Slot %u, RF voice transmission lost, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits));
writeEndRF(true); if (m_rfTimeout) {
return true; writeEndRF();
return false;
} else {
writeEndRF(true);
return true;
}
} }
if (data[0U] == TAG_LOST && m_rfState == RS_RF_DATA) { if (data[0U] == TAG_LOST && m_rfState == RS_RF_DATA) {
@ -326,9 +331,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
else else
LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits));
writeEndRF(); if (m_rfTimeout) {
writeEndRF();
return true; return false;
} else {
writeEndRF();
return true;
}
} else if (dataType == DT_DATA_HEADER) { } else if (dataType == DT_DATA_HEADER) {
if (m_rfState == RS_RF_DATA) if (m_rfState == RS_RF_DATA)
return true; return true;
@ -530,6 +539,8 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
m_rfEmbeddedData[m_rfEmbeddedWriteN].reset(); m_rfEmbeddedData[m_rfEmbeddedWriteN].reset();
m_display->writeDMRRSSI(m_slotNo, m_rssi);
if (!m_rfTimeout) { if (!m_rfTimeout) {
data[0U] = TAG_DATA; data[0U] = TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;
@ -538,11 +549,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
writeQueueRF(data); writeQueueRF(data);
writeNetworkRF(data, DT_VOICE_SYNC, errors); writeNetworkRF(data, DT_VOICE_SYNC, errors);
return true;
} }
m_display->writeDMRRSSI(m_slotNo, m_rssi); return false;
return !m_rfTimeout;
} else if (m_rfState == RS_RF_LISTENING) { } else if (m_rfState == RS_RF_LISTENING) {
m_rfEmbeddedLC.reset(); m_rfEmbeddedLC.reset();
m_rfState = RS_RF_LATE_ENTRY; m_rfState = RS_RF_LATE_ENTRY;
@ -648,28 +659,29 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
emb.setLCSS(lcss); emb.setLCSS(lcss);
emb.getData(data + 2U); emb.getData(data + 2U);
data[0U] = TAG_DATA; if (!m_rfTimeout) {
data[1U] = 0x00U; data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (!m_rfTimeout)
writeNetworkRF(data, DT_VOICE, errors); writeNetworkRF(data, DT_VOICE, errors);
if (m_embeddedLCOnly) { if (m_embeddedLCOnly) {
// Only send the previously received LC // Only send the previously received LC
lcss = m_rfEmbeddedLC.getData(data + 2U, m_rfN); lcss = m_rfEmbeddedLC.getData(data + 2U, m_rfN);
// Regenerate the EMB // Regenerate the EMB
emb.setColorCode(m_colorCode); emb.setColorCode(m_colorCode);
emb.setLCSS(lcss); emb.setLCSS(lcss);
emb.getData(data + 2U); emb.getData(data + 2U);
} }
if (!m_rfTimeout) {
if (m_duplex) if (m_duplex)
writeQueueRF(data); writeQueueRF(data);
return true;
} }
return !m_rfTimeout; return false;
} else if (m_rfState == RS_RF_LATE_ENTRY) { } else if (m_rfState == RS_RF_LATE_ENTRY) {
CDMREMB emb; CDMREMB emb;
emb.putData(data + 2U); emb.putData(data + 2U);