From af56a3562b48430b9aaa6cd5da5f73827d56a272 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Sat, 12 Feb 2022 22:44:44 -0500 Subject: [PATCH] remove P25_WUID_SYS (16777213) and replace with P25_WUID_FNE (16777212); partially fix the U2U issue; --- lookups/RadioIdLookup.cpp | 4 +-- network/RemoteControl.cpp | 16 ++++++------ p25/P25Defines.h | 1 - p25/TrunkPacket.cpp | 52 +++++++++++++++++++++++++-------------- p25/lc/TDULC.cpp | 2 +- 5 files changed, 44 insertions(+), 31 deletions(-) diff --git a/lookups/RadioIdLookup.cpp b/lookups/RadioIdLookup.cpp index 9656f0d1..fea2e2bd 100644 --- a/lookups/RadioIdLookup.cpp +++ b/lookups/RadioIdLookup.cpp @@ -100,7 +100,7 @@ void RadioIdLookup::toggleEntry(uint32_t id, bool enabled) /// Flag indicating if radio ID is enabled or not. void RadioIdLookup::addEntry(uint32_t id, bool enabled) { - if ((id == p25::P25_WUID_ALL) || (id == p25::P25_WUID_SYS) || (id == p25::P25_WUID_FNE)) { + if ((id == p25::P25_WUID_ALL) || (id == p25::P25_WUID_FNE)) { return; } @@ -132,7 +132,7 @@ RadioId RadioIdLookup::find(uint32_t id) { RadioId entry; - if (id == p25::P25_WUID_ALL || id == p25::P25_WUID_SYS || id == p25::P25_WUID_FNE) { + if ((id == p25::P25_WUID_ALL) || (id == p25::P25_WUID_FNE)) { return RadioId(true, false); } diff --git a/network/RemoteControl.cpp b/network/RemoteControl.cpp index 6dfb9033..324a974d 100644 --- a/network/RemoteControl.cpp +++ b/network/RemoteControl.cpp @@ -443,7 +443,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 1U); if (slotNo > 0U && slotNo < 3U) { if (dstId != 0U) { - dmr->writeRF_Call_Alrt(slotNo, p25::P25_WUID_SYS, dstId); + dmr->writeRF_Call_Alrt(slotNo, p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to DMR call alert RID 0!"); @@ -464,7 +464,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 1U); if (slotNo > 0U && slotNo < 3U) { if (dstId != 0U) { - dmr->writeRF_Ext_Func(slotNo, dmr::DMR_EXT_FNCT_CHECK, p25::P25_WUID_SYS, dstId); + dmr->writeRF_Ext_Func(slotNo, dmr::DMR_EXT_FNCT_CHECK, p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to DMR radio check RID 0!"); @@ -485,7 +485,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 1U); if (slotNo > 0U && slotNo < 3U) { if (dstId != 0U) { - dmr->writeRF_Ext_Func(slotNo, dmr::DMR_EXT_FNCT_INHIBIT, p25::P25_WUID_SYS, dstId); + dmr->writeRF_Ext_Func(slotNo, dmr::DMR_EXT_FNCT_INHIBIT, p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to DMR radio inhibit RID 0!"); @@ -506,7 +506,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 1U); if (slotNo > 0U && slotNo < 3U) { if (dstId != 0U) { - dmr->writeRF_Ext_Func(slotNo, dmr::DMR_EXT_FNCT_UNINHIBIT, p25::P25_WUID_SYS, dstId); + dmr->writeRF_Ext_Func(slotNo, dmr::DMR_EXT_FNCT_UNINHIBIT, p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to DMR radio uninhibit RID 0!"); @@ -543,7 +543,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 0U); if (dstId != 0U) { p25->trunk()->setMFId(m_p25MFId); - p25->trunk()->writeRF_TSDU_Call_Alrt(p25::P25_WUID_SYS, dstId); + p25->trunk()->writeRF_TSDU_Call_Alrt(p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to P25 call alert RID 0!"); @@ -559,7 +559,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 0U); if (dstId != 0U) { p25->trunk()->setMFId(m_p25MFId); - p25->trunk()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_CHECK, p25::P25_WUID_SYS, dstId); + p25->trunk()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_CHECK, p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to P25 radio check RID 0!"); @@ -575,7 +575,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 0U); if (dstId != 0U) { p25->trunk()->setMFId(m_p25MFId); - p25->trunk()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_INHIBIT, p25::P25_WUID_SYS, dstId); + p25->trunk()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_INHIBIT, p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to P25 inhibit RID 0!"); @@ -591,7 +591,7 @@ void RemoteControl::process(Host* host, dmr::Control* dmr, p25::Control* p25) uint32_t dstId = getArgUInt32(args, 0U); if (dstId != 0U) { p25->trunk()->setMFId(m_p25MFId); - p25->trunk()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_UNINHIBIT, p25::P25_WUID_SYS, dstId); + p25->trunk()->writeRF_TSDU_Ext_Func(p25::P25_EXT_FNCT_UNINHIBIT, p25::P25_WUID_FNE, dstId); } else { LogError(LOG_RCON, INVALID_OPT_STR "tried to P25 uninhibit RID 0!"); diff --git a/p25/P25Defines.h b/p25/P25Defines.h index 09503f02..766353ce 100644 --- a/p25/P25Defines.h +++ b/p25/P25Defines.h @@ -198,7 +198,6 @@ namespace p25 const uint32_t P25_SID_STD_DEFAULT = 0x001U; const uint32_t P25_WUID_FNE = 0xFFFFFCU; - const uint32_t P25_WUID_SYS = 0xFFFFFDU; const uint32_t P25_WUID_REG = 0xFFFFFEU; const uint32_t P25_WUID_ALL = 0xFFFFFFU; diff --git a/p25/TrunkPacket.cpp b/p25/TrunkPacket.cpp index e10d8710..1c08113e 100644 --- a/p25/TrunkPacket.cpp +++ b/p25/TrunkPacket.cpp @@ -259,6 +259,10 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len) } if (m_rfTSBK.getResponse() == P25_ANS_RSP_PROCEED) { + if (m_p25->m_ackTSBKRequests) { + writeRF_TSDU_ACK_FNE(dstId, TSBK_IOSP_UU_ANS, false, true); + } + writeRF_TSDU_Grant(false, false, false); } else if (m_rfTSBK.getResponse() == P25_ANS_RSP_DENY) { @@ -280,10 +284,6 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len) m_rfTSBK.getResponse(), srcId); } - if (m_p25->m_ackTSBKRequests) { - writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_TELE_INT_ANS, false, true); - } - writeRF_TSDU_Deny(P25_DENY_RSN_SYS_UNSUPPORTED_SVC, TSBK_IOSP_TELE_INT_ANS); break; case TSBK_ISP_SNDCP_CH_REQ: @@ -426,6 +426,7 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len) if (m_p25->m_ackTSBKRequests) { writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_GRP_AFF, true, true); } + writeRF_TSDU_Grp_Aff_Rsp(srcId, dstId); break; case TSBK_ISP_GRP_AFF_Q_RSP: @@ -448,12 +449,13 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len) // HACK: ensure the DEREG_REQ transmits something ... if (dstId == 0U) { - dstId = P25_WUID_SYS; + dstId = P25_WUID_FNE; } if (m_p25->m_ackTSBKRequests) { writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_U_DEREG_REQ, true, true); } + writeRF_TSDU_U_Dereg_Ack(srcId); break; case TSBK_IOSP_U_REG: @@ -467,6 +469,7 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len) if (m_p25->m_ackTSBKRequests) { writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_U_REG, true, true); } + writeRF_TSDU_U_Reg_Rsp(srcId); break; case TSBK_ISP_LOC_REG_REQ: @@ -1106,10 +1109,10 @@ void TrunkPacket::writeRF_TSDU_Grp_Aff_Q(uint32_t dstId) LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_GRP_AFF_Q (Group Affiliation Query), dstId = %u", dstId); } - ::ActivityLog("P25", true, "group affiliation query command from %u to %u", P25_WUID_SYS, dstId); + ::ActivityLog("P25", true, "group affiliation query command from %u to %u", P25_WUID_FNE, dstId); m_rfTSBK.setLCO(TSBK_OSP_GRP_AFF_Q); - m_rfTSBK.setSrcId(P25_WUID_SYS); + m_rfTSBK.setSrcId(P25_WUID_FNE); m_rfTSBK.setDstId(dstId); writeRF_TSDU_SBF(true); } @@ -1124,10 +1127,10 @@ void TrunkPacket::writeRF_TSDU_U_Reg_Cmd(uint32_t dstId) LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_U_REG_CMD (Unit Registration Command), dstId = %u", dstId); } - ::ActivityLog("P25", true, "unit registration command from %u to %u", P25_WUID_SYS, dstId); + ::ActivityLog("P25", true, "unit registration command from %u to %u", P25_WUID_FNE, dstId); m_rfTSBK.setLCO(TSBK_OSP_U_REG_CMD); - m_rfTSBK.setSrcId(P25_WUID_SYS); + m_rfTSBK.setSrcId(P25_WUID_FNE); m_rfTSBK.setDstId(dstId); writeRF_TSDU_SBF(true); } @@ -2040,9 +2043,11 @@ void TrunkPacket::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool ex { uint8_t lco = m_rfTSBK.getLCO(); uint8_t mfId = m_rfTSBK.getMFId(); + uint32_t _srcId = m_rfTSBK.getSrcId(); m_rfTSBK.setLCO(TSBK_IOSP_ACK_RSP); m_rfTSBK.setMFId(P25_MFG_STANDARD); + m_rfTSBK.setSrcId(srcId); m_rfTSBK.setService(service); if (extended) { @@ -2059,6 +2064,7 @@ void TrunkPacket::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool ex m_rfTSBK.setLCO(lco); m_rfTSBK.setMFId(mfId); + m_rfTSBK.setSrcId(_srcId); } /// @@ -2069,18 +2075,22 @@ void TrunkPacket::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool ex void TrunkPacket::writeRF_TSDU_Deny(uint8_t reason, uint8_t service) { uint8_t lco = m_rfTSBK.getLCO(); - - if (m_verbose) { - LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_DENY_RSP (Deny Response), AIV = %u, reason = $%02X, srcId = %u, dstId = %u", - m_rfTSBK.getAIV(), reason, m_rfTSBK.getSrcId(), m_rfTSBK.getDstId()); - } + uint32_t srcId = m_rfTSBK.getSrcId(); m_rfTSBK.setLCO(TSBK_OSP_DENY_RSP); + m_rfTSBK.setSrcId(P25_WUID_FNE); m_rfTSBK.setService(service); m_rfTSBK.setResponse(reason); + + if (m_verbose) { + LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_DENY_RSP (Deny Response), AIV = %u, reason = $%02X, service = $%02X, srcId = %u, dstId = %u", + m_rfTSBK.getAIV(), reason, service, m_rfTSBK.getSrcId(), m_rfTSBK.getDstId()); + } + writeRF_TSDU_SBF(false); m_rfTSBK.setLCO(lco); + m_rfTSBK.setSrcId(srcId); } /// @@ -2224,7 +2234,7 @@ void TrunkPacket::writeRF_TSDU_U_Dereg_Ack(uint32_t srcId) if (dereged) { ::ActivityLog("P25", true, "unit deregistration request from %u", srcId); - m_rfTSBK.setSrcId(P25_WUID_SYS); + m_rfTSBK.setSrcId(P25_WUID_FNE); m_rfTSBK.setDstId(srcId); writeRF_TSDU_SBF(false); @@ -2242,18 +2252,22 @@ void TrunkPacket::writeRF_TSDU_U_Dereg_Ack(uint32_t srcId) void TrunkPacket::writeRF_TSDU_Queue(uint8_t reason, uint8_t service) { uint8_t lco = m_rfTSBK.getLCO(); + uint32_t srcId = m_rfTSBK.getSrcId(); + + m_rfTSBK.setLCO(TSBK_OSP_QUE_RSP); + m_rfTSBK.setSrcId(P25_WUID_FNE); + m_rfTSBK.setService(service); + m_rfTSBK.setResponse(reason); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_QUE_RSP (Queue Response), AIV = %u, reason = $%02X, srcId = %u, dstId = %u", m_rfTSBK.getAIV(), reason, m_rfTSBK.getSrcId(), m_rfTSBK.getDstId()); } - m_rfTSBK.setLCO(TSBK_OSP_QUE_RSP); - m_rfTSBK.setService(service); - m_rfTSBK.setResponse(reason); writeRF_TSDU_SBF(false); m_rfTSBK.setLCO(lco); + m_rfTSBK.setSrcId(srcId); } /// @@ -2451,7 +2465,7 @@ void TrunkPacket::denialInhibit(uint32_t srcId) // this check should have already been done -- but do it again anyway if (!acl::AccessControl::validateSrcId(srcId)) { LogWarning(LOG_P25, P25_TSDU_STR ", denial, system auto-inhibit RID, srcId = %u", srcId); - writeRF_TSDU_Ext_Func(P25_EXT_FNCT_INHIBIT, P25_WUID_SYS, srcId); + writeRF_TSDU_Ext_Func(P25_EXT_FNCT_INHIBIT, P25_WUID_FNE, srcId); } } diff --git a/p25/lc/TDULC.cpp b/p25/lc/TDULC.cpp index 358b52ab..d4007bda 100644 --- a/p25/lc/TDULC.cpp +++ b/p25/lc/TDULC.cpp @@ -365,7 +365,7 @@ void TDULC::encodeLC(uint8_t* rs) case LC_CALL_TERM: rs[0U] |= 0x40U; // Implicit Operation rsValue = 0U; - rsValue = (rsValue << 24) + P25_WUID_SYS; // System Radio Address + rsValue = (rsValue << 24) + P25_WUID_FNE; // System Radio Address break; case LC_IDEN_UP: rs[0U] |= 0x40U; // Implicit Operation