diff --git a/src/host/dmr/Slot.cpp b/src/host/dmr/Slot.cpp index 724b6fb0..af460581 100644 --- a/src/host/dmr/Slot.cpp +++ b/src/host/dmr/Slot.cpp @@ -230,7 +230,9 @@ bool Slot::processFrame(uint8_t *data, uint32_t len) } if (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA) { - if (m_rfLossWatchdog.isRunning()) { + // if RF TG hang is disabled, keep the loss watchdog alive from inbound + // RF frames so abrupt stream loss can still recover state. + if (m_rfTGHang.getTimeout() == 0U || m_rfLossWatchdog.isRunning()) { m_rfLossWatchdog.start(); } } diff --git a/src/host/nxdn/Control.cpp b/src/host/nxdn/Control.cpp index c1c341b1..384c2eb4 100644 --- a/src/host/nxdn/Control.cpp +++ b/src/host/nxdn/Control.cpp @@ -403,7 +403,9 @@ bool Control::processFrame(uint8_t* data, uint32_t len) } if (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA) { - if (m_rfLossWatchdog.isRunning()) { + // if RF TG hang is disabled, keep the loss watchdog alive from inbound + // RF frames so abrupt stream loss can still recover state. + if (m_rfTGHang.getTimeout() == 0U || m_rfLossWatchdog.isRunning()) { m_rfLossWatchdog.start(); } }