diff --git a/src/host/dmr/packet/ControlSignaling.cpp b/src/host/dmr/packet/ControlSignaling.cpp index d91b5d84..1a3ce697 100644 --- a/src/host/dmr/packet/ControlSignaling.cpp +++ b/src/host/dmr/packet/ControlSignaling.cpp @@ -668,9 +668,8 @@ ControlSignaling::~ControlSignaling() = default; /// Helper to write a CSBK packet. /// /// -/// /// -void ControlSignaling::writeRF_CSBK(lc::CSBK* csbk, bool clearBeforeWrite, bool imm) +void ControlSignaling::writeRF_CSBK(lc::CSBK* csbk, bool imm) { // don't add any frames if the queue is full uint8_t len = DMR_FRAME_LENGTH_BYTES + 2U; @@ -700,14 +699,6 @@ void ControlSignaling::writeRF_CSBK(lc::CSBK* csbk, bool clearBeforeWrite, bool data[0U] = modem::TAG_DATA; data[1U] = 0x00U; - if (clearBeforeWrite) { - if (m_slot->m_slotNo == 1U) - m_slot->m_modem->clearDMRFrame1(); - if (m_slot->m_slotNo == 2U) - m_slot->m_modem->clearDMRFrame2(); - m_slot->m_txQueue.clear(); - } - if (m_slot->m_duplex) m_slot->addFrame(data, false, imm); } @@ -1386,7 +1377,7 @@ void ControlSignaling::writeRF_CSBK_Payload_Activate(uint32_t dstId, uint32_t sr m_slot->setShortLC_Payload(m_slot->m_siteData, 1U); for (uint8_t i = 0; i < 2U; i++) - writeRF_CSBK(csbk.get(), false, imm); + writeRF_CSBK(csbk.get(), imm); } /// @@ -1416,7 +1407,7 @@ void ControlSignaling::writeRF_CSBK_Payload_Clear(uint32_t dstId, uint32_t srcId } for (uint8_t i = 0; i < 2U; i++) - writeRF_CSBK(csbk.get(), false, imm); + writeRF_CSBK(csbk.get(), imm); } /// diff --git a/src/host/dmr/packet/ControlSignaling.h b/src/host/dmr/packet/ControlSignaling.h index 6ee8239c..edd98087 100644 --- a/src/host/dmr/packet/ControlSignaling.h +++ b/src/host/dmr/packet/ControlSignaling.h @@ -74,9 +74,9 @@ namespace dmr */ /// Helper to write a immediate CSBK packet. - void writeRF_CSBK_Imm(lc::CSBK *csbk) { writeRF_CSBK(csbk, false, true); } + void writeRF_CSBK_Imm(lc::CSBK *csbk) { writeRF_CSBK(csbk, true); } /// Helper to write a CSBK packet. - void writeRF_CSBK(lc::CSBK* csbk, bool clearBeforeWrite = false, bool imm = false); + void writeRF_CSBK(lc::CSBK* csbk, bool imm = false); /* ** Control Signalling Logic diff --git a/src/host/nxdn/packet/ControlSignaling.cpp b/src/host/nxdn/packet/ControlSignaling.cpp index e9b996ff..2c2aee81 100644 --- a/src/host/nxdn/packet/ControlSignaling.cpp +++ b/src/host/nxdn/packet/ControlSignaling.cpp @@ -361,9 +361,8 @@ void ControlSignaling::writeNetwork(const uint8_t *data, uint32_t len) /// /// /// -/// /// -void ControlSignaling::writeRF_Message(RCCH* rcch, bool noNetwork, bool clearBeforeWrite, bool imm) +void ControlSignaling::writeRF_Message(RCCH* rcch, bool noNetwork, bool imm) { if (!m_nxdn->m_enableControl) return; @@ -402,11 +401,6 @@ void ControlSignaling::writeRF_Message(RCCH* rcch, bool noNetwork, bool clearBef if (!noNetwork) writeNetwork(data, NXDN_FRAME_LENGTH_BYTES + 2U); - if (clearBeforeWrite) { - m_nxdn->m_modem->clearNXDNFrame(); - m_nxdn->m_txQueue.clear(); - } - if (m_nxdn->m_duplex) { m_nxdn->addFrame(data, NXDN_FRAME_LENGTH_BYTES + 2U, imm); } diff --git a/src/host/nxdn/packet/ControlSignaling.h b/src/host/nxdn/packet/ControlSignaling.h index 323b3f9f..454c81e7 100644 --- a/src/host/nxdn/packet/ControlSignaling.h +++ b/src/host/nxdn/packet/ControlSignaling.h @@ -82,9 +82,9 @@ namespace nxdn */ /// Helper to write a immediate single-block RCCH packet. - void writeRF_Message_Imm(lc::RCCH *rcch, bool noNetwork) { writeRF_Message(rcch, noNetwork, false, true); } + void writeRF_Message_Imm(lc::RCCH *rcch, bool noNetwork) { writeRF_Message(rcch, noNetwork, true); } /// Helper to write a single-block RCCH packet. - void writeRF_Message(lc::RCCH* rcch, bool noNetwork, bool clearBeforeWrite = false, bool imm = false); + void writeRF_Message(lc::RCCH* rcch, bool noNetwork, bool imm = false); /* ** Control Signalling Logic diff --git a/src/host/p25/packet/ControlSignaling.cpp b/src/host/p25/packet/ControlSignaling.cpp index 60c9cedc..a79d5e7f 100644 --- a/src/host/p25/packet/ControlSignaling.cpp +++ b/src/host/p25/packet/ControlSignaling.cpp @@ -1433,10 +1433,9 @@ void ControlSignaling::writeNet_TDULC(lc::TDULC* lc) /// /// /// -/// -/// +/// /// -void ControlSignaling::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool clearBeforeWrite, bool force, bool imm) +void ControlSignaling::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool forceSingle, bool imm) { if (!m_p25->m_enableControl) return; @@ -1473,26 +1472,21 @@ void ControlSignaling::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool cle if (!noNetwork) writeNetworkRF(tsbk, data + 2U, true); - // bryanb: hack-o-ramma, for now -- we will force any immediate TSDUs as single-block + // we always force any immediate TSDUs as single-block if (imm) { - force = true; + forceSingle = true; } - if (!force) { + if (!forceSingle) { if (m_p25->m_dedicatedControl && m_ctrlTSDUMBF) { - writeRF_TSDU_MBF(tsbk, clearBeforeWrite); + writeRF_TSDU_MBF(tsbk); return; } if (m_p25->m_ccRunning && m_ctrlTSDUMBF) { - writeRF_TSDU_MBF(tsbk, clearBeforeWrite); + writeRF_TSDU_MBF(tsbk); return; } - - if (clearBeforeWrite) { - m_p25->m_modem->clearP25Frame(); - m_p25->m_txQueue.clear(); - } } if (m_p25->m_duplex) { @@ -1548,8 +1542,7 @@ void ControlSignaling::writeNet_TSDU(lc::TSBK* tsbk) /// Helper to write a multi-block (3-block) P25 TSDU packet. /// /// -/// -void ControlSignaling::writeRF_TSDU_MBF(lc::TSBK* tsbk, bool clearBeforeWrite) +void ControlSignaling::writeRF_TSDU_MBF(lc::TSBK* tsbk) { if (!m_p25->m_enableControl) { ::memset(m_rfMBF, 0x00U, P25_MAX_PDU_COUNT * P25_LDU_FRAME_LENGTH_BYTES + 2U); @@ -1637,11 +1630,6 @@ void ControlSignaling::writeRF_TSDU_MBF(lc::TSBK* tsbk, bool clearBeforeWrite) data[0U] = modem::TAG_DATA; data[1U] = 0x00U; - if (clearBeforeWrite) { - m_p25->m_modem->clearP25Frame(); - m_p25->m_txQueue.clear(); - } - m_p25->addFrame(data, P25_TSDU_TRIPLE_FRAME_LENGTH_BYTES + 2U); ::memset(m_rfMBF, 0x00U, P25_MAX_PDU_COUNT * P25_LDU_FRAME_LENGTH_BYTES + 2U); @@ -1669,8 +1657,7 @@ void ControlSignaling::writeRF_TSDU_MBF(lc::TSBK* tsbk, bool clearBeforeWrite) /// Helper to write a alternate multi-block trunking PDU packet. /// /// -/// -void ControlSignaling::writeRF_TSDU_AMBT(lc::AMBT* ambt, bool clearBeforeWrite) +void ControlSignaling::writeRF_TSDU_AMBT(lc::AMBT* ambt) { if (!m_p25->m_enableControl) return; @@ -1697,7 +1684,7 @@ void ControlSignaling::writeRF_TSDU_AMBT(lc::AMBT* ambt, bool clearBeforeWrite) Utils::dump(1U, "!!! *PDU (AMBT) TSBK Block Data", pduUserData, P25_PDU_UNCONFIRMED_LENGTH_BYTES * header.getBlocksToFollow()); } - m_p25->m_data->writeRF_PDU_User(header, pduUserData, clearBeforeWrite); + m_p25->m_data->writeRF_PDU_User(header, pduUserData); } /* @@ -2470,7 +2457,7 @@ void ControlSignaling::writeRF_TSDU_Grant_Update() if (noData) { return; // don't create anything } else { - writeRF_TSDU_SBF(osp.get(), true, false, false, true); + writeRF_TSDU_SBF_Imm(osp.get(), true); } } else { @@ -2556,8 +2543,13 @@ bool ControlSignaling::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, osp->toString().c_str(), osp->getDataChnNo(), osp->getSrcId()); } - // transmit SNDCP grant - writeRF_TSDU_SBF(osp.get(), false, true, net); + // transmit group grant + writeRF_TSDU_SBF_Imm(osp.get(), net); + if (m_redundantGrant) { + for (int i = 0; i < 3; i++) + writeRF_TSDU_SBF(osp.get(), net); + } + return true; } diff --git a/src/host/p25/packet/ControlSignaling.h b/src/host/p25/packet/ControlSignaling.h index dccc258a..ac381fb9 100644 --- a/src/host/p25/packet/ControlSignaling.h +++ b/src/host/p25/packet/ControlSignaling.h @@ -165,15 +165,15 @@ namespace p25 void writeNet_TDULC(lc::TDULC* lc); /// Helper to write a immediate single-block P25 TSDU packet. - void writeRF_TSDU_SBF_Imm(lc::TSBK *tsbk, bool noNetwork) { writeRF_TSDU_SBF(tsbk, noNetwork, false, false, true); } + void writeRF_TSDU_SBF_Imm(lc::TSBK *tsbk, bool noNetwork) { writeRF_TSDU_SBF(tsbk, noNetwork, false, true); } /// Helper to write a single-block P25 TSDU packet. - void writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool clearBeforeWrite = false, bool force = false, bool imm = false); + void writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool forceSingle = false, bool imm = false); /// Helper to write a network single-block P25 TSDU packet. void writeNet_TSDU(lc::TSBK* tsbk); /// Helper to write a multi-block (3-block) P25 TSDU packet. - void writeRF_TSDU_MBF(lc::TSBK* tsbk, bool clearBeforeWrite = false); + void writeRF_TSDU_MBF(lc::TSBK* tsbk); /// Helper to write a alternate multi-block PDU packet. - void writeRF_TSDU_AMBT(lc::AMBT* ambt, bool clearBeforeWrite = false); + void writeRF_TSDU_AMBT(lc::AMBT* ambt); /* ** Control Signalling Logic diff --git a/src/host/p25/packet/Data.cpp b/src/host/p25/packet/Data.cpp index 2529c1d8..fb76b35a 100644 --- a/src/host/p25/packet/Data.cpp +++ b/src/host/p25/packet/Data.cpp @@ -691,8 +691,7 @@ bool Data::hasLLIdFNEReg(uint32_t llId) const /// /// /// -/// -void Data::writeRF_PDU_User(data::DataHeader& dataHeader, const uint8_t* pduUserData, bool clearBeforeWrite) +void Data::writeRF_PDU_User(data::DataHeader& dataHeader, const uint8_t* pduUserData) { assert(pduUserData != nullptr); @@ -724,11 +723,6 @@ void Data::writeRF_PDU_User(data::DataHeader& dataHeader, const uint8_t* pduUser dataOffset += P25_PDU_UNCONFIRMED_LENGTH_BYTES; } - if (clearBeforeWrite) { - m_p25->m_modem->clearP25Frame(); - m_p25->m_txQueue.clear(); - } - writeRF_PDU(data, bitLength); } diff --git a/src/host/p25/packet/Data.h b/src/host/p25/packet/Data.h index 0304d6ef..50d2c7fc 100644 --- a/src/host/p25/packet/Data.h +++ b/src/host/p25/packet/Data.h @@ -57,7 +57,7 @@ namespace p25 bool hasLLIdFNEReg(uint32_t llId) const; /// Helper to write user data as a P25 PDU packet. - void writeRF_PDU_User(data::DataHeader& dataHeader, const uint8_t* pduUserData, bool clearBeforeWrite = false); + void writeRF_PDU_User(data::DataHeader& dataHeader, const uint8_t* pduUserData); /// Updates the processor by the passed number of milliseconds. void clock(uint32_t ms); diff --git a/src/host/p25/packet/Voice.cpp b/src/host/p25/packet/Voice.cpp index c3a5679c..f23f943b 100644 --- a/src/host/p25/packet/Voice.cpp +++ b/src/host/p25/packet/Voice.cpp @@ -445,7 +445,7 @@ bool Voice::process(uint8_t* data, uint32_t len) } for (int i = 0; i < 3; i++) - m_p25->m_control->writeRF_TSDU_SBF(osp.get(), true, false, false, false); + m_p25->m_control->writeRF_TSDU_SBF(osp.get(), true); } } @@ -548,7 +548,7 @@ bool Voice::process(uint8_t* data, uint32_t len) } for (int i = 0; i < 3; i++) - m_p25->m_control->writeRF_TSDU_SBF(osp.get(), true, false, false, false); + m_p25->m_control->writeRF_TSDU_SBF(osp.get(), true); } m_rfFrames = 0U; @@ -1537,7 +1537,7 @@ void Voice::writeNet_LDU1() } for (int i = 0; i < 6; i++) - m_p25->m_control->writeRF_TSDU_SBF(osp.get(), true, false, false, true); + m_p25->m_control->writeRF_TSDU_SBF_Imm(osp.get(), true); } }