Change infilling to be more lenient.
This commit is contained in:
parent
e0be09fd07
commit
b34cd230c7
59
DMRSlot.cpp
59
DMRSlot.cpp
|
@ -51,10 +51,9 @@ m_seqNo(0U),
|
||||||
m_n(0U),
|
m_n(0U),
|
||||||
m_networkWatchdog(1000U, 0U, 1500U),
|
m_networkWatchdog(1000U, 0U, 1500U),
|
||||||
m_timeoutTimer(1000U, timeout),
|
m_timeoutTimer(1000U, timeout),
|
||||||
m_packetTimer(1000U, 0U, 100U),
|
m_packetTimer(1000U, 0U, 300U),
|
||||||
m_elapsed(),
|
m_elapsed(),
|
||||||
m_frames(0U),
|
m_frames(0U),
|
||||||
m_blocks(0U),
|
|
||||||
m_lost(0U),
|
m_lost(0U),
|
||||||
m_fec(),
|
m_fec(),
|
||||||
m_bits(0U),
|
m_bits(0U),
|
||||||
|
@ -200,7 +199,7 @@ void CDMRSlot::writeModem(unsigned char *data)
|
||||||
unsigned int srcId = dataHeader.getSrcId();
|
unsigned int srcId = dataHeader.getSrcId();
|
||||||
unsigned int dstId = dataHeader.getDstId();
|
unsigned int dstId = dataHeader.getDstId();
|
||||||
|
|
||||||
m_blocks = dataHeader.getBlocks();
|
m_frames = dataHeader.getBlocks();
|
||||||
|
|
||||||
m_lc = new CLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
m_lc = new CLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
||||||
|
|
||||||
|
@ -230,7 +229,7 @@ void CDMRSlot::writeModem(unsigned char *data)
|
||||||
|
|
||||||
m_display->writeDMR(m_slotNo, srcId, gi, dstId);
|
m_display->writeDMR(m_slotNo, srcId, gi, dstId);
|
||||||
|
|
||||||
LogMessage("DMR Slot %u, received RF data header from %u to %s%u, %u blocks", m_slotNo, srcId, gi ? "TG ": "", dstId, m_blocks);
|
LogMessage("DMR Slot %u, received RF data header from %u to %s%u, %u blocks", m_slotNo, srcId, gi ? "TG ": "", dstId, m_frames);
|
||||||
} else if (dataType == DT_CSBK) {
|
} else if (dataType == DT_CSBK) {
|
||||||
CCSBK csbk(data + 2U);
|
CCSBK csbk(data + 2U);
|
||||||
// if (!csbk.isValid()) {
|
// if (!csbk.isValid()) {
|
||||||
|
@ -281,15 +280,15 @@ void CDMRSlot::writeModem(unsigned char *data)
|
||||||
CDMRSync sync;
|
CDMRSync sync;
|
||||||
sync.addSync(data + 2U, DST_BS_DATA);
|
sync.addSync(data + 2U, DST_BS_DATA);
|
||||||
|
|
||||||
m_blocks--;
|
m_frames--;
|
||||||
|
|
||||||
data[0U] = m_blocks == 0U ? TAG_EOT : TAG_DATA;
|
data[0U] = m_frames == 0U ? TAG_EOT : TAG_DATA;
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
writeNetwork(data, dataType);
|
writeNetwork(data, dataType);
|
||||||
writeQueue(data);
|
writeQueue(data);
|
||||||
|
|
||||||
if (m_blocks == 0U) {
|
if (m_frames == 0U) {
|
||||||
LogMessage("DMR Slot %u, ended RF data transmission", m_slotNo);
|
LogMessage("DMR Slot %u, ended RF data transmission", m_slotNo);
|
||||||
writeEndOfTransmission();
|
writeEndOfTransmission();
|
||||||
}
|
}
|
||||||
|
@ -432,6 +431,12 @@ void CDMRSlot::writeEndOfTransmission()
|
||||||
m_timeoutTimer.stop();
|
m_timeoutTimer.stop();
|
||||||
m_packetTimer.stop();
|
m_packetTimer.stop();
|
||||||
|
|
||||||
|
m_frames = 0U;
|
||||||
|
m_lost = 0U;
|
||||||
|
|
||||||
|
m_errs = 0U;
|
||||||
|
m_bits = 0U;
|
||||||
|
|
||||||
delete m_lc;
|
delete m_lc;
|
||||||
m_lc = NULL;
|
m_lc = NULL;
|
||||||
|
|
||||||
|
@ -483,6 +488,10 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_bits = 1U;
|
m_bits = 1U;
|
||||||
m_errs = 0U;
|
m_errs = 0U;
|
||||||
|
|
||||||
|
// 300ms of idle to give breathing space for lost frames
|
||||||
|
for (unsigned int i = 0U; i < 5U; i++)
|
||||||
|
writeQueue(m_idle);
|
||||||
|
|
||||||
for (unsigned int i = 0U; i < 3U; i++)
|
for (unsigned int i = 0U; i < 3U; i++)
|
||||||
writeQueue(data);
|
writeQueue(data);
|
||||||
|
|
||||||
|
@ -563,7 +572,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
unsigned int srcId = dataHeader.getSrcId();
|
unsigned int srcId = dataHeader.getSrcId();
|
||||||
unsigned int dstId = dataHeader.getDstId();
|
unsigned int dstId = dataHeader.getDstId();
|
||||||
|
|
||||||
m_blocks = dataHeader.getBlocks();
|
m_frames = dataHeader.getBlocks();
|
||||||
|
|
||||||
m_lc = new CLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
m_lc = new CLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId);
|
||||||
|
|
||||||
|
@ -593,7 +602,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
|
|
||||||
m_display->writeDMR(m_slotNo, dmrData.getSrcId(), gi, dmrData.getDstId());
|
m_display->writeDMR(m_slotNo, dmrData.getSrcId(), gi, dmrData.getDstId());
|
||||||
|
|
||||||
LogMessage("DMR Slot %u, received network data header from %u to %s%u, %u blocks", m_slotNo, dmrData.getSrcId(), gi ? "TG ": "", dmrData.getDstId(), m_blocks);
|
LogMessage("DMR Slot %u, received network data header from %u to %s%u, %u blocks", m_slotNo, dmrData.getSrcId(), gi ? "TG ": "", dmrData.getDstId(), m_frames);
|
||||||
} else if (dataType == DT_VOICE_SYNC) {
|
} else if (dataType == DT_VOICE_SYNC) {
|
||||||
if (m_state == RS_LISTENING) {
|
if (m_state == RS_LISTENING) {
|
||||||
m_lc = new CLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
|
m_lc = new CLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
|
||||||
|
@ -638,9 +647,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_elapsed.start();
|
m_elapsed.start();
|
||||||
m_lost = 0U;
|
m_lost = 0U;
|
||||||
} else {
|
} else {
|
||||||
bool allow = insertSilence(data, dmrData.getSeqNo());
|
insertSilence(data, dmrData.getSeqNo());
|
||||||
if (!allow)
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert the Audio Sync to be from the BS
|
// Convert the Audio Sync to be from the BS
|
||||||
|
@ -685,9 +692,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_elapsed.start();
|
m_elapsed.start();
|
||||||
m_lost = 0U;
|
m_lost = 0U;
|
||||||
} else {
|
} else {
|
||||||
bool allow = insertSilence(data, dmrData.getSeqNo());
|
insertSilence(data, dmrData.getSeqNo());
|
||||||
if (!allow)
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
writeQueue(data);
|
writeQueue(data);
|
||||||
|
@ -760,9 +765,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
CDMRSync sync;
|
CDMRSync sync;
|
||||||
sync.addSync(data + 2U, DST_BS_DATA);
|
sync.addSync(data + 2U, DST_BS_DATA);
|
||||||
|
|
||||||
m_blocks--;
|
m_frames--;
|
||||||
|
|
||||||
data[0U] = m_blocks == 0U ? TAG_EOT : TAG_DATA;
|
data[0U] = m_frames == 0U ? TAG_EOT : TAG_DATA;
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
#if defined(DUMP_DMR)
|
#if defined(DUMP_DMR)
|
||||||
|
@ -770,7 +775,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
#endif
|
#endif
|
||||||
writeQueue(data);
|
writeQueue(data);
|
||||||
|
|
||||||
if (m_blocks == 0U) {
|
if (m_frames == 0U) {
|
||||||
LogMessage("DMR Slot %u, ended network data transmission", m_slotNo);
|
LogMessage("DMR Slot %u, ended network data transmission", m_slotNo);
|
||||||
writeEndOfTransmission();
|
writeEndOfTransmission();
|
||||||
}
|
}
|
||||||
|
@ -814,8 +819,8 @@ void CDMRSlot::clock(unsigned int ms)
|
||||||
|
|
||||||
if (frames > m_frames) {
|
if (frames > m_frames) {
|
||||||
unsigned int count = frames - m_frames;
|
unsigned int count = frames - m_frames;
|
||||||
if (count > 2U) {
|
if (count > 3U) {
|
||||||
LogMessage("DMR Slot %u, lost audio for 100ms filling in, %u %u", m_slotNo, frames, m_frames);
|
LogMessage("DMR Slot %u, lost audio for 300ms filling in, %u %u", m_slotNo, frames, m_frames);
|
||||||
insertSilence(count - 1U);
|
insertSilence(count - 1U);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1013,7 +1018,7 @@ void CDMRSlot::closeFile()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CDMRSlot::insertSilence(const unsigned char* data, unsigned char seqNo)
|
void CDMRSlot::insertSilence(const unsigned char* data, unsigned char seqNo)
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != NULL);
|
||||||
|
|
||||||
|
@ -1022,7 +1027,7 @@ bool CDMRSlot::insertSilence(const unsigned char* data, unsigned char seqNo)
|
||||||
if (seq == seqNo) {
|
if (seq == seqNo) {
|
||||||
// Just copy the data, nothing else to do here
|
// Just copy the data, nothing else to do here
|
||||||
::memcpy(m_lastFrame, data, DMR_FRAME_LENGTH_BYTES + 2U);
|
::memcpy(m_lastFrame, data, DMR_FRAME_LENGTH_BYTES + 2U);
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int oldSeqNo = m_seqNo + 1U;
|
unsigned int oldSeqNo = m_seqNo + 1U;
|
||||||
|
@ -1034,16 +1039,10 @@ bool CDMRSlot::insertSilence(const unsigned char* data, unsigned char seqNo)
|
||||||
else
|
else
|
||||||
count = (256U + newSeqNo) - oldSeqNo;
|
count = (256U + newSeqNo) - oldSeqNo;
|
||||||
|
|
||||||
if (count > 127U) {
|
if (count < 10U)
|
||||||
LogMessage("DMR Slot %u, rejecting frame as being too old, %u %u > 127", m_slotNo, newSeqNo, oldSeqNo);
|
insertSilence(count);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
insertSilence(count);
|
|
||||||
|
|
||||||
::memcpy(m_lastFrame, data, DMR_FRAME_LENGTH_BYTES + 2U);
|
::memcpy(m_lastFrame, data, DMR_FRAME_LENGTH_BYTES + 2U);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDMRSlot::insertSilence(unsigned int count)
|
void CDMRSlot::insertSilence(unsigned int count)
|
||||||
|
|
|
@ -61,7 +61,6 @@ private:
|
||||||
CTimer m_packetTimer;
|
CTimer m_packetTimer;
|
||||||
CStopWatch m_elapsed;
|
CStopWatch m_elapsed;
|
||||||
unsigned int m_frames;
|
unsigned int m_frames;
|
||||||
unsigned int m_blocks;
|
|
||||||
unsigned int m_lost;
|
unsigned int m_lost;
|
||||||
CAMBEFEC m_fec;
|
CAMBEFEC m_fec;
|
||||||
unsigned int m_bits;
|
unsigned int m_bits;
|
||||||
|
@ -94,7 +93,7 @@ private:
|
||||||
bool writeFile(const unsigned char* data);
|
bool writeFile(const unsigned char* data);
|
||||||
void closeFile();
|
void closeFile();
|
||||||
|
|
||||||
bool insertSilence(const unsigned char* data, unsigned char seqNo);
|
void insertSilence(const unsigned char* data, unsigned char seqNo);
|
||||||
void insertSilence(unsigned int count);
|
void insertSilence(unsigned int count);
|
||||||
|
|
||||||
static void setShortLC(unsigned int slotNo, unsigned int id, FLCO flco = FLCO_GROUP, bool voice = true);
|
static void setShortLC(unsigned int slotNo, unsigned int id, FLCO flco = FLCO_GROUP, bool voice = true);
|
||||||
|
|
Loading…
Reference in a new issue