From 2a53923c9a78f35f49b0c25a41d6fcbcc2c3ff4f Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 15 Jul 2016 06:32:56 +0100 Subject: [PATCH] Revert packet timer changes. --- DMRSlot.cpp | 26 +++++++++++++++++++------- DMRSlot.h | 1 + DStarControl.cpp | 24 +++++++++++++++++------- DStarControl.h | 1 + YSFControl.cpp | 24 +++++++++++++++++------- YSFControl.h | 1 + 6 files changed, 56 insertions(+), 21 deletions(-) diff --git a/DMRSlot.cpp b/DMRSlot.cpp index eadfce1..b4fa86a 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -70,6 +70,7 @@ m_netN(0U), m_networkWatchdog(1000U, 0U, 1500U), m_rfTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout), +m_packetTimer(1000U, 0U, 300U), m_interval(), m_elapsed(), m_rfFrames(0U), @@ -678,6 +679,7 @@ void CDMRSlot::writeEndNet(bool writeEnd) m_networkWatchdog.stop(); m_netTimeoutTimer.stop(); + m_packetTimer.stop(); m_netFrames = 0U; m_netLost = 0U; @@ -1029,6 +1031,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) writeQueueNet(data); + m_packetTimer.start(); + m_netFrames++; // Save details in case we need to infill data @@ -1080,6 +1084,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) writeQueueNet(data); + m_packetTimer.start(); + m_netFrames++; // Save details in case we need to infill data @@ -1230,15 +1236,21 @@ void CDMRSlot::clock() } if (m_netState == RS_NET_AUDIO) { - unsigned int elapsed = m_elapsed.elapsed(); - unsigned int frames = elapsed / DMR_SLOT_TIME; + m_packetTimer.clock(ms); - if (frames > m_netFrames) { - unsigned int count = frames - m_netFrames; - if (count > (300U / 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 (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) { + unsigned int elapsed = m_elapsed.elapsed(); + unsigned int frames = elapsed / DMR_SLOT_TIME; + + 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(); } } } diff --git a/DMRSlot.h b/DMRSlot.h index 7136900..c011c98 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -70,6 +70,7 @@ private: CTimer m_networkWatchdog; CTimer m_rfTimeoutTimer; CTimer m_netTimeoutTimer; + CTimer m_packetTimer; CStopWatch m_interval; CStopWatch m_elapsed; unsigned int m_rfFrames; diff --git a/DStarControl.cpp b/DStarControl.cpp index af050df..bdfe2b2 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -56,6 +56,7 @@ m_netN(0U), m_networkWatchdog(1000U, 0U, 1500U), m_rfTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout), +m_packetTimer(1000U, 0U, 200U), m_ackTimer(1000U, 0U, 750U), m_interval(), m_elapsed(), @@ -423,6 +424,7 @@ void CDStarControl::writeEndNet() m_netTimeoutTimer.stop(); m_networkWatchdog.stop(); + m_packetTimer.stop(); if (m_network != NULL) m_network->reset(); @@ -466,6 +468,7 @@ void CDStarControl::writeNetwork() m_netHeader = header; m_netTimeoutTimer.start(); + m_packetTimer.start(); m_elapsed.start(); m_ackTimer.stop(); @@ -541,6 +544,7 @@ void CDStarControl::writeNetwork() if (n == 0U) CSync::addDStarSync(data + 2U); + m_packetTimer.start(); m_netFrames++; #if defined(DUMP_DSTAR) @@ -585,15 +589,21 @@ void CDStarControl::clock() } if (m_netState == RS_NET_AUDIO) { - unsigned int elapsed = m_elapsed.elapsed(); - unsigned int frames = elapsed / DSTAR_FRAME_TIME; + m_packetTimer.clock(ms); - if (frames > m_netFrames) { - unsigned int count = frames - m_netFrames; - if (count > (300U / 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 (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) { + unsigned int elapsed = m_elapsed.elapsed(); + unsigned int frames = elapsed / DSTAR_FRAME_TIME; + + 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(); } } } diff --git a/DStarControl.h b/DStarControl.h index 5b0457d..18e5e1a 100644 --- a/DStarControl.h +++ b/DStarControl.h @@ -65,6 +65,7 @@ private: CTimer m_networkWatchdog; CTimer m_rfTimeoutTimer; CTimer m_netTimeoutTimer; + CTimer m_packetTimer; CTimer m_ackTimer; CStopWatch m_interval; CStopWatch m_elapsed; diff --git a/YSFControl.cpp b/YSFControl.cpp index 2821053..dfb8f7f 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -33,6 +33,7 @@ m_rfState(RS_RF_LISTENING), m_netState(RS_NET_IDLE), m_rfTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout), +m_packetTimer(1000U, 0U, 200U), m_networkWatchdog(1000U, 0U, 1500U), m_elapsed(), m_rfFrames(0U), @@ -352,6 +353,7 @@ void CYSFControl::writeEndNet() m_netTimeoutTimer.stop(); m_networkWatchdog.stop(); + m_packetTimer.stop(); m_netPayload.reset(); @@ -397,6 +399,7 @@ void CYSFControl::writeNetwork() m_netTimeoutTimer.start(); m_netPayload.reset(); + m_packetTimer.start(); m_elapsed.start(); m_netState = RS_NET_AUDIO; m_netFrames = 0U; @@ -513,6 +516,7 @@ void CYSFControl::writeNetwork() if (send) { writeQueueNet(data + 33U); + m_packetTimer.start(); m_netFrames++; m_netN = n; } @@ -541,15 +545,21 @@ void CYSFControl::clock(unsigned int ms) } if (m_netState == RS_NET_AUDIO) { - unsigned int elapsed = m_elapsed.elapsed(); - unsigned int frames = elapsed / YSF_FRAME_TIME; + m_packetTimer.clock(ms); - if (frames > m_netFrames) { - unsigned int count = frames - m_netFrames; - if (count > (300U / 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 (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) { + unsigned int elapsed = m_elapsed.elapsed(); + unsigned int frames = elapsed / YSF_FRAME_TIME; + + 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(); } } } diff --git a/YSFControl.h b/YSFControl.h index 95845bc..caf3e69 100644 --- a/YSFControl.h +++ b/YSFControl.h @@ -51,6 +51,7 @@ private: RPT_NET_STATE m_netState; CTimer m_rfTimeoutTimer; CTimer m_netTimeoutTimer; + CTimer m_packetTimer; CTimer m_networkWatchdog; CStopWatch m_elapsed; unsigned int m_rfFrames;