From bd3a947964f234f2269293b8657ab1e5e04a6920 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 8 Jan 2024 10:25:14 -0500 Subject: [PATCH] enhancement for better dealing with voice in unsupported modes; --- src/host/p25/packet/Voice.cpp | 69 ++++++++--------------------------- 1 file changed, 16 insertions(+), 53 deletions(-) diff --git a/src/host/p25/packet/Voice.cpp b/src/host/p25/packet/Voice.cpp index 729f800e..a8aeafe1 100644 --- a/src/host/p25/packet/Voice.cpp +++ b/src/host/p25/packet/Voice.cpp @@ -120,11 +120,6 @@ bool Voice::process(uint8_t* data, uint32_t len) uint8_t duid = m_p25->m_nid.getDUID(); - // are we interrupting a running CC? - if (m_p25->m_ccRunning) { - m_p25->m_ccHalted = true; - } - if (m_p25->m_rfState != RS_RF_LISTENING) { m_p25->m_rfTGHang.start(); } @@ -465,11 +460,13 @@ bool Voice::process(uint8_t* data, uint32_t len) osp->setGrpVchNo(chNo); } + if (!m_p25->m_ccHalted) { + m_p25->m_txQueue.clear(); + m_p25->m_ccHalted = true; + } + for (int i = 0; i < 3; i++) m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, false); - - m_p25->m_txQueue.clear(); - m_p25->m_ccHalted = true; } } @@ -566,6 +563,11 @@ bool Voice::process(uint8_t* data, uint32_t len) osp->setGrpVchNo(chNo); } + if (!m_p25->m_ccHalted) { + m_p25->m_txQueue.clear(); + m_p25->m_ccHalted = true; + } + for (int i = 0; i < 3; i++) m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, false); } @@ -1051,13 +1053,6 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L return true; } - if (m_p25->m_netState == RS_NET_IDLE) { - // are we interrupting a running CC? - if (m_p25->m_ccRunning) { - m_p25->m_ccHalted = true; - } - } - checkNet_LDU2(); if (m_p25->m_netState != RS_NET_IDLE) { m_p25->m_netTGHang.start(); @@ -1550,7 +1545,12 @@ void Voice::writeNet_LDU1() osp->setGrpVchNo(chNo); } - for (int i = 0; i < 3; i++) + if (!m_p25->m_ccHalted) { + m_p25->m_txQueue.clear(); + m_p25->m_ccHalted = true; + } + + for (int i = 0; i < 6; i++) m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, true); } } @@ -1616,43 +1616,6 @@ void Voice::writeNet_LDU1() } } - // if voice on control; insert group voice channel updates directly after HDU but before LDUs - if (m_p25->m_voiceOnControl) { - uint32_t chNo = m_p25->m_affiliations.getGrantedCh(dstId); - ::lookups::VoiceChData voiceChData = m_p25->m_affiliations.getRFChData(chNo); - bool grp = m_p25->m_affiliations.isGroup(dstId); - - std::unique_ptr osp; - - if (grp) { - osp = new_unique(lc::tsbk::OSP_GRP_VCH_GRANT_UPD); - - // transmit group voice grant update - osp->setLCO(TSBK_OSP_GRP_VCH_GRANT_UPD); - osp->setDstId(dstId); - osp->setGrpVchId(voiceChData.chId()); - osp->setGrpVchNo(chNo); - } - else { - uint32_t srcId = m_p25->m_affiliations.getGrantedSrcId(dstId); - - osp = new_unique(lc::tsbk::OSP_UU_VCH_GRANT_UPD); - - // transmit group voice grant update - osp->setLCO(TSBK_OSP_UU_VCH_GRANT_UPD); - osp->setSrcId(srcId); - osp->setDstId(dstId); - osp->setGrpVchId(voiceChData.chId()); - osp->setGrpVchNo(chNo); - } - - for (int i = 0; i < 3; i++) - m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, false); - - m_p25->m_txQueue.clear(); - m_p25->m_ccHalted = true; - } - uint32_t netId = control.getNetId(); uint32_t sysId = control.getSysId();