Revert packet timer changes.

This commit is contained in:
Jonathan Naylor 2016-07-15 06:32:56 +01:00
parent f18c505852
commit 2a53923c9a
6 changed files with 56 additions and 21 deletions

View file

@ -70,6 +70,7 @@ m_netN(0U),
m_networkWatchdog(1000U, 0U, 1500U), m_networkWatchdog(1000U, 0U, 1500U),
m_rfTimeoutTimer(1000U, timeout), m_rfTimeoutTimer(1000U, timeout),
m_netTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout),
m_packetTimer(1000U, 0U, 300U),
m_interval(), m_interval(),
m_elapsed(), m_elapsed(),
m_rfFrames(0U), m_rfFrames(0U),
@ -678,6 +679,7 @@ void CDMRSlot::writeEndNet(bool writeEnd)
m_networkWatchdog.stop(); m_networkWatchdog.stop();
m_netTimeoutTimer.stop(); m_netTimeoutTimer.stop();
m_packetTimer.stop();
m_netFrames = 0U; m_netFrames = 0U;
m_netLost = 0U; m_netLost = 0U;
@ -1029,6 +1031,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
writeQueueNet(data); writeQueueNet(data);
m_packetTimer.start();
m_netFrames++; m_netFrames++;
// Save details in case we need to infill data // Save details in case we need to infill data
@ -1080,6 +1084,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
writeQueueNet(data); writeQueueNet(data);
m_packetTimer.start();
m_netFrames++; m_netFrames++;
// Save details in case we need to infill data // Save details in case we need to infill data
@ -1230,15 +1236,21 @@ void CDMRSlot::clock()
} }
if (m_netState == RS_NET_AUDIO) { if (m_netState == RS_NET_AUDIO) {
unsigned int elapsed = m_elapsed.elapsed(); m_packetTimer.clock(ms);
unsigned int frames = elapsed / DMR_SLOT_TIME;
if (frames > m_netFrames) { if (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) {
unsigned int count = frames - m_netFrames; unsigned int elapsed = m_elapsed.elapsed();
if (count > (300U / DMR_SLOT_TIME)) { unsigned int frames = elapsed / DMR_SLOT_TIME;
LogMessage("DMR Slot %u, lost audio for over 300ms filling in, elapsed: %ums, expected: %u, received: %u", m_slotNo, elapsed, frames, m_netFrames);
insertSilence(count - 1U); if (frames > m_netFrames) {
unsigned int count = frames - m_netFrames;
if (count > 3U) {
LogDebug("DMR Slot %u, lost audio for 300ms filling in, elapsed: %ums, expected: %u, received: %u", m_slotNo, elapsed, frames, m_netFrames);
insertSilence(count - 1U);
}
} }
m_packetTimer.start();
} }
} }
} }

View file

@ -70,6 +70,7 @@ private:
CTimer m_networkWatchdog; CTimer m_networkWatchdog;
CTimer m_rfTimeoutTimer; CTimer m_rfTimeoutTimer;
CTimer m_netTimeoutTimer; CTimer m_netTimeoutTimer;
CTimer m_packetTimer;
CStopWatch m_interval; CStopWatch m_interval;
CStopWatch m_elapsed; CStopWatch m_elapsed;
unsigned int m_rfFrames; unsigned int m_rfFrames;

View file

@ -56,6 +56,7 @@ m_netN(0U),
m_networkWatchdog(1000U, 0U, 1500U), m_networkWatchdog(1000U, 0U, 1500U),
m_rfTimeoutTimer(1000U, timeout), m_rfTimeoutTimer(1000U, timeout),
m_netTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout),
m_packetTimer(1000U, 0U, 200U),
m_ackTimer(1000U, 0U, 750U), m_ackTimer(1000U, 0U, 750U),
m_interval(), m_interval(),
m_elapsed(), m_elapsed(),
@ -423,6 +424,7 @@ void CDStarControl::writeEndNet()
m_netTimeoutTimer.stop(); m_netTimeoutTimer.stop();
m_networkWatchdog.stop(); m_networkWatchdog.stop();
m_packetTimer.stop();
if (m_network != NULL) if (m_network != NULL)
m_network->reset(); m_network->reset();
@ -466,6 +468,7 @@ void CDStarControl::writeNetwork()
m_netHeader = header; m_netHeader = header;
m_netTimeoutTimer.start(); m_netTimeoutTimer.start();
m_packetTimer.start();
m_elapsed.start(); m_elapsed.start();
m_ackTimer.stop(); m_ackTimer.stop();
@ -541,6 +544,7 @@ void CDStarControl::writeNetwork()
if (n == 0U) if (n == 0U)
CSync::addDStarSync(data + 2U); CSync::addDStarSync(data + 2U);
m_packetTimer.start();
m_netFrames++; m_netFrames++;
#if defined(DUMP_DSTAR) #if defined(DUMP_DSTAR)
@ -585,15 +589,21 @@ void CDStarControl::clock()
} }
if (m_netState == RS_NET_AUDIO) { if (m_netState == RS_NET_AUDIO) {
unsigned int elapsed = m_elapsed.elapsed(); m_packetTimer.clock(ms);
unsigned int frames = elapsed / DSTAR_FRAME_TIME;
if (frames > m_netFrames) { if (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) {
unsigned int count = frames - m_netFrames; unsigned int elapsed = m_elapsed.elapsed();
if (count > (300U / DSTAR_FRAME_TIME)) { unsigned int frames = elapsed / DSTAR_FRAME_TIME;
LogMessage("D-Star, lost audio for over 300ms filling in, elapsed: %ums, expected: %u, received: %u", elapsed, frames, m_netFrames);
insertSilence(count - 2U); if (frames > m_netFrames) {
unsigned int count = frames - m_netFrames;
if (count > 5U) {
LogDebug("D-Star, lost audio for 200ms filling in, elapsed: %ums, expected: %u, received: %u", elapsed, frames, m_netFrames);
insertSilence(count - 2U);
}
} }
m_packetTimer.start();
} }
} }
} }

