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);
}
}