From 8faa764cb418197583e0aa210fc72fc76bd23727 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 27 Mar 2023 10:43:14 -0400 Subject: [PATCH] refactor how grant calls are made for DMR, P25 and NXDN (this may break somethings!); --- src/dmr/packet/ControlSignaling.cpp | 17 +++++----- src/dmr/packet/ControlSignaling.h | 4 +-- src/nxdn/packet/Trunk.cpp | 27 ++++++++------- src/nxdn/packet/Trunk.h | 2 +- src/p25/packet/Trunk.cpp | 51 ++++++++++++++--------------- src/p25/packet/Trunk.h | 2 +- 6 files changed, 50 insertions(+), 53 deletions(-) diff --git a/src/dmr/packet/ControlSignaling.cpp b/src/dmr/packet/ControlSignaling.cpp index c01bc1cd..e3b70606 100644 --- a/src/dmr/packet/ControlSignaling.cpp +++ b/src/dmr/packet/ControlSignaling.cpp @@ -450,7 +450,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData) if (m_slot->m_authoritative) { if (!m_slot->m_affiliations->isGranted(dstId)) { - writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), false); + writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), false, true); } } break; @@ -459,7 +459,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData) if (m_slot->m_authoritative) { if (!m_slot->m_affiliations->isGranted(dstId)) { - writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), true); + writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), true, true); } } break; @@ -468,7 +468,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData) writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U); if (!m_slot->m_affiliations->isGranted(dstId)) { - writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), false); + writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), false, true); } break; case SVC_KIND_GRP_DATA_CALL: @@ -476,7 +476,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData) writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U); if (!m_slot->m_affiliations->isGranted(dstId)) { - writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), true); + writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), true, true); } break; case SVC_KIND_REG_SVC: @@ -776,12 +776,11 @@ void ControlSignaling::writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uin /// /// /// +/// /// /// -/// -/// /// -bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net, bool skipNetCheck) +bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo) { Slot *m_tscc = m_slot->m_dmr->getTSCCSlot(); @@ -1018,11 +1017,11 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_ /// /// /// +/// /// /// -/// /// -bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net) +bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo) { Slot *m_tscc = m_slot->m_dmr->getTSCCSlot(); diff --git a/src/dmr/packet/ControlSignaling.h b/src/dmr/packet/ControlSignaling.h index c702f162..b4aec562 100644 --- a/src/dmr/packet/ControlSignaling.h +++ b/src/dmr/packet/ControlSignaling.h @@ -95,9 +95,9 @@ namespace dmr /// Helper to write a NACK RSP packet. void writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uint8_t service); /// Helper to write a grant packet. - bool writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false, bool skipNetCheck = false); + bool writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U); /// Helper to write a data grant packet. - bool writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false); + bool writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U); /// Helper to write a unit registration response packet. void writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOptions); diff --git a/src/nxdn/packet/Trunk.cpp b/src/nxdn/packet/Trunk.cpp index ede142e5..47a16eae 100644 --- a/src/nxdn/packet/Trunk.cpp +++ b/src/nxdn/packet/Trunk.cpp @@ -258,18 +258,18 @@ bool Trunk::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t switch (rcch->getMessageType()) { case RTCH_MESSAGE_TYPE_VCALL: { - if (m_verbose) { - LogMessage(LOG_NET, NXDN_RCCH_MSG_TYPE_VCALL_CONN_REQ ", emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u", - rcch->getEmergency(), rcch->getEncrypted(), rcch->getPriority(), rcch->getGrpVchNo(), srcId, dstId); - } - - uint8_t serviceOptions = (rcch->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag - (rcch->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag - (rcch->getPriority() & 0x07U); // Priority - if (m_nxdn->m_dedicatedControl && !m_nxdn->m_voiceOnControl) { if (!m_nxdn->m_affiliations.isGranted(dstId)) { - writeRF_Message_Grant(srcId, dstId, serviceOptions, true); + if (m_verbose) { + LogMessage(LOG_NET, NXDN_RCCH_MSG_TYPE_VCALL_CONN_REQ ", emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u", + rcch->getEmergency(), rcch->getEncrypted(), rcch->getPriority(), rcch->getGrpVchNo(), srcId, dstId); + } + + uint8_t serviceOptions = (rcch->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag + (rcch->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag + (rcch->getPriority() & 0x07U); // Priority + + writeRF_Message_Grant(srcId, dstId, serviceOptions, true, true); } } } @@ -456,12 +456,11 @@ void Trunk::writeRF_Message(RCCH* rcch, bool noNetwork, bool clearBeforeWrite) /// /// /// +/// /// /// -/// -/// /// -bool Trunk::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net, bool skipNetCheck) +bool Trunk::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo) { bool emergency = ((serviceOptions & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag @@ -587,7 +586,7 @@ bool Trunk::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t servic } // transmit group grant - writeRF_Message(rcch.get(), false, true); + writeRF_Message(rcch.get(), net, true); return true; } diff --git a/src/nxdn/packet/Trunk.h b/src/nxdn/packet/Trunk.h index e4d9d182..89d5f789 100644 --- a/src/nxdn/packet/Trunk.h +++ b/src/nxdn/packet/Trunk.h @@ -102,7 +102,7 @@ namespace nxdn void writeRF_Message(lc::RCCH* rcch, bool noNetwork, bool clearBeforeWrite = false); /// Helper to write a grant packet. - bool writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false, bool skipNetCheck = false); + bool writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U); /// Helper to write a deny packet. void writeRF_Message_Deny(uint32_t srcId, uint32_t dstId, uint8_t reason, uint8_t service); /// Helper to write a group registration response packet. diff --git a/src/p25/packet/Trunk.cpp b/src/p25/packet/Trunk.cpp index 52b1d08f..f92a5f6c 100644 --- a/src/p25/packet/Trunk.cpp +++ b/src/p25/packet/Trunk.cpp @@ -701,36 +701,36 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L switch (tsbk->getLCO()) { case TSBK_IOSP_GRP_VCH: { - if (m_verbose) { - LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u", - tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, dstId); - } - - uint8_t serviceOptions = (tsbk->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag - (tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag - (tsbk->getPriority() & 0x07U); // Priority - if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) { if (!m_p25->m_affiliations.isGranted(dstId)) { - writeRF_TSDU_Grant(srcId, dstId, serviceOptions, true); + if (m_verbose) { + LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u", + tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, dstId); + } + + uint8_t serviceOptions = (tsbk->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag + (tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag + (tsbk->getPriority() & 0x07U); // Priority + + writeRF_TSDU_Grant(srcId, dstId, serviceOptions, true, true); } } } return true; // don't allow this to write to the air case TSBK_IOSP_UU_VCH: { - if (m_verbose) { - LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Grant), emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u", - tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, dstId); - } - - uint8_t serviceOptions = (tsbk->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag - (tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag - (tsbk->getPriority() & 0x07U); // Priority - if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) { if (!m_p25->m_affiliations.isGranted(dstId)) { - writeRF_TSDU_Grant(srcId, dstId, serviceOptions, false); + if (m_verbose) { + LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Grant), emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u", + tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, dstId); + } + + uint8_t serviceOptions = (tsbk->getEmergency() ? 0x80U : 0x00U) + // Emergency Flag + (tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag + (tsbk->getPriority() & 0x07U); // Priority + + writeRF_TSDU_Grant(srcId, dstId, serviceOptions, false, true); } } } @@ -2138,13 +2138,12 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) /// /// /// -/// /// -/// /// -/// +/// +/// /// -bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net, bool skipNetCheck) +bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo) { bool emergency = ((serviceOptions & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag @@ -2269,7 +2268,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp } // transmit group grant - writeRF_TSDU_SBF(iosp.get(), false);//, true, net); + writeRF_TSDU_SBF(iosp.get(), net); } else { if (!net) { @@ -2309,7 +2308,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp } // transmit private grant - writeRF_TSDU_SBF(iosp.get(), false);//, true, net); + writeRF_TSDU_SBF(iosp.get(), net); } } diff --git a/src/p25/packet/Trunk.h b/src/p25/packet/Trunk.h index 70860ad5..d0f55d6c 100644 --- a/src/p25/packet/Trunk.h +++ b/src/p25/packet/Trunk.h @@ -189,7 +189,7 @@ namespace p25 void queueRF_TSBK_Ctrl(uint8_t lco); /// Helper to write a grant packet. - bool writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false, bool skipNetCheck = false); + bool writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U); /// Helper to write a SNDCP grant packet. bool writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip = false, bool net = false); /// Helper to write a unit to unit answer request packet.