From 7faa2743e86c615d790dd665a83802edf091a0cf Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Thu, 7 Nov 2024 15:07:11 -0500 Subject: [PATCH] handle grant release and end of call TDU for P25; --- src/host/dmr/Slot.cpp | 6 ++++++ src/host/nxdn/Control.cpp | 6 ++++++ src/host/p25/Control.cpp | 12 ++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/host/dmr/Slot.cpp b/src/host/dmr/Slot.cpp index 1f9ccbb0..46fb8c9f 100644 --- a/src/host/dmr/Slot.cpp +++ b/src/host/dmr/Slot.cpp @@ -462,6 +462,12 @@ void Slot::processInCallCtrl(network::NET_ICC::ENUM command, uint32_t dstId) { if (m_rfState == RS_RF_AUDIO && m_rfLC->getDstId() == dstId) { LogWarning(LOG_DMR, "Slot %u, network requested in-call traffic reject, dstId = %u", m_slotNo, dstId); + if (m_affiliations->isGranted(dstId)) { + m_affiliations->releaseGrant(dstId, false); + if (!m_enableTSCC) { + notifyCC_ReleaseGrant(dstId); + } + } processFrameLoss(); diff --git a/src/host/nxdn/Control.cpp b/src/host/nxdn/Control.cpp index e8d4c09f..d6bdd555 100644 --- a/src/host/nxdn/Control.cpp +++ b/src/host/nxdn/Control.cpp @@ -1059,6 +1059,12 @@ void Control::processInCallCtrl(network::NET_ICC::ENUM command, uint32_t dstId) { if (m_rfState == RS_RF_AUDIO && m_rfLC.getDstId() == dstId) { LogWarning(LOG_P25, "network requested in-call traffic reject, dstId = %u", dstId); + if (m_affiliations.isGranted(dstId)) { + m_affiliations.releaseGrant(dstId, false); + if (!m_enableControl) { + notifyCC_ReleaseGrant(dstId); + } + } processFrameLoss(); diff --git a/src/host/p25/Control.cpp b/src/host/p25/Control.cpp index abed572d..154d1ef5 100644 --- a/src/host/p25/Control.cpp +++ b/src/host/p25/Control.cpp @@ -1561,6 +1561,18 @@ void Control::processInCallCtrl(network::NET_ICC::ENUM command, uint32_t dstId) { if (m_rfState == RS_RF_AUDIO && m_voice->m_rfLC.getDstId() == dstId) { LogWarning(LOG_P25, "network requested in-call traffic reject, dstId = %u", dstId); + if (m_affiliations.isGranted(dstId)) { + uint32_t srcId = m_affiliations.getGrantedSrcId(dstId); + + m_affiliations.releaseGrant(dstId, false); + if (!m_enableControl) { + notifyCC_ReleaseGrant(dstId); + } + m_control->writeNet_TSDU_Call_Term(srcId, dstId); + + m_voice->m_rfLC.setSrcId(srcId); + m_voice->m_rfLC.setDstId(dstId); + } processFrameLoss();