diff --git a/src/host/p25/Control.cpp b/src/host/p25/Control.cpp index 182020c7..c6226cea 100644 --- a/src/host/p25/Control.cpp +++ b/src/host/p25/Control.cpp @@ -999,17 +999,18 @@ void Control::clock() } } - if (m_netState != RS_NET_IDLE) { - if (m_network != nullptr) - m_network->resetP25(); - - m_voice->resetNet(); - m_data->resetReceivedBlocks(); - m_netState = RS_NET_IDLE; - m_tailOnIdle = true; - m_netTimeoutTimer.stop(); - m_netTimeout = false; - } + if (m_network != nullptr) + m_network->resetP25(); + + m_netState = RS_NET_IDLE; + m_tailOnIdle = true; + + m_voice->resetNet(); + m_data->resetReceivedBlocks(); + + m_netTimeoutTimer.stop(); + m_netTimeout = false; + m_networkWatchdog.stop(); m_netLastDstId = 0U; m_netLastSrcId = 0U; @@ -1044,11 +1045,14 @@ void Control::clock() if (m_networkWatchdog.hasExpired() && !(m_netState == RS_NET_IDLE && m_rfState != RS_RF_LISTENING)) { if (m_netState == RS_NET_AUDIO) { if (m_voice->m_netFrames > 0.0F) { + ::LogWarning(LOG_NET, "network watchdog has expired, %.1f seconds, %u%% packet loss", + float(m_voice->m_netFrames) / 50.0F, (m_voice->m_netLost * 100U) / m_voice->m_netFrames); ::ActivityLog("P25", false, "network watchdog has expired, %.1f seconds, %u%% packet loss", float(m_voice->m_netFrames) / 50.0F, (m_voice->m_netLost * 100U) / m_voice->m_netFrames); } } else { + ::LogWarning(LOG_NET, "network watchdog has expired"); ::ActivityLog("P25", false, "network watchdog has expired"); } diff --git a/src/host/p25/packet/ControlSignaling.cpp b/src/host/p25/packet/ControlSignaling.cpp index d1987ae7..4c7b810e 100644 --- a/src/host/p25/packet/ControlSignaling.cpp +++ b/src/host/p25/packet/ControlSignaling.cpp @@ -735,6 +735,8 @@ bool ControlSignaling::processNetwork(uint8_t* data, uint32_t len, lc::LC& contr switch (duid) { case DUID::TSDU: if (m_p25->m_netState == RS_NET_IDLE) { + m_p25->m_networkWatchdog.stop(); + std::unique_ptr tsbk = TSBKFactory::createTSBK(data); if (tsbk == nullptr) { return false;