diff --git a/configs/config.example.yml b/configs/config.example.yml index 2a0f6111..5b75c75d 100644 --- a/configs/config.example.yml +++ b/configs/config.example.yml @@ -173,6 +173,8 @@ protocols: enableTimeDateAnn: false # Flag indicating whether or not the source ID validation before granting disabled. disableGrantSourceIdCheck: false + # Flag indicating immediate TSDUs will be sent twice. + redundantImmediate: true # Flag indicating whether redundant grant responses should be transmitted. # (This is useful for single-channel VOC (voice on control) configurations.) redundantGrantTransmit: false diff --git a/src/p25/Control.cpp b/src/p25/Control.cpp index a4b8ebee..b0250d13 100644 --- a/src/p25/Control.cpp +++ b/src/p25/Control.cpp @@ -272,6 +272,7 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw m_ackTSBKRequests = control["ackRequests"].as(true); m_control->m_ctrlTSDUMBF = !control["disableTSDUMBF"].as(false); m_control->m_ctrlTimeDateAnn = control["enableTimeDateAnn"].as(false); + m_control->m_redundantImmediate = control["redundantImmediate"].as(true); m_control->m_redundantGrant = control["redundantGrantTransmit"].as(false); m_allowExplicitSourceId = p25Protocol["allowExplicitSourceId"].as(true); @@ -445,6 +446,7 @@ void Control::setOptions(yaml::Node& conf, bool supervisor, const std::string cw LogInfo(" Unit-to-Unit Availability Check: %s", m_control->m_unitToUnitAvailCheck ? "yes" : "no"); LogInfo(" Explicit Source ID Support: %s", m_allowExplicitSourceId ? "yes" : "no"); + LogInfo(" Redundant Immediate: %s", m_control->m_redundantImmediate ? "yes" : "no"); if (m_control->m_redundantGrant) { LogInfo(" Redundant Grant Transmit: yes"); } diff --git a/src/p25/packet/ControlSignaling.cpp b/src/p25/packet/ControlSignaling.cpp index a0d19dc3..a5247e74 100644 --- a/src/p25/packet/ControlSignaling.cpp +++ b/src/p25/packet/ControlSignaling.cpp @@ -1216,6 +1216,7 @@ ControlSignaling::ControlSignaling(Control* p25, bool dumpTSBKData, bool debug, m_ctrlTSDUMBF(true), m_sndcpChGrant(false), m_disableGrantSrcIdCheck(false), + m_redundantImmediate(true), m_redundantGrant(false), m_dumpTSBK(dumpTSBKData), m_verbose(verbose), @@ -1463,7 +1464,8 @@ void ControlSignaling::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool cle data[1U] = 0x00U; m_p25->addFrame(data, P25_TSDU_FRAME_LENGTH_BYTES + 2U, false, imm); - if (imm) { + + if (imm && m_redundantImmediate) { // queue an immediate frame at least twice m_p25->addFrame(data, P25_TSDU_FRAME_LENGTH_BYTES + 2U, false, imm); } diff --git a/src/p25/packet/ControlSignaling.h b/src/p25/packet/ControlSignaling.h index 4ea30c86..e6b48406 100644 --- a/src/p25/packet/ControlSignaling.h +++ b/src/p25/packet/ControlSignaling.h @@ -147,6 +147,7 @@ namespace p25 bool m_sndcpChGrant; bool m_disableGrantSrcIdCheck; + bool m_redundantImmediate; bool m_redundantGrant; bool m_dumpTSBK;