Add the BER and a future RSSI to the DMR data.

This commit is contained in:
Jonathan Naylor
2016-03-23 17:30:06 +00:00
parent 1df9c159cb
commit 49a278a952
5 changed files with 58 additions and 16 deletions

View File

@@ -394,9 +394,10 @@ void CDMRSlot::writeModem(unsigned char *data)
// Convert the Audio Sync to be from the BS
CSync::addDMRAudioSync(data + 2U);
unsigned int errors = 0U;
unsigned char fid = m_rfLC->getFID();
if (fid == FID_ETSI || fid == FID_DMRA) {
unsigned int errors = m_fec.regenerateDMR(data + 2U);
errors = m_fec.regenerateDMR(data + 2U);
LogDebug("DMR Slot %u, audio sequence no. 0, errs: %u/141", m_slotNo, errors);
m_rfErrs += errors;
}
@@ -409,7 +410,7 @@ void CDMRSlot::writeModem(unsigned char *data)
if (m_duplex)
writeQueueRF(data);
writeNetworkRF(data, DT_VOICE_SYNC);
writeNetworkRF(data, DT_VOICE_SYNC, errors);
} else if (m_rfState == RS_RF_LISTENING) {
m_rfState = RS_RF_LATE_ENTRY;
}
@@ -428,9 +429,10 @@ void CDMRSlot::writeModem(unsigned char *data)
emb.setLCSS(lcss);
emb.getData(data + 2U);
unsigned int errors = 0U;
unsigned char fid = m_rfLC->getFID();
if (fid == FID_ETSI || fid == FID_DMRA) {
unsigned int errors = m_fec.regenerateDMR(data + 2U);
errors = m_fec.regenerateDMR(data + 2U);
LogDebug("DMR Slot %u, audio sequence no. %u, errs: %u/141", m_slotNo, m_rfN, errors);
m_rfErrs += errors;
}
@@ -443,7 +445,7 @@ void CDMRSlot::writeModem(unsigned char *data)
if (m_duplex)
writeQueueRF(data);
writeNetworkRF(data, DT_VOICE);
writeNetworkRF(data, DT_VOICE, errors);
} else if (m_rfState == RS_RF_LATE_ENTRY) {
CDMREMB emb;
emb.putData(data + 2U);
@@ -498,9 +500,10 @@ void CDMRSlot::writeModem(unsigned char *data)
emb.getData(data + 2U);
// Send the original audio frame out
unsigned int errors = 0U;
unsigned char fid = m_rfLC->getFID();
if (fid == FID_ETSI || fid == FID_DMRA) {
unsigned int errors = m_fec.regenerateDMR(data + 2U);
errors = m_fec.regenerateDMR(data + 2U);
LogDebug("DMR Slot %u, audio sequence no. %u, errs: %u/141", m_slotNo, m_rfN, errors);
m_rfErrs += errors;
}
@@ -513,7 +516,7 @@ void CDMRSlot::writeModem(unsigned char *data)
if (m_duplex)
writeQueueRF(data);
writeNetworkRF(data, DT_VOICE);
writeNetworkRF(data, DT_VOICE, errors);
m_rfState = RS_RF_AUDIO;
@@ -1133,7 +1136,7 @@ void CDMRSlot::writeQueueRF(const unsigned char *data)
m_queue.addData(data, len);
}
void CDMRSlot::writeNetworkRF(const unsigned char* data, unsigned char dataType, FLCO flco, unsigned int srcId, unsigned int dstId)
void CDMRSlot::writeNetworkRF(const unsigned char* data, unsigned char dataType, FLCO flco, unsigned int srcId, unsigned int dstId, unsigned char errors)
{
assert(data != NULL);
@@ -1155,6 +1158,7 @@ void CDMRSlot::writeNetworkRF(const unsigned char* data, unsigned char dataType,
dmrData.setFLCO(flco);
dmrData.setN(m_rfN);
dmrData.setSeqNo(m_rfSeqNo);
dmrData.setBER(errors);
m_rfSeqNo++;
@@ -1163,12 +1167,12 @@ void CDMRSlot::writeNetworkRF(const unsigned char* data, unsigned char dataType,
m_network->write(dmrData);
}
void CDMRSlot::writeNetworkRF(const unsigned char* data, unsigned char dataType)
void CDMRSlot::writeNetworkRF(const unsigned char* data, unsigned char dataType, unsigned char errors)
{
assert(data != NULL);
assert(m_rfLC != NULL);
writeNetworkRF(data, dataType, m_rfLC->getFLCO(), m_rfLC->getSrcId(), m_rfLC->getDstId());
writeNetworkRF(data, dataType, m_rfLC->getFLCO(), m_rfLC->getSrcId(), m_rfLC->getDstId(), errors);
}
void CDMRSlot::writeQueueNet(const unsigned char *data)