mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-28 14:05:36 +08:00
Add more DMR beacon parameters.
This commit is contained in:
@@ -144,7 +144,6 @@ m_dmrNetModeHang(3U),
|
||||
m_ysfNetModeHang(3U),
|
||||
m_p25NetModeHang(3U),
|
||||
m_modeTimer(1000U),
|
||||
m_dmrBeaconTimer(1000U),
|
||||
m_dmrTXTimer(1000U),
|
||||
m_cwIdTimer(1000U),
|
||||
m_duplex(false),
|
||||
@@ -364,6 +363,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();
|
||||
@@ -379,7 +381,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;
|
||||
@@ -413,10 +415,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);
|
||||
@@ -466,8 +475,6 @@ int CMMDVMHost::run()
|
||||
p25 = new CP25Control(nac, id, selfOnly, uidOverride, m_p25Network, m_display, m_timeout, m_duplex, m_lookup, remoteGateway, rssi);
|
||||
}
|
||||
|
||||
CTimer dmrBeaconTimer(1000U, 4U);
|
||||
|
||||
setMode(MODE_IDLE);
|
||||
|
||||
LogMessage("MMDVMHost-%s is running", VERSION);
|
||||
@@ -523,13 +530,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()) {
|
||||
@@ -541,7 +548,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();
|
||||
@@ -560,13 +567,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()) {
|
||||
@@ -578,7 +585,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();
|
||||
@@ -658,7 +665,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);
|
||||
@@ -680,7 +687,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);
|
||||
@@ -765,19 +772,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);
|
||||
|
||||
Reference in New Issue
Block a user