diff --git a/src/bridge/HostBridge.P25.cpp b/src/bridge/HostBridge.P25.cpp index 121aeda6..1f21e952 100644 --- a/src/bridge/HostBridge.P25.cpp +++ b/src/bridge/HostBridge.P25.cpp @@ -125,12 +125,12 @@ void HostBridge::processP25Network(uint8_t* buffer, uint32_t length) lsd.setLSD2(lsd2); if (control.getLCO() == LCO::GROUP) { - if (srcId == 0) { - m_network->resetP25(); - return; - } - if ((duid == DUID::TDU) || (duid == DUID::TDULC)) { + // ignore TDU/TDULC entirely when local audio detect or + // traffic from UDP is running + if (m_audioDetect || m_trafficFromUDP) + return; + // ignore TDU's that are grant demands if (grantDemand) { m_network->resetP25(); @@ -138,6 +138,11 @@ void HostBridge::processP25Network(uint8_t* buffer, uint32_t length) } } + if (srcId == 0) { + m_network->resetP25(); + return; + } + // ensure destination ID matches if (dstId != m_dstId) { m_network->resetP25(); diff --git a/src/bridge/HostBridge.cpp b/src/bridge/HostBridge.cpp index b969a529..9cc253fc 100644 --- a/src/bridge/HostBridge.cpp +++ b/src/bridge/HostBridge.cpp @@ -652,12 +652,34 @@ int HostBridge::run() m_rxStartTime = 0U; m_rxStreamId = 0U; + m_srcIdOverride = 0; + m_txStreamId = 0; + + m_udpSrcId = 0; + m_udpDstId = 0; + m_trafficFromUDP = false; + m_udpFrameCnt = 0U; + + // ensure PTT is dropped at call end + if (m_rtsPttEnable) { + deassertRtsPtt(); + } + + m_dmrSeqNo = 0U; + m_dmrN = 0U; + m_p25SeqNo = 0U; + m_p25N = 0U; + m_analogN = 0U; + if (!m_udpRTPContinuousSeq) { m_rtpInitialFrame = false; m_rtpSeqNo = 0U; } m_rtpTimestamp = INVALID_TS; + m_p25Crypto->clearMI(); + m_p25Crypto->resetKeystream(); + m_network->resetDMR(1U); m_network->resetDMR(2U);