add capability to disable unit-to-unit availability check (U2U calls are still acting strangely though); ACK a EMERG_ALRM_REQ (but do nothing else, this is by design); properly ignore a TSBK_IOSP_TELE_INT_ANS, we don't support PTSN connections (and probably won't ever);

Bryan Biedenkapp 4 years ago
parent ee724396f6
commit 16a9e59f44

@ -68,6 +68,7 @@ protocols:
callHang: 5 callHang: 5
noStatusAck: false noStatusAck: false
noMessageAck: true noMessageAck: true
unitToUnitAvailCheck: true
silenceThreshold: 124 silenceThreshold: 124
disableNetworkHDU: false disableNetworkHDU: false
queueSize: 5000 queueSize: 5000

@ -200,6 +200,7 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s
m_trunk->m_noStatusAck = p25Protocol["noStatusAck"].as<bool>(false); m_trunk->m_noStatusAck = p25Protocol["noStatusAck"].as<bool>(false);
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);
yaml::Node control = p25Protocol["control"]; yaml::Node control = p25Protocol["control"];
m_control = control["enable"].as<bool>(false); m_control = control["enable"].as<bool>(false);
@ -275,6 +276,7 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s
LogInfo(" No Status ACK: %s", m_trunk->m_noStatusAck ? "yes" : "no"); LogInfo(" No Status ACK: %s", m_trunk->m_noStatusAck ? "yes" : "no");
LogInfo(" No Message ACK: %s", m_trunk->m_noMessageAck ? "yes" : "no"); LogInfo(" No Message ACK: %s", m_trunk->m_noMessageAck ? "yes" : "no");
LogInfo(" Unit-to-Unit Availability Check: %s", m_trunk->m_unitToUnitAvailCheck ? "yes" : "no");
} }
m_voice->resetRF(); m_voice->resetRF();

@ -181,6 +181,8 @@ namespace p25
const uint32_t P25_DENY_RSN_PTT_BONK = 0x77U; const uint32_t P25_DENY_RSN_PTT_BONK = 0x77U;
const uint32_t P25_DENY_RSN_SYS_UNSUPPORTED_SVC = 0xFFU; const uint32_t P25_DENY_RSN_SYS_UNSUPPORTED_SVC = 0xFFU;
const uint32_t P25_QUE_RSN_REQ_ACTIVE_SERVICE = 0x10U;
const uint32_t P25_QUE_RSN_TGT_ACTIVE_SERVICE = 0x20U;
const uint32_t P25_QUE_RSN_TGT_UNIT_QUEUED = 0x2FU; const uint32_t P25_QUE_RSN_TGT_UNIT_QUEUED = 0x2FU;
const uint32_t P25_QUE_RSN_CHN_RESOURCE_NOT_AVAIL = 0x40U; const uint32_t P25_QUE_RSN_CHN_RESOURCE_NOT_AVAIL = 0x40U;

@ -236,7 +236,12 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len)
LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Request), srcId = %u, dstId = %u", srcId, dstId); LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Request), srcId = %u, dstId = %u", srcId, dstId);
} }
writeRF_TSDU_UU_Ans_Req(srcId, dstId); if (m_unitToUnitAvailCheck) {
writeRF_TSDU_UU_Ans_Req(srcId, dstId);
}
else {
writeRF_TSDU_Grant(false, false, false);
}
break; break;
case TSBK_IOSP_UU_ANS: case TSBK_IOSP_UU_ANS:
// make sure control data is supported // make sure control data is supported
@ -253,10 +258,6 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len)
m_rfTSBK.getResponse(), srcId, dstId); m_rfTSBK.getResponse(), srcId, dstId);
} }
if (m_p25->m_ackTSBKRequests) {
writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_UU_ANS, false, true);
}
if (m_rfTSBK.getResponse() == P25_ANS_RSP_PROCEED) { if (m_rfTSBK.getResponse() == P25_ANS_RSP_PROCEED) {
writeRF_TSDU_Grant(false, false, false); writeRF_TSDU_Grant(false, false, false);
} }
@ -283,16 +284,7 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len)
writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_TELE_INT_ANS, false, true); writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_TELE_INT_ANS, false, true);
} }
if (m_rfTSBK.getResponse() == P25_ANS_RSP_PROCEED) { writeRF_TSDU_Deny(P25_DENY_RSN_SYS_UNSUPPORTED_SVC, TSBK_IOSP_TELE_INT_ANS);
//writeRF_TSDU_Grant(false);
writeRF_TSDU_Deny(P25_DENY_RSN_SYS_UNSUPPORTED_SVC, TSBK_IOSP_TELE_INT_ANS);
}
else if (m_rfTSBK.getResponse() == P25_ANS_RSP_DENY) {
writeRF_TSDU_ACK_FNE(srcId, TSBK_IOSP_TELE_INT_ANS, false, true);
}
else if (m_rfTSBK.getResponse() == P25_ANS_RSP_WAIT) {
writeRF_TSDU_Queue(P25_QUE_RSN_TGT_UNIT_QUEUED, TSBK_IOSP_TELE_INT_ANS);
}
break; break;
case TSBK_ISP_SNDCP_CH_REQ: case TSBK_ISP_SNDCP_CH_REQ:
// make sure control data is supported // make sure control data is supported
@ -420,7 +412,7 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len)
::ActivityLog("P25", true, "emergency alarm request request from %u", srcId); ::ActivityLog("P25", true, "emergency alarm request request from %u", srcId);
writeRF_TSDU_SBF(false); writeRF_TSDU_ACK_FNE(srcId, TSBK_ISP_EMERG_ALRM_REQ, false, true);
} }
break; break;
case TSBK_IOSP_GRP_AFF: case TSBK_IOSP_GRP_AFF:
@ -1214,6 +1206,7 @@ TrunkPacket::TrunkPacket(Control* p25, network::BaseNetwork* network, bool dumpT
m_voiceGrantChCnt(0U), m_voiceGrantChCnt(0U),
m_noStatusAck(false), m_noStatusAck(false),
m_noMessageAck(true), m_noMessageAck(true),
m_unitToUnitAvailCheck(true),
m_adjSiteUpdateTimer(1000U), m_adjSiteUpdateTimer(1000U),
m_adjSiteUpdateInterval(ADJ_SITE_TIMER_TIMEOUT), m_adjSiteUpdateInterval(ADJ_SITE_TIMER_TIMEOUT),
m_ctrlTSDUMBF(true), m_ctrlTSDUMBF(true),

@ -150,6 +150,7 @@ namespace p25
bool m_noStatusAck; bool m_noStatusAck;
bool m_noMessageAck; bool m_noMessageAck;
bool m_unitToUnitAvailCheck;
Timer m_adjSiteUpdateTimer; Timer m_adjSiteUpdateTimer;
uint32_t m_adjSiteUpdateInterval; uint32_t m_adjSiteUpdateInterval;

Loading…
Cancel
Save

Powered by TurnKey Linux.