correct issue where TDULC for Call Termination was incorrectly being sent while in simplex mode (should fix issue #3); add configuration option called "simplexSameFrequency" to control whether simplex operation takes place on a split frequency pair or a single frequency; fix issue where P25 nulls may be incorrectly transmitted in simplex mode;

pull/12/head
Bryan Biedenkapp 4 years ago
parent d2211633da
commit f5cb11b467

@ -78,6 +78,7 @@ system:
identity: ABCD123 identity: ABCD123
timeout: 180 timeout: 180
duplex: true duplex: true
simplexSameFrequency: false
modeHang: 10 modeHang: 10
# rfModeHang: 10 # rfModeHang: 10
# netModeHang: 10 # netModeHang: 10

@ -1306,6 +1306,7 @@ bool Host::readParams()
yaml::Node systemConf = m_conf["system"]; yaml::Node systemConf = m_conf["system"];
m_duplex = systemConf["duplex"].as<bool>(true); m_duplex = systemConf["duplex"].as<bool>(true);
bool simplexSameFreq = systemConf["simplexSameFrequency"].as<bool>(false);
m_timeout = systemConf["timeout"].as<uint32_t>(120U); m_timeout = systemConf["timeout"].as<uint32_t>(120U);
m_rfModeHang = systemConf["rfModeHang"].as<uint32_t>(10U); m_rfModeHang = systemConf["rfModeHang"].as<uint32_t>(10U);
@ -1332,6 +1333,9 @@ bool Host::readParams()
LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled"); LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled");
LogInfo(" Duplex: %s", m_duplex ? "yes" : "no"); LogInfo(" Duplex: %s", m_duplex ? "yes" : "no");
if (!udpMasterMode) { if (!udpMasterMode) {
if (!m_duplex) {
LogInfo(" Simplex Same Frequency: %s", simplexSameFreq ? "yes" : "no");
}
LogInfo(" Timeout: %us", m_timeout); LogInfo(" Timeout: %us", m_timeout);
LogInfo(" RF Mode Hang: %us", m_rfModeHang); LogInfo(" RF Mode Hang: %us", m_rfModeHang);
LogInfo(" RF Talkgroup Hang: %us", m_rfTalkgroupHang); LogInfo(" RF Talkgroup Hang: %us", m_rfTalkgroupHang);
@ -1391,21 +1395,18 @@ bool Host::readParams()
m_channelNo = 4095U; m_channelNo = 4095U;
} }
if (m_duplex) { if (entry.txOffsetMhz() == 0U) {
if (entry.txOffsetMhz() == 0U) { ::LogError(LOG_HOST, "Channel Id %u has an invalid Tx offset.", m_channelId);
::LogError(LOG_HOST, "Channel Id %u has an invalid Tx offset.", m_channelId); return false;
return false; }
}
uint32_t calcSpace = (uint32_t)(entry.chSpaceKhz() / 0.125); uint32_t calcSpace = (uint32_t)(entry.chSpaceKhz() / 0.125);
float calcTxOffset = entry.txOffsetMhz() * 1000000; float calcTxOffset = entry.txOffsetMhz() * 1000000;
m_rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)) + calcTxOffset); m_rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)) + calcTxOffset);
m_txFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo))); m_txFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)));
}
else {
uint32_t calcSpace = (uint32_t)(entry.chSpaceKhz() / 0.125);
if (!m_duplex && simplexSameFreq) {
m_rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo))); m_rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)));
m_txFrequency = m_rxFrequency; m_txFrequency = m_rxFrequency;
} }

@ -573,7 +573,7 @@ bool Control::writeEndRF()
if (m_netState == RS_NET_IDLE && m_rfState == RS_RF_LISTENING) { if (m_netState == RS_NET_IDLE && m_rfState == RS_RF_LISTENING) {
if (m_tailOnIdle) { if (m_tailOnIdle) {
bool ret = m_voice->writeEndRF(); bool ret = m_voice->writeEndRF();
if (!m_control) { if (!m_control && m_duplex) {
writeRF_Nulls(); writeRF_Nulls();
} }

@ -1496,6 +1496,10 @@ void TrunkPacket::writeRF_TDULC(lc::TDULC lc, bool noNetwork)
/// <param name="dstId"></param> /// <param name="dstId"></param>
void TrunkPacket::writeRF_TDULC_ChanRelease(bool grp, uint32_t srcId, uint32_t dstId) void TrunkPacket::writeRF_TDULC_ChanRelease(bool grp, uint32_t srcId, uint32_t dstId)
{ {
if (!m_p25->m_duplex) {
return;
}
uint32_t count = m_p25->m_hangCount / 2; uint32_t count = m_p25->m_hangCount / 2;
lc::TDULC lc = lc::TDULC(m_p25->m_siteData, m_p25->m_idenEntry, m_dumpTSBK); lc::TDULC lc = lc::TDULC(m_p25->m_siteData, m_p25->m_idenEntry, m_dumpTSBK);

Loading…
Cancel
Save

Powered by TurnKey Linux.