experimental support to repeat a TSBK_ISP_EMERG_ALRM_REQ locally;

pull/12/head
Bryan Biedenkapp 4 years ago
parent 956e9e829b
commit c7f1d20c3d

@ -70,6 +70,7 @@ protocols:
noStatusAck: false noStatusAck: false
noMessageAck: true noMessageAck: true
unitToUnitAvailCheck: true unitToUnitAvailCheck: true
localEmergAlarm: false
sndcpGrant: false sndcpGrant: false
silenceThreshold: 124 silenceThreshold: 124
disableNetworkHDU: false disableNetworkHDU: false

@ -236,6 +236,7 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s
m_trunk->m_noMessageAck = p25Protocol["noMessageAck"].as<bool>(true); m_trunk->m_noMessageAck = p25Protocol["noMessageAck"].as<bool>(true);
m_trunk->m_unitToUnitAvailCheck = p25Protocol["unitToUnitAvailCheck"].as<bool>(true); m_trunk->m_unitToUnitAvailCheck = p25Protocol["unitToUnitAvailCheck"].as<bool>(true);
m_trunk->m_localEmergAlarm = p25Protocol["localEmergAlarm"].as<bool>(false);
m_trunk->m_sndcpChGrant = p25Protocol["sndcpGrant"].as<bool>(false); m_trunk->m_sndcpChGrant = p25Protocol["sndcpGrant"].as<bool>(false);
yaml::Node control = p25Protocol["control"]; yaml::Node control = p25Protocol["control"];

@ -692,7 +692,7 @@ void TSBK::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address
tsbkValue = (tsbkValue << 32) + 0; tsbkValue = (tsbkValue << 32) + 0;
break; break;
case TSBK_OSP_DENY_RSP: case TSBK_OSP_DENY_RSP: // TSBK_ISP_EMERG_ALRM_REQ
case TSBK_OSP_QUE_RSP: case TSBK_OSP_QUE_RSP:
{ {
if (m_response == 0U) { if (m_response == 0U) {

@ -430,6 +430,9 @@ bool Trunk::process(uint8_t* data, uint32_t len, bool preDecoded)
::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); writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_EMERG_ALRM_REQ, false, true);
if (m_localEmergAlarm) {
writeRF_TSDU_Emerg_Alrm(srcId, dstId);
}
} }
break; break;
case TSBK_IOSP_GRP_AFF: case TSBK_IOSP_GRP_AFF:
@ -1231,6 +1234,35 @@ void Trunk::writeRF_TSDU_U_Reg_Cmd(uint32_t dstId)
writeRF_TSDU_SBF(true); writeRF_TSDU_SBF(true);
} }
/// <summary>
/// Helper to write a emergency alarm packet.
/// </summary>
/// <param name="srcId"></param>
/// <param name="dstId"></param>
void Trunk::writeRF_TSDU_Emerg_Alrm(uint32_t srcId, uint32_t dstId)
{
uint8_t lco = m_rfTSBK.getLCO();
uint32_t _srcId = m_rfTSBK.getSrcId();
m_rfTSBK.setLCO(TSBK_ISP_EMERG_ALRM_REQ);
m_rfTSBK.setSrcId(P25_WUID_FNE);
m_rfTSBK.setService(0U);
m_rfTSBK.setResponse(0U);
m_rfTSBK.setSrcId(srcId);
m_rfTSBK.setDstId(dstId);
if (m_verbose) {
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request), srcId = %u, dstId = %u",
srcId, dstId);
}
writeRF_TSDU_SBF(true);
m_rfTSBK.setLCO(lco);
m_rfTSBK.setSrcId(_srcId);
}
/// <summary> /// <summary>
/// Helper to write a Motorola patch packet. /// Helper to write a Motorola patch packet.
/// </summary> /// </summary>
@ -1335,6 +1367,7 @@ Trunk::Trunk(Control* p25, network::BaseNetwork* network, bool dumpTSBKData, boo
m_adjSiteUpdateTimer(1000U), m_adjSiteUpdateTimer(1000U),
m_adjSiteUpdateInterval(ADJ_SITE_TIMER_TIMEOUT), m_adjSiteUpdateInterval(ADJ_SITE_TIMER_TIMEOUT),
m_ctrlTSDUMBF(true), m_ctrlTSDUMBF(true),
m_localEmergAlarm(false),
m_sndcpChGrant(false), m_sndcpChGrant(false),
m_dumpTSBK(dumpTSBKData), m_dumpTSBK(dumpTSBKData),
m_verbose(verbose), m_verbose(verbose),

@ -106,6 +106,8 @@ namespace p25
void writeRF_TSDU_Grp_Aff_Q(uint32_t dstId); void writeRF_TSDU_Grp_Aff_Q(uint32_t dstId);
/// <summary>Helper to write a unit registration command packet.</summary> /// <summary>Helper to write a unit registration command packet.</summary>
void writeRF_TSDU_U_Reg_Cmd(uint32_t dstId); void writeRF_TSDU_U_Reg_Cmd(uint32_t dstId);
/// <summary>Helper to write a emergency alarm packet.</summary>
void writeRF_TSDU_Emerg_Alrm(uint32_t srcId, uint32_t dstId);
/// <summary>Helper to write a Motorola patch packet.</summary> /// <summary>Helper to write a Motorola patch packet.</summary>
void writeRF_TSDU_Mot_Patch(uint32_t group1, uint32_t group2, uint32_t group3); void writeRF_TSDU_Mot_Patch(uint32_t group1, uint32_t group2, uint32_t group3);
@ -169,6 +171,7 @@ namespace p25
bool m_ctrlTSDUMBF; bool m_ctrlTSDUMBF;
bool m_localEmergAlarm;
bool m_sndcpChGrant; bool m_sndcpChGrant;
bool m_dumpTSBK; bool m_dumpTSBK;

Loading…
Cancel
Save

Powered by TurnKey Linux.