diff --git a/p25/Control.cpp b/p25/Control.cpp index 083d483b..cc3fdc38 100644 --- a/p25/Control.cpp +++ b/p25/Control.cpp @@ -136,7 +136,6 @@ Control::Control(bool authoritative, uint32_t nac, uint32_t callHang, uint32_t q m_minRSSI(0U), m_aveRSSI(0U), m_rssiCount(0U), - m_writeImmediate(false), m_verbose(verbose), m_debug(debug) { @@ -801,33 +800,27 @@ void Control::addFrame(const uint8_t* data, uint32_t length, bool net) return; } - if (m_writeImmediate && m_modem->hasP25Space(length) && m_modem->getState() == modem::STATE_P25) { - m_writeImmediate = false; - m_modem->writeP25Data(data, length); - } - else { - uint32_t space = m_queue.freeSpace(); - if (space < (length + 1U)) { - if (!net) { - uint32_t queueLen = m_queue.length(); - m_queue.resize(queueLen + P25_LDU_FRAME_LENGTH_BYTES); - LogError(LOG_P25, "overflow in the P25 queue while writing data; queue free is %u, needed %u; resized was %u is %u", space, length, queueLen, m_queue.length()); - return; - } - else { - LogError(LOG_P25, "overflow in the P25 queue while writing network data; queue free is %u, needed %u", space, length); - return; - } + uint32_t space = m_queue.freeSpace(); + if (space < (length + 1U)) { + if (!net) { + uint32_t queueLen = m_queue.length(); + m_queue.resize(queueLen + P25_LDU_FRAME_LENGTH_BYTES); + LogError(LOG_P25, "overflow in the P25 queue while writing data; queue free is %u, needed %u; resized was %u is %u", space, length, queueLen, m_queue.length()); + return; } - - if (m_debug) { - Utils::symbols("!!! *Tx P25", data + 2U, length - 2U); + else { + LogError(LOG_P25, "overflow in the P25 queue while writing network data; queue free is %u, needed %u", space, length); + return; } + } - uint8_t len = length; - m_queue.addData(&len, 1U); - m_queue.addData(data, len); + if (m_debug) { + Utils::symbols("!!! *Tx P25", data + 2U, length - 2U); } + + uint8_t len = length; + m_queue.addData(&len, 1U); + m_queue.addData(data, len); } #if ENABLE_DFSI_SUPPORT diff --git a/p25/Control.h b/p25/Control.h index 7328c4aa..b19b2da2 100644 --- a/p25/Control.h +++ b/p25/Control.h @@ -207,8 +207,6 @@ namespace p25 uint32_t m_aveRSSI; uint32_t m_rssiCount; - bool m_writeImmediate; // This is essentially a "latch" that will auto-reset after a writeRF_Queue() call. - bool m_verbose; bool m_debug; diff --git a/p25/packet/Data.cpp b/p25/packet/Data.cpp index 9c30b991..65311d84 100644 --- a/p25/packet/Data.cpp +++ b/p25/packet/Data.cpp @@ -283,7 +283,6 @@ bool Data::process(uint8_t* data, uint32_t len) (m_pduUserData[10U] << 8) + m_pduUserData[11U]; if (m_rfDataHeader.getAckNeeded()) { - m_p25->m_writeImmediate = true; writeRF_PDU_Ack_Response(PDU_ACK_CLASS_ACK, PDU_ACK_TYPE_ACK, llId); } @@ -302,7 +301,6 @@ bool Data::process(uint8_t* data, uint32_t len) uint32_t llId = (m_pduUserData[1U] << 16) + (m_pduUserData[2U] << 8) + m_pduUserData[3U]; if (m_rfDataHeader.getAckNeeded()) { - m_p25->m_writeImmediate = true; writeRF_PDU_Ack_Response(PDU_ACK_CLASS_ACK, PDU_ACK_TYPE_ACK, llId); } @@ -573,7 +571,6 @@ void Data::clock(uint32_t ms) uint32_t llId = *it; uint64_t ipAddr = m_connQueueTable[llId]; - m_p25->m_writeImmediate = true; if (!acl::AccessControl::validateSrcId(llId)) { LogWarning(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_RSP_DENY (Registration Response Deny), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str()); writeRF_PDU_Reg_Response(PDU_REG_TYPE_RSP_DENY, llId, ipAddr); diff --git a/p25/packet/Trunk.cpp b/p25/packet/Trunk.cpp index 718984b0..0d4979f1 100644 --- a/p25/packet/Trunk.cpp +++ b/p25/packet/Trunk.cpp @@ -1514,6 +1514,9 @@ void Trunk::writeRF_TDULC_ChanRelease(bool grp, uint32_t srcId, uint32_t dstId) } uint32_t count = m_p25->m_hangCount / 2; + if (m_p25->m_voiceOnControl) { + count = count / 2; + } std::unique_ptr lc = nullptr; if (m_p25->m_control) { @@ -2205,8 +2208,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp } // transmit group grant -// m_p25->m_writeImmediate = true; - writeRF_TSDU_SBF(iosp.get(), false, true, net); + writeRF_TSDU_SBF(iosp.get(), false);//, true, net); } else { if (!net) { @@ -2227,8 +2229,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp } // transmit private grant -// m_p25->m_writeImmediate = true; - writeRF_TSDU_SBF(iosp.get(), false, true, net); + writeRF_TSDU_SBF(iosp.get(), false);//, true, net); } }