refactor how grant calls are made for DMR, P25 and NXDN (this may break somethings!);

pull/25/head
Bryan Biedenkapp 3 years ago
parent f9afd01277
commit 8faa764cb4

@ -450,7 +450,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
if (m_slot->m_authoritative) { if (m_slot->m_authoritative) {
if (!m_slot->m_affiliations->isGranted(dstId)) { 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; break;
@ -459,7 +459,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
if (m_slot->m_authoritative) { if (m_slot->m_authoritative) {
if (!m_slot->m_affiliations->isGranted(dstId)) { 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; break;
@ -468,7 +468,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U); writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
if (!m_slot->m_affiliations->isGranted(dstId)) { 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; break;
case SVC_KIND_GRP_DATA_CALL: 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); writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
if (!m_slot->m_affiliations->isGranted(dstId)) { 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; break;
case SVC_KIND_REG_SVC: case SVC_KIND_REG_SVC:
@ -776,12 +776,11 @@ void ControlSignaling::writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uin
/// <param name="dstId"></param> /// <param name="dstId"></param>
/// <param name="serviceOptions"></param> /// <param name="serviceOptions"></param>
/// <param name="grp"></param> /// <param name="grp"></param>
/// <param name="net"></param>
/// <param name="skip"></param> /// <param name="skip"></param>
/// <param name="chNo"></param> /// <param name="chNo"></param>
/// <param name="net"></param>
/// <param name="skipNetCheck"></param>
/// <returns></returns> /// <returns></returns>
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(); Slot *m_tscc = m_slot->m_dmr->getTSCCSlot();
@ -1018,11 +1017,11 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
/// <param name="dstId"></param> /// <param name="dstId"></param>
/// <param name="serviceOptions"></param> /// <param name="serviceOptions"></param>
/// <param name="grp"></param> /// <param name="grp"></param>
/// <param name="net"></param>
/// <param name="skip"></param> /// <param name="skip"></param>
/// <param name="chNo"></param> /// <param name="chNo"></param>
/// <param name="net"></param>
/// <returns></returns> /// <returns></returns>
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(); Slot *m_tscc = m_slot->m_dmr->getTSCCSlot();

@ -95,9 +95,9 @@ namespace dmr
/// <summary>Helper to write a NACK RSP packet.</summary> /// <summary>Helper to write a NACK RSP packet.</summary>
void writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uint8_t service); void writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uint8_t service);
/// <summary>Helper to write a grant packet.</summary> /// <summary>Helper to write a grant packet.</summary>
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);
/// <summary>Helper to write a data grant packet.</summary> /// <summary>Helper to write a data grant packet.</summary>
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);
/// <summary>Helper to write a unit registration response packet.</summary> /// <summary>Helper to write a unit registration response packet.</summary>
void writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOptions); void writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOptions);

@ -258,18 +258,18 @@ bool Trunk::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
switch (rcch->getMessageType()) { switch (rcch->getMessageType()) {
case RTCH_MESSAGE_TYPE_VCALL: 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_dedicatedControl && !m_nxdn->m_voiceOnControl) {
if (!m_nxdn->m_affiliations.isGranted(dstId)) { 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)
/// <param name="dstId"></param> /// <param name="dstId"></param>
/// <param name="serviceOptions"></param> /// <param name="serviceOptions"></param>
/// <param name="grp"></param> /// <param name="grp"></param>
/// <param name="net"></param>
/// <param name="skip"></param> /// <param name="skip"></param>
/// <param name="chNo"></param> /// <param name="chNo"></param>
/// <param name="net"></param>
/// <param name="skipNetCheck"></param>
/// <returns></returns> /// <returns></returns>
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 emergency = ((serviceOptions & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag
bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption 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 // transmit group grant
writeRF_Message(rcch.get(), false, true); writeRF_Message(rcch.get(), net, true);
return true; return true;
} }

@ -102,7 +102,7 @@ namespace nxdn
void writeRF_Message(lc::RCCH* rcch, bool noNetwork, bool clearBeforeWrite = false); void writeRF_Message(lc::RCCH* rcch, bool noNetwork, bool clearBeforeWrite = false);
/// <summary>Helper to write a grant packet.</summary> /// <summary>Helper to write a grant packet.</summary>
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);
/// <summary>Helper to write a deny packet.</summary> /// <summary>Helper to write a deny packet.</summary>
void writeRF_Message_Deny(uint32_t srcId, uint32_t dstId, uint8_t reason, uint8_t service); void writeRF_Message_Deny(uint32_t srcId, uint32_t dstId, uint8_t reason, uint8_t service);
/// <summary>Helper to write a group registration response packet.</summary> /// <summary>Helper to write a group registration response packet.</summary>

@ -701,36 +701,36 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
switch (tsbk->getLCO()) { switch (tsbk->getLCO()) {
case TSBK_IOSP_GRP_VCH: 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_dedicatedControl && !m_p25->m_voiceOnControl) {
if (!m_p25->m_affiliations.isGranted(dstId)) { 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 return true; // don't allow this to write to the air
case TSBK_IOSP_UU_VCH: 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_dedicatedControl && !m_p25->m_voiceOnControl) {
if (!m_p25->m_affiliations.isGranted(dstId)) { 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)
/// </summary> /// </summary>
/// <param name="srcId"></param> /// <param name="srcId"></param>
/// <param name="dstId"></param> /// <param name="dstId"></param>
/// <param name="chNo"></param>
/// <param name="grp"></param> /// <param name="grp"></param>
/// <param name="skip"></param>
/// <param name="net"></param> /// <param name="net"></param>
/// <param name="skipNetCheck"></param> /// <param name="skip"></param>
/// <param name="chNo"></param>
/// <returns></returns> /// <returns></returns>
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 emergency = ((serviceOptions & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag
bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption 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 // transmit group grant
writeRF_TSDU_SBF(iosp.get(), false);//, true, net); writeRF_TSDU_SBF(iosp.get(), net);
} }
else { else {
if (!net) { if (!net) {
@ -2309,7 +2308,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
} }
// transmit private grant // transmit private grant
writeRF_TSDU_SBF(iosp.get(), false);//, true, net); writeRF_TSDU_SBF(iosp.get(), net);
} }
} }

@ -189,7 +189,7 @@ namespace p25
void queueRF_TSBK_Ctrl(uint8_t lco); void queueRF_TSBK_Ctrl(uint8_t lco);
/// <summary>Helper to write a grant packet.</summary> /// <summary>Helper to write a grant packet.</summary>
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);
/// <summary>Helper to write a SNDCP grant packet.</summary> /// <summary>Helper to write a SNDCP grant packet.</summary>
bool writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip = false, bool net = false); bool writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip = false, bool net = false);
/// <summary>Helper to write a unit to unit answer request packet.</summary> /// <summary>Helper to write a unit to unit answer request packet.</summary>

Loading…
Cancel
Save

Powered by TurnKey Linux.