View file

@ -65,6 +65,7 @@ private:
CTimer m_networkWatchdog; CTimer m_networkWatchdog;
CTimer m_rfTimeoutTimer; CTimer m_rfTimeoutTimer;
CTimer m_netTimeoutTimer; CTimer m_netTimeoutTimer;
CTimer m_packetTimer;
CTimer m_ackTimer; CTimer m_ackTimer;
CStopWatch m_interval; CStopWatch m_interval;
CStopWatch m_elapsed; CStopWatch m_elapsed;

View file

@ -33,6 +33,7 @@ m_rfState(RS_RF_LISTENING),
m_netState(RS_NET_IDLE), m_netState(RS_NET_IDLE),
m_rfTimeoutTimer(1000U, timeout), m_rfTimeoutTimer(1000U, timeout),
m_netTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout),
m_packetTimer(1000U, 0U, 200U),
m_networkWatchdog(1000U, 0U, 1500U), m_networkWatchdog(1000U, 0U, 1500U),
m_elapsed(), m_elapsed(),
m_rfFrames(0U), m_rfFrames(0U),
@ -352,6 +353,7 @@ void CYSFControl::writeEndNet()
m_netTimeoutTimer.stop(); m_netTimeoutTimer.stop();
m_networkWatchdog.stop(); m_networkWatchdog.stop();
m_packetTimer.stop();
m_netPayload.reset(); m_netPayload.reset();
@ -397,6 +399,7 @@ void CYSFControl::writeNetwork()
m_netTimeoutTimer.start(); m_netTimeoutTimer.start();
m_netPayload.reset(); m_netPayload.reset();
m_packetTimer.start();
m_elapsed.start(); m_elapsed.start();
m_netState = RS_NET_AUDIO; m_netState = RS_NET_AUDIO;
m_netFrames = 0U; m_netFrames = 0U;
@ -513,6 +516,7 @@ void CYSFControl::writeNetwork()
if (send) { if (send) {
writeQueueNet(data + 33U); writeQueueNet(data + 33U);
m_packetTimer.start();
m_netFrames++; m_netFrames++;
m_netN = n; m_netN = n;
} }
@ -541,15 +545,21 @@ void CYSFControl::clock(unsigned int ms)
} }
if (m_netState == RS_NET_AUDIO) { if (m_netState == RS_NET_AUDIO) {
unsigned int elapsed = m_elapsed.elapsed(); m_packetTimer.clock(ms);
unsigned int frames = elapsed / YSF_FRAME_TIME;
if (frames > m_netFrames) { if (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) {
unsigned int count = frames - m_netFrames; unsigned int elapsed = m_elapsed.elapsed();
if (count > (300U / YSF_FRAME_TIME)) { unsigned int frames = elapsed / YSF_FRAME_TIME;
LogMessage("YSF, lost audio for over 300ms filling in, elapsed: %ums, expected: %u, received: %u", elapsed, frames, m_netFrames);
insertSilence(count - 1U); if (frames > m_netFrames) {
unsigned int count = frames - m_netFrames;
if (count > 2U) {
LogDebug("YSF, lost audio for 200ms filling in, elapsed: %ums, expected: %u, received: %u", elapsed, frames, m_netFrames);
insertSilence(count - 1U);
}
} }
m_packetTimer.start();
} }
} }
} }

View file

@ -51,6 +51,7 @@ private:
RPT_NET_STATE m_netState; RPT_NET_STATE m_netState;
CTimer m_rfTimeoutTimer; CTimer m_rfTimeoutTimer;
CTimer m_netTimeoutTimer; CTimer m_netTimeoutTimer;
CTimer m_packetTimer;
CTimer m_networkWatchdog; CTimer m_networkWatchdog;
CStopWatch m_elapsed; CStopWatch m_elapsed;
unsigned int m_rfFrames; unsigned int m_rfFrames;