add "emergDisabled" flag to p25 protocol stanza to selectively disable emergency support (emergency support is disabled by default);

2.0-maint
Bryan Biedenkapp 3 years ago
parent 5e02cc892f
commit 6834e9f49a

@ -77,6 +77,7 @@ protocols:
sndcpGrant: false
silenceThreshold: 124
disableNetworkHDU: false
emergDisabled: true
queueSize: 12
verbose: true
debug: false

@ -102,6 +102,7 @@ Control::Control(uint32_t nac, uint32_t callHang, uint32_t queueSize, modem::Mod
m_voiceOnControl(false),
m_ackTSBKRequests(true),
m_disableNetworkHDU(false),
m_emergDisabled(true),
m_idenTable(idenTable),
m_ridLookup(ridLookup),
m_tidLookup(tidLookup),
@ -303,6 +304,8 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s
uint32_t ccBcstInterval = p25Protocol["control"]["interval"].as<uint32_t>(300U);
m_trunk->m_adjSiteUpdateInterval += ccBcstInterval;
m_emergDisabled = p25Protocol["emergDisabled"].as<bool>(true);
if (printOptions) {
LogInfo(" Silence Threshold: %u (%.1f%%)", m_voice->m_silenceThreshold, float(m_voice->m_silenceThreshold) / 12.33F);
@ -315,6 +318,7 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s
if (!m_trunk->m_ctrlTSDUMBF) {
LogInfo(" Disable Multi-Block TSDUs: yes");
}
LogInfo(" Emergency Support Disabled: %s", m_emergDisabled ? "yes" : "no");
LogInfo(" Inhibit Illegal: %s", m_inhibitIllegal ? "yes" : "no");
LogInfo(" Legacy Group Grant: %s", m_legacyGroupGrnt ? "yes" : "no");

@ -155,6 +155,7 @@ namespace p25
bool m_voiceOnControl;
bool m_ackTSBKRequests;
bool m_disableNetworkHDU;
bool m_emergDisabled;
::lookups::IdenTableLookup* m_idenTable;
::lookups::RadioIdLookup* m_ridLookup;

@ -425,18 +425,22 @@ bool Trunk::process(uint8_t* data, uint32_t len, bool preDecoded)
writeRF_TSDU_SBF(true);
break;
case TSBK_ISP_EMERG_ALRM_REQ:
if (m_rfTSBK.getEmergency()) {
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request), srcId = %u, dstId = %u",
srcId, dstId);
}
if (!m_p25->m_emergDisabled) {
if (m_rfTSBK.getEmergency()) {
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request), srcId = %u, dstId = %u",
srcId, dstId);
}
::ActivityLog("P25", true, "emergency alarm request request from %u", srcId);
::ActivityLog("P25", true, "emergency alarm request request from %u", srcId);
writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_EMERG_ALRM_REQ, false, true);
if (m_localEmergAlarm) {
writeRF_TSDU_Emerg_Alrm(srcId, dstId);
writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_EMERG_ALRM_REQ, false, true);
if (m_localEmergAlarm) {
writeRF_TSDU_Emerg_Alrm(srcId, dstId);
}
}
} else {
LogWarning(LOG_RF, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request) denial, emergency while emergency disabled, srcId = %u", srcId);
}
break;
case TSBK_IOSP_GRP_AFF:
@ -777,9 +781,14 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
m_netTSBK.getAIV(), m_netTSBK.getResponse(), m_netTSBK.getSrcId(), m_netTSBK.getDstId());
}
} else {
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request), srcId = %u, dstId = %u",
srcId, dstId);
if (!m_p25->m_emergDisabled) {
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request), srcId = %u, dstId = %u",
srcId, dstId);
}
} else {
LogWarning(LOG_NET, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request) denial, emergency while emergency disabled, srcId = %u", srcId);
return true; // don't allow this to write to the air
}
}
break;
@ -1079,6 +1088,10 @@ void Trunk::writeRF_TSDU_U_Reg_Cmd(uint32_t dstId)
/// <param name="dstId"></param>
void Trunk::writeRF_TSDU_Emerg_Alrm(uint32_t srcId, uint32_t dstId)
{
if (m_p25->m_emergDisabled) {
return;
}
uint8_t lco = m_rfTSBK.getLCO();
uint32_t _srcId = m_rfTSBK.getSrcId();

Loading…
Cancel
Save

Powered by TurnKey Linux.