fix missing foreground option on dvmfne; add extra CC halt cases; correct bad check for enable control for conventional grant demand; fix incorrect creation og control byte for grant demand; add clear log message that a grant demand is being generated;

pull/48/head
Bryan Biedenkapp 2 years ago
parent aa7921fe18
commit d8dec70665

@ -158,6 +158,9 @@ int checkArgs(int argc, char* argv[])
++p; ++p;
break; break;
} }
else if (IS("-f")) {
g_foreground = true;
}
else if (IS("-c")) { else if (IS("-c")) {
if (argc-- <= 0) if (argc-- <= 0)
usage("error: %s", "must specify the configuration file to use"); usage("error: %s", "must specify the configuration file to use");

@ -1441,6 +1441,12 @@ void Control::processFrameLoss()
m_voice->resetRF(); m_voice->resetRF();
m_data->resetRF(); m_data->resetRF();
// if voice on control; and CC is halted restart CC
if (m_voiceOnControl && m_ccHalted) {
m_ccHalted = false;
writeRF_ControlData();
}
} }
/// <summary> /// <summary>

@ -392,8 +392,9 @@ bool Voice::process(uint8_t* data, uint32_t len)
} }
// send network grant demand TDU // send network grant demand TDU
if (!m_p25->m_control && m_p25->m_convNetGrantDemand) { if (!m_p25->m_enableControl && m_p25->m_convNetGrantDemand) {
uint8_t controlByte = 0x80U | (group) ? 0x00U : 0x01U; uint8_t controlByte = 0x80U + ((group) ? 0x00U : 0x01U);
LogMessage(LOG_RF, P25_HDU_STR " remote grant demand, srcId = %u, dstId = %u", srcId, dstId);
m_p25->m_network->writeP25TDU(lc, m_rfLSD, controlByte); m_p25->m_network->writeP25TDU(lc, m_rfLSD, controlByte);
} }
@ -466,6 +467,9 @@ bool Voice::process(uint8_t* data, uint32_t len)
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, false); m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, false);
m_p25->m_txQueue.clear();
m_p25->m_ccHalted = true;
} }
} }
@ -888,6 +892,12 @@ bool Voice::process(uint8_t* data, uint32_t len)
} }
} }
// if voice on control; and CC is halted restart CC
if (m_p25->m_voiceOnControl && m_p25->m_ccHalted) {
m_p25->m_ccHalted = false;
m_p25->writeRF_ControlData();
}
m_p25->m_rfState = RS_RF_LISTENING; m_p25->m_rfState = RS_RF_LISTENING;
return true; return true;
} }
@ -943,7 +953,7 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
// don't process network frames if the RF modem isn't in a listening state // don't process network frames if the RF modem isn't in a listening state
if (m_p25->m_rfState != RS_RF_LISTENING) { if (m_p25->m_rfState != RS_RF_LISTENING) {
if (m_rfLC.getSrcId() == srcId && m_rfLC.getDstId() == dstId) { if (m_rfLC.getSrcId() == srcId && m_rfLC.getDstId() == dstId) {
LogWarning(LOG_RF, "Traffic collision detect, preempting new network traffic to existing RF traffic (Are we in a voting condition?), rfSrcId = %u, rfDstId = %u, netSrcId = %u, netDstId = %u", m_rfLC.getSrcId(), m_rfLC.getDstId(), LogWarning(LOG_NET, "Traffic collision detect, preempting new network traffic to existing RF traffic (Are we in a voting condition?), rfSrcId = %u, rfDstId = %u, netSrcId = %u, netDstId = %u", m_rfLC.getSrcId(), m_rfLC.getDstId(),
srcId, dstId); srcId, dstId);
resetNet(); resetNet();
if (m_p25->m_network != nullptr) if (m_p25->m_network != nullptr)
@ -951,7 +961,7 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
return false; return false;
} }
else { else {
LogWarning(LOG_RF, "Traffic collision detect, preempting new network traffic to existing RF traffic, rfDstId = %u, netDstId = %u", m_rfLC.getDstId(), LogWarning(LOG_NET, "Traffic collision detect, preempting new network traffic to existing RF traffic, rfDstId = %u, netDstId = %u", m_rfLC.getDstId(),
dstId); dstId);
resetNet(); resetNet();
if (m_p25->m_network != nullptr) if (m_p25->m_network != nullptr)
@ -1037,7 +1047,7 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
m_p25->notifyCC_TouchGrant(control.getDstId()); m_p25->notifyCC_TouchGrant(control.getDstId());
} }
if (m_p25->m_dedicatedControl) { if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) {
return true; return true;
} }
@ -1106,7 +1116,7 @@ bool Voice::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
m_p25->notifyCC_TouchGrant(control.getDstId()); m_p25->notifyCC_TouchGrant(control.getDstId());
} }
if (m_p25->m_dedicatedControl) { if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) {
return true; return true;
} }
@ -1330,6 +1340,12 @@ void Voice::writeNet_TDU()
resetNet(); resetNet();
m_p25->m_netState = RS_NET_IDLE; m_p25->m_netState = RS_NET_IDLE;
m_p25->m_tailOnIdle = true; m_p25->m_tailOnIdle = true;
// if voice on control; and CC is halted restart CC
if (m_p25->m_voiceOnControl && m_p25->m_ccHalted) {
m_p25->m_ccHalted = false;
m_p25->writeRF_ControlData();
}
} }
/// <summary> /// <summary>
@ -1632,6 +1648,9 @@ void Voice::writeNet_LDU1()
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, false); m_p25->m_control->writeRF_TSDU_SBF(osp.get(), false, false, false, false);
m_p25->m_txQueue.clear();
m_p25->m_ccHalted = true;
} }
uint32_t netId = control.getNetId(); uint32_t netId = control.getNetId();

Loading…
Cancel
Save

Powered by TurnKey Linux.