mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-24 01:25:41 +08:00
Merge branch 'master' into nxdn
This commit is contained in:
22
Conf.cpp
22
Conf.cpp
@@ -113,7 +113,9 @@ m_dstarErrorReply(true),
|
|||||||
m_dstarRemoteGateway(false),
|
m_dstarRemoteGateway(false),
|
||||||
m_dstarModeHang(10U),
|
m_dstarModeHang(10U),
|
||||||
m_dmrEnabled(false),
|
m_dmrEnabled(false),
|
||||||
m_dmrBeacons(0U),
|
m_dmrBeacons(false),
|
||||||
|
m_dmrBeaconInterval(60U),
|
||||||
|
m_dmrBeaconDuration(3U),
|
||||||
m_dmrId(0U),
|
m_dmrId(0U),
|
||||||
m_dmrColorCode(2U),
|
m_dmrColorCode(2U),
|
||||||
m_dmrSelfOnly(false),
|
m_dmrSelfOnly(false),
|
||||||
@@ -445,7 +447,11 @@ bool CConf::read()
|
|||||||
if (::strcmp(key, "Enable") == 0)
|
if (::strcmp(key, "Enable") == 0)
|
||||||
m_dmrEnabled = ::atoi(value) == 1;
|
m_dmrEnabled = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Beacons") == 0)
|
else if (::strcmp(key, "Beacons") == 0)
|
||||||
m_dmrBeacons = (unsigned int)::atoi(value);
|
m_dmrBeacons = ::atoi(value) == 1;
|
||||||
|
else if (::strcmp(key, "BeaconInterval") == 0)
|
||||||
|
m_dmrBeaconInterval = (unsigned int)::atoi(value);
|
||||||
|
else if (::strcmp(key, "BeaconDuration") == 0)
|
||||||
|
m_dmrBeaconDuration = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "Id") == 0)
|
else if (::strcmp(key, "Id") == 0)
|
||||||
m_dmrId = (unsigned int)::atoi(value);
|
m_dmrId = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "ColorCode") == 0)
|
else if (::strcmp(key, "ColorCode") == 0)
|
||||||
@@ -983,11 +989,21 @@ bool CConf::getDMREnabled() const
|
|||||||
return m_dmrEnabled;
|
return m_dmrEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int CConf::getDMRBeacons() const
|
bool CConf::getDMRBeacons() const
|
||||||
{
|
{
|
||||||
return m_dmrBeacons;
|
return m_dmrBeacons;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int CConf::getDMRBeaconInterval() const
|
||||||
|
{
|
||||||
|
return m_dmrBeaconInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int CConf::getDMRBeaconDuration() const
|
||||||
|
{
|
||||||
|
return m_dmrBeaconDuration;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int CConf::getDMRId() const
|
unsigned int CConf::getDMRId() const
|
||||||
{
|
{
|
||||||
return m_dmrId;
|
return m_dmrId;
|
||||||
|
|||||||
8
Conf.h
8
Conf.h
@@ -104,7 +104,9 @@ public:
|
|||||||
|
|
||||||
// The DMR section
|
// The DMR section
|
||||||
bool getDMREnabled() const;
|
bool getDMREnabled() const;
|
||||||
unsigned int getDMRBeacons() const;
|
bool getDMRBeacons() const;
|
||||||
|
unsigned int getDMRBeaconInterval() const;
|
||||||
|
unsigned int getDMRBeaconDuration() const;
|
||||||
unsigned int getDMRId() const;
|
unsigned int getDMRId() const;
|
||||||
unsigned int getDMRColorCode() const;
|
unsigned int getDMRColorCode() const;
|
||||||
bool getDMREmbeddedLCOnly() const;
|
bool getDMREmbeddedLCOnly() const;
|
||||||
@@ -297,7 +299,9 @@ private:
|
|||||||
unsigned int m_dstarModeHang;
|
unsigned int m_dstarModeHang;
|
||||||
|
|
||||||
bool m_dmrEnabled;
|
bool m_dmrEnabled;
|
||||||
unsigned int m_dmrBeacons;
|
bool m_dmrBeacons;
|
||||||
|
unsigned int m_dmrBeaconInterval;
|
||||||
|
unsigned int m_dmrBeaconDuration;
|
||||||
unsigned int m_dmrId;
|
unsigned int m_dmrId;
|
||||||
unsigned int m_dmrColorCode;
|
unsigned int m_dmrColorCode;
|
||||||
bool m_dmrSelfOnly;
|
bool m_dmrSelfOnly;
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ RemoteGateway=0
|
|||||||
[DMR]
|
[DMR]
|
||||||
Enable=1
|
Enable=1
|
||||||
Beacons=0
|
Beacons=0
|
||||||
|
BeaconInterval=60
|
||||||
|
BeaconDuration=3
|
||||||
ColorCode=1
|
ColorCode=1
|
||||||
SelfOnly=0
|
SelfOnly=0
|
||||||
EmbeddedLCOnly=0
|
EmbeddedLCOnly=0
|
||||||
|
|||||||
@@ -148,7 +148,6 @@ m_ysfNetModeHang(3U),
|
|||||||
m_p25NetModeHang(3U),
|
m_p25NetModeHang(3U),
|
||||||
m_nxdnNetModeHang(3U),
|
m_nxdnNetModeHang(3U),
|
||||||
m_modeTimer(1000U),
|
m_modeTimer(1000U),
|
||||||
m_dmrBeaconTimer(1000U),
|
|
||||||
m_dmrTXTimer(1000U),
|
m_dmrTXTimer(1000U),
|
||||||
m_cwIdTimer(1000U),
|
m_cwIdTimer(1000U),
|
||||||
m_duplex(false),
|
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);
|
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;
|
CDMRControl* dmr = NULL;
|
||||||
if (m_dmrEnabled) {
|
if (m_dmrEnabled) {
|
||||||
unsigned int id = m_conf.getDMRId();
|
unsigned int id = m_conf.getDMRId();
|
||||||
@@ -390,7 +392,7 @@ int CMMDVMHost::run()
|
|||||||
unsigned int callHang = m_conf.getDMRCallHang();
|
unsigned int callHang = m_conf.getDMRCallHang();
|
||||||
unsigned int txHang = m_conf.getDMRTXHang();
|
unsigned int txHang = m_conf.getDMRTXHang();
|
||||||
m_dmrRFModeHang = m_conf.getDMRModeHang();
|
m_dmrRFModeHang = m_conf.getDMRModeHang();
|
||||||
unsigned int dmrBeacons = m_conf.getDMRBeacons();
|
bool dmrBeacons = m_conf.getDMRBeacons();
|
||||||
|
|
||||||
if (txHang > m_dmrRFModeHang)
|
if (txHang > m_dmrRFModeHang)
|
||||||
txHang = m_dmrRFModeHang;
|
txHang = m_dmrRFModeHang;
|
||||||
@@ -424,10 +426,17 @@ int CMMDVMHost::run()
|
|||||||
LogInfo(" TX Hang: %us", txHang);
|
LogInfo(" TX Hang: %us", txHang);
|
||||||
LogInfo(" Mode Hang: %us", m_dmrRFModeHang);
|
LogInfo(" Mode Hang: %us", m_dmrRFModeHang);
|
||||||
|
|
||||||
if (dmrBeacons > 0U) {
|
if (dmrBeacons) {
|
||||||
LogInfo(" DMR Roaming Beacons: %u mins", dmrBeacons);
|
unsigned int dmrBeaconInterval = m_conf.getDMRBeaconInterval();
|
||||||
m_dmrBeaconTimer.setTimeout(dmrBeacons * 60U);
|
unsigned int dmrBeaconDuration = m_conf.getDMRBeaconDuration();
|
||||||
m_dmrBeaconTimer.start();
|
|
||||||
|
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);
|
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);
|
nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi);
|
||||||
}
|
}
|
||||||
|
|
||||||
CTimer dmrBeaconTimer(1000U, 4U);
|
|
||||||
|
|
||||||
setMode(MODE_IDLE);
|
setMode(MODE_IDLE);
|
||||||
|
|
||||||
LogMessage("MMDVMHost-%s is running", VERSION);
|
LogMessage("MMDVMHost-%s is running", VERSION);
|
||||||
@@ -552,13 +559,13 @@ int CMMDVMHost::run()
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
||||||
setMode(MODE_DMR);
|
setMode(MODE_DMR);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
||||||
setMode(MODE_DMR);
|
setMode(MODE_DMR);
|
||||||
dmr->writeModemSlot1(data, len);
|
dmr->writeModemSlot1(data, len);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
}
|
}
|
||||||
} else if (m_mode == MODE_DMR) {
|
} else if (m_mode == MODE_DMR) {
|
||||||
if (m_duplex && !m_modem->hasTX()) {
|
if (m_duplex && !m_modem->hasTX()) {
|
||||||
@@ -570,7 +577,7 @@ int CMMDVMHost::run()
|
|||||||
} else {
|
} else {
|
||||||
bool ret = dmr->writeModemSlot1(data, len);
|
bool ret = dmr->writeModemSlot1(data, len);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
m_modeTimer.start();
|
m_modeTimer.start();
|
||||||
if (m_duplex)
|
if (m_duplex)
|
||||||
m_dmrTXTimer.start();
|
m_dmrTXTimer.start();
|
||||||
@@ -589,13 +596,13 @@ int CMMDVMHost::run()
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
||||||
setMode(MODE_DMR);
|
setMode(MODE_DMR);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
m_modeTimer.setTimeout(m_dmrRFModeHang);
|
||||||
setMode(MODE_DMR);
|
setMode(MODE_DMR);
|
||||||
dmr->writeModemSlot2(data, len);
|
dmr->writeModemSlot2(data, len);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
}
|
}
|
||||||
} else if (m_mode == MODE_DMR) {
|
} else if (m_mode == MODE_DMR) {
|
||||||
if (m_duplex && !m_modem->hasTX()) {
|
if (m_duplex && !m_modem->hasTX()) {
|
||||||
@@ -607,7 +614,7 @@ int CMMDVMHost::run()
|
|||||||
} else {
|
} else {
|
||||||
bool ret = dmr->writeModemSlot2(data, len);
|
bool ret = dmr->writeModemSlot2(data, len);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
m_modeTimer.start();
|
m_modeTimer.start();
|
||||||
if (m_duplex)
|
if (m_duplex)
|
||||||
m_dmrTXTimer.start();
|
m_dmrTXTimer.start();
|
||||||
@@ -703,7 +710,7 @@ int CMMDVMHost::run()
|
|||||||
m_dmrTXTimer.start();
|
m_dmrTXTimer.start();
|
||||||
}
|
}
|
||||||
m_modem->writeDMRData1(data, len);
|
m_modem->writeDMRData1(data, len);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
m_modeTimer.start();
|
m_modeTimer.start();
|
||||||
} else if (m_mode != MODE_LOCKOUT) {
|
} else if (m_mode != MODE_LOCKOUT) {
|
||||||
LogWarning("DMR data received when in mode %u", m_mode);
|
LogWarning("DMR data received when in mode %u", m_mode);
|
||||||
@@ -725,7 +732,7 @@ int CMMDVMHost::run()
|
|||||||
m_dmrTXTimer.start();
|
m_dmrTXTimer.start();
|
||||||
}
|
}
|
||||||
m_modem->writeDMRData2(data, len);
|
m_modem->writeDMRData2(data, len);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
m_modeTimer.start();
|
m_modeTimer.start();
|
||||||
} else if (m_mode != MODE_LOCKOUT) {
|
} else if (m_mode != MODE_LOCKOUT) {
|
||||||
LogWarning("DMR data received when in mode %u", m_mode);
|
LogWarning("DMR data received when in mode %u", m_mode);
|
||||||
@@ -833,19 +840,19 @@ int CMMDVMHost::run()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_dmrBeaconTimer.clock(ms);
|
dmrBeaconIntervalTimer.clock(ms);
|
||||||
if (m_dmrBeaconTimer.isRunning() && m_dmrBeaconTimer.hasExpired()) {
|
if (dmrBeaconIntervalTimer.isRunning() && dmrBeaconIntervalTimer.hasExpired()) {
|
||||||
if (m_mode == MODE_IDLE && !m_modem->hasTX()) {
|
if (m_mode == MODE_IDLE && !m_modem->hasTX()) {
|
||||||
setMode(MODE_DMR);
|
setMode(MODE_DMR);
|
||||||
m_dmrBeaconTimer.start();
|
dmrBeaconIntervalTimer.start();
|
||||||
dmrBeaconTimer.start();
|
dmrBeaconDurationTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dmrBeaconTimer.clock(ms);
|
dmrBeaconDurationTimer.clock(ms);
|
||||||
if (dmrBeaconTimer.isRunning() && dmrBeaconTimer.hasExpired()) {
|
if (dmrBeaconDurationTimer.isRunning() && dmrBeaconDurationTimer.hasExpired()) {
|
||||||
setMode(MODE_IDLE);
|
setMode(MODE_IDLE);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconDurationTimer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_dmrTXTimer.clock(ms);
|
m_dmrTXTimer.clock(ms);
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ private:
|
|||||||
unsigned int m_p25NetModeHang;
|
unsigned int m_p25NetModeHang;
|
||||||
unsigned int m_nxdnNetModeHang;
|
unsigned int m_nxdnNetModeHang;
|
||||||
CTimer m_modeTimer;
|
CTimer m_modeTimer;
|
||||||
CTimer m_dmrBeaconTimer;
|
|
||||||
CTimer m_dmrTXTimer;
|
CTimer m_dmrTXTimer;
|
||||||
CTimer m_cwIdTimer;
|
CTimer m_cwIdTimer;
|
||||||
bool m_duplex;
|
bool m_duplex;
|
||||||
|
|||||||
Reference in New Issue
Block a user