Merge branch 'master' into nxdn

This commit is contained in:
Jonathan Naylor
2018-01-16 20:14:57 +00:00
5 changed files with 57 additions and 29 deletions

View File

@@ -148,7 +148,6 @@ m_ysfNetModeHang(3U),
m_p25NetModeHang(3U),
m_nxdnNetModeHang(3U),
m_modeTimer(1000U),
m_dmrBeaconTimer(1000U),
m_dmrTXTimer(1000U),
m_cwIdTimer(1000U),
m_duplex(false),
@@ -375,6 +374,9 @@ int CMMDVMHost::run()
dstar = new CDStarControl(m_callsign, module, selfOnly, ackReply, ackTime, errorReply, blackList, m_dstarNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi);
}
CTimer dmrBeaconIntervalTimer(1000U);
CTimer dmrBeaconDurationTimer(1000U);
CDMRControl* dmr = NULL;
if (m_dmrEnabled) {
unsigned int id = m_conf.getDMRId();
@@ -390,7 +392,7 @@ int CMMDVMHost::run()
unsigned int callHang = m_conf.getDMRCallHang();
unsigned int txHang = m_conf.getDMRTXHang();
m_dmrRFModeHang = m_conf.getDMRModeHang();
unsigned int dmrBeacons = m_conf.getDMRBeacons();
bool dmrBeacons = m_conf.getDMRBeacons();
if (txHang > m_dmrRFModeHang)
txHang = m_dmrRFModeHang;
@@ -424,10 +426,17 @@ int CMMDVMHost::run()
LogInfo(" TX Hang: %us", txHang);
LogInfo(" Mode Hang: %us", m_dmrRFModeHang);
if (dmrBeacons > 0U) {
LogInfo(" DMR Roaming Beacons: %u mins", dmrBeacons);
m_dmrBeaconTimer.setTimeout(dmrBeacons * 60U);
m_dmrBeaconTimer.start();
if (dmrBeacons) {
unsigned int dmrBeaconInterval = m_conf.getDMRBeaconInterval();
unsigned int dmrBeaconDuration = m_conf.getDMRBeaconDuration();
LogInfo(" DMR Roaming Beacon Interval: %us", dmrBeaconInterval);
LogInfo(" DMR Roaming Beacon Duration: %us", dmrBeaconDuration);
dmrBeaconDurationTimer.setTimeout(dmrBeaconDuration);
dmrBeaconIntervalTimer.setTimeout(dmrBeaconInterval);
dmrBeaconIntervalTimer.start();
}
dmr = new CDMRControl(id, colorCode, callHang, selfOnly, embeddedLCOnly, dumpTAData, prefixes, blackList, whiteList, slot1TGWhiteList, slot2TGWhiteList, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, m_lookup, rssi);
@@ -495,8 +504,6 @@ int CMMDVMHost::run()
nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi);
}
CTimer dmrBeaconTimer(1000U, 4U);
setMode(MODE_IDLE);
LogMessage("MMDVMHost-%s is running", VERSION);
@@ -552,13 +559,13 @@ int CMMDVMHost::run()
if (ret) {
m_modeTimer.setTimeout(m_dmrRFModeHang);
setMode(MODE_DMR);
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
}
} else {
m_modeTimer.setTimeout(m_dmrRFModeHang);
setMode(MODE_DMR);
dmr->writeModemSlot1(data, len);
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
}
} else if (m_mode == MODE_DMR) {
if (m_duplex && !m_modem->hasTX()) {
@@ -570,7 +577,7 @@ int CMMDVMHost::run()
} else {
bool ret = dmr->writeModemSlot1(data, len);
if (ret) {
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
m_modeTimer.start();
if (m_duplex)
m_dmrTXTimer.start();
@@ -589,13 +596,13 @@ int CMMDVMHost::run()
if (ret) {
m_modeTimer.setTimeout(m_dmrRFModeHang);
setMode(MODE_DMR);
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
}
} else {
m_modeTimer.setTimeout(m_dmrRFModeHang);
setMode(MODE_DMR);
dmr->writeModemSlot2(data, len);
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
}
} else if (m_mode == MODE_DMR) {
if (m_duplex && !m_modem->hasTX()) {
@@ -607,7 +614,7 @@ int CMMDVMHost::run()
} else {
bool ret = dmr->writeModemSlot2(data, len);
if (ret) {
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
m_modeTimer.start();
if (m_duplex)
m_dmrTXTimer.start();
@@ -703,7 +710,7 @@ int CMMDVMHost::run()
m_dmrTXTimer.start();
}
m_modem->writeDMRData1(data, len);
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
m_modeTimer.start();
} else if (m_mode != MODE_LOCKOUT) {
LogWarning("DMR data received when in mode %u", m_mode);
@@ -725,7 +732,7 @@ int CMMDVMHost::run()
m_dmrTXTimer.start();
}
m_modem->writeDMRData2(data, len);
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
m_modeTimer.start();
} else if (m_mode != MODE_LOCKOUT) {
LogWarning("DMR data received when in mode %u", m_mode);
@@ -833,19 +840,19 @@ int CMMDVMHost::run()
}
}
m_dmrBeaconTimer.clock(ms);
if (m_dmrBeaconTimer.isRunning() && m_dmrBeaconTimer.hasExpired()) {
dmrBeaconIntervalTimer.clock(ms);
if (dmrBeaconIntervalTimer.isRunning() && dmrBeaconIntervalTimer.hasExpired()) {
if (m_mode == MODE_IDLE && !m_modem->hasTX()) {
setMode(MODE_DMR);
m_dmrBeaconTimer.start();
dmrBeaconTimer.start();
dmrBeaconIntervalTimer.start();
dmrBeaconDurationTimer.start();
}
}
dmrBeaconTimer.clock(ms);
if (dmrBeaconTimer.isRunning() && dmrBeaconTimer.hasExpired()) {
dmrBeaconDurationTimer.clock(ms);
if (dmrBeaconDurationTimer.isRunning() && dmrBeaconDurationTimer.hasExpired()) {
setMode(MODE_IDLE);
dmrBeaconTimer.stop();
dmrBeaconDurationTimer.stop();
}
m_dmrTXTimer.clock(ms);