remove clearBeforeWrite function argument for a lot of control singalling (and some data) cases, this was an old method of clearing the Tx packet queue before creating a frame to ensure it went out really fast, but shouldn't be done anymore, so I'm removing this so no one gets any bright ideas;

pull/51/head
Bryan Biedenkapp 2 years ago
parent b19c1d5f6a
commit 690bac453d

@ -668,9 +668,8 @@ ControlSignaling::~ControlSignaling() = default;
/// Helper to write a CSBK packet.
/// </summary>
/// <param name="csbk"></param>
/// <param name="clearBeforeWrite"></param>
/// <param name="imm"></param>
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);
}
/// <summary>
@ -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);
}
/// <summary>

@ -74,9 +74,9 @@ namespace dmr
*/
/// <summary>Helper to write a immediate CSBK packet.</summary>
void writeRF_CSBK_Imm(lc::CSBK *csbk) { writeRF_CSBK(csbk, false, true); }
void writeRF_CSBK_Imm(lc::CSBK *csbk) { writeRF_CSBK(csbk, true); }
/// <summary>Helper to write a CSBK packet.</summary>
void writeRF_CSBK(lc::CSBK* csbk, bool clearBeforeWrite = false, bool imm = false);
void writeRF_CSBK(lc::CSBK* csbk, bool imm = false);
/*
** Control Signalling Logic

@ -361,9 +361,8 @@ void ControlSignaling::writeNetwork(const uint8_t *data, uint32_t len)
/// </summary>
/// <param name="rcch"></param>
/// <param name="noNetwork"></param>
/// <param name="clearBeforeWrite"></param>
/// <param name="imm"></param>
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);
}

@ -82,9 +82,9 @@ namespace nxdn
*/
/// <summary>Helper to write a immediate single-block RCCH packet.</summary>
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); }
/// <summary>Helper to write a single-block RCCH packet.</summary>
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

@ -1433,10 +1433,9 @@ void ControlSignaling::writeNet_TDULC(lc::TDULC* lc)
/// </summary>
/// <param name="tsbk"></param>
/// <param name="noNetwork"></param>
/// <param name="clearBeforeWrite"></param>
/// <param name="force"></param>
/// <param name="forceSingle"></param>
/// <param name="imm"></param>
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.
/// </summary>
/// <param name="tsbk"></param>
/// <param name="clearBeforeWrite"></param>
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.
/// </summary>
/// <param name="ambt"></param>
/// <param name="clearBeforeWrite"></param>
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;
}

@ -165,15 +165,15 @@ namespace p25
void writeNet_TDULC(lc::TDULC* lc);
/// <summary>Helper to write a immediate single-block P25 TSDU packet.</summary>
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); }
/// <summary>Helper to write a single-block P25 TSDU packet.</summary>
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);
/// <summary>Helper to write a network single-block P25 TSDU packet.</summary>
void writeNet_TSDU(lc::TSBK* tsbk);
/// <summary>Helper to write a multi-block (3-block) P25 TSDU packet.</summary>
void writeRF_TSDU_MBF(lc::TSBK* tsbk, bool clearBeforeWrite = false);
void writeRF_TSDU_MBF(lc::TSBK* tsbk);
/// <summary>Helper to write a alternate multi-block PDU packet.</summary>
void writeRF_TSDU_AMBT(lc::AMBT* ambt, bool clearBeforeWrite = false);
void writeRF_TSDU_AMBT(lc::AMBT* ambt);
/*
** Control Signalling Logic

@ -691,8 +691,7 @@ bool Data::hasLLIdFNEReg(uint32_t llId) const
/// </summary>
/// <param name="dataHeader"></param>
/// <param name="pduUserData"></param>
/// <param name="clearBeforeWrite"></param>
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);
}

@ -57,7 +57,7 @@ namespace p25
bool hasLLIdFNEReg(uint32_t llId) const;
/// <summary>Helper to write user data as a P25 PDU packet.</summary>
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);
/// <summary>Updates the processor by the passed number of milliseconds.</summary>
void clock(uint32_t ms);

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

Loading…
Cancel
Save

Powered by TurnKey Linux.