diff --git a/Conf.cpp b/Conf.cpp index 42a5258..ab6bb6d 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -58,8 +58,6 @@ m_callsign(), m_id(0U), m_timeout(120U), m_duplex(true), -m_rfModeHang(10U), -m_netModeHang(3U), m_display(), m_daemon(false), m_rxFrequency(0U), @@ -107,6 +105,7 @@ m_dstarBlackList(), m_dstarAckReply(true), m_dstarAckTime(750U), m_dstarErrorReply(true), +m_dstarModeHang(10U), m_dmrEnabled(false), m_dmrBeacons(false), m_dmrId(0U), @@ -121,20 +120,25 @@ m_dmrSlot1TGWhiteList(), m_dmrSlot2TGWhiteList(), m_dmrCallHang(3U), m_dmrTXHang(4U), +m_dmrModeHang(10U), m_fusionEnabled(false), m_fusionLowDeviation(false), m_fusionRemoteGateway(false), m_fusionSelfOnly(false), m_fusionSQLEnabled(false), m_fusionSQL(0U), +m_fusionModeHang(10U), m_p25Enabled(false), m_p25Id(0U), m_p25NAC(0x293U), m_p25SelfOnly(false), +m_p25OverrideUID(false), +m_p25ModeHang(10U), m_dstarNetworkEnabled(false), m_dstarGatewayAddress(), m_dstarGatewayPort(0U), m_dstarLocalPort(0U), +m_dstarNetworkModeHang(3U), m_dstarNetworkDebug(false), m_dmrNetworkEnabled(false), m_dmrNetworkAddress(), @@ -146,18 +150,20 @@ m_dmrNetworkDebug(false), m_dmrNetworkJitter(300U), m_dmrNetworkSlot1(true), m_dmrNetworkSlot2(true), +m_dmrNetworkModeHang(3U), m_fusionNetworkEnabled(false), m_fusionNetworkMyAddress(), m_fusionNetworkMyPort(0U), m_fusionNetworkGwyAddress(), m_fusionNetworkGwyPort(0U), +m_fusionNetworkModeHang(3U), m_fusionNetworkDebug(false), m_p25NetworkEnabled(false), m_p25GatewayAddress(), m_p25GatewayPort(0U), m_p25LocalPort(0U), +m_p25NetworkModeHang(3U), m_p25NetworkDebug(false), -m_p25OverrideUID(false), m_tftSerialPort("/dev/ttyAMA0"), m_tftSerialBrightness(50U), m_hd44780Rows(2U), @@ -274,11 +280,12 @@ bool CConf::read() else if (::strcmp(key, "Duplex") == 0) m_duplex = ::atoi(value) == 1; else if (::strcmp(key, "ModeHang") == 0) - m_rfModeHang = m_netModeHang = (unsigned int)::atoi(value); + m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = + m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "RFModeHang") == 0) - m_rfModeHang = (unsigned int)::atoi(value); + m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "NetModeHang") == 0) - m_netModeHang = (unsigned int)::atoi(value); + m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Display") == 0) m_display = value; else if (::strcmp(key, "Daemon") == 0) @@ -399,6 +406,8 @@ bool CConf::read() m_dstarAckTime = (unsigned int)::atoi(value); else if (::strcmp(key, "ErrorReply") == 0) m_dstarErrorReply = ::atoi(value) == 1; + else if (::strcmp(key, "ModeHang") == 0) + m_dstarModeHang = (unsigned int)::atoi(value); } else if (section == SECTION_DMR) { if (::strcmp(key, "Enable") == 0) m_dmrEnabled = ::atoi(value) == 1; @@ -458,6 +467,8 @@ bool CConf::read() m_dmrTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "CallHang") == 0) m_dmrCallHang = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_dmrModeHang = (unsigned int)::atoi(value); } else if (section == SECTION_FUSION) { if (::strcmp(key, "Enable") == 0) m_fusionEnabled = ::atoi(value) == 1; @@ -470,6 +481,8 @@ bool CConf::read() m_fusionRemoteGateway = ::atoi(value) == 1; else if (::strcmp(key, "SelfOnly") == 0) m_fusionSelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "ModeHang") == 0) + m_fusionModeHang = (unsigned int)::atoi(value); } else if (section == SECTION_P25) { if (::strcmp(key, "Enable") == 0) m_p25Enabled = ::atoi(value) == 1; @@ -481,6 +494,8 @@ bool CConf::read() m_p25OverrideUID = ::atoi(value) == 1; else if (::strcmp(key, "SelfOnly") == 0) m_p25SelfOnly = ::atoi(value) == 1; + else if (::strcmp(key, "ModeHang") == 0) + m_p25ModeHang = (unsigned int)::atoi(value); } else if (section == SECTION_DSTAR_NETWORK) { if (::strcmp(key, "Enable") == 0) m_dstarNetworkEnabled = ::atoi(value) == 1; @@ -490,6 +505,8 @@ bool CConf::read() m_dstarGatewayPort = (unsigned int)::atoi(value); else if (::strcmp(key, "LocalPort") == 0) m_dstarLocalPort = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_dstarNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_dstarNetworkDebug = ::atoi(value) == 1; } else if (section == SECTION_DMR_NETWORK) { @@ -513,6 +530,8 @@ bool CConf::read() m_dmrNetworkSlot1 = ::atoi(value) == 1; else if (::strcmp(key, "Slot2") == 0) m_dmrNetworkSlot2 = ::atoi(value) == 1; + else if (::strcmp(key, "ModeHang") == 0) + m_dmrNetworkModeHang = (unsigned int)::atoi(value); } else if (section == SECTION_FUSION_NETWORK) { if (::strcmp(key, "Enable") == 0) m_fusionNetworkEnabled = ::atoi(value) == 1; @@ -524,6 +543,8 @@ bool CConf::read() m_fusionNetworkGwyAddress = value; else if (::strcmp(key, "GwyPort") == 0) m_fusionNetworkGwyPort = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_fusionNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_fusionNetworkDebug = ::atoi(value) == 1; } else if (section == SECTION_P25_NETWORK) { @@ -535,6 +556,8 @@ bool CConf::read() m_p25GatewayPort = (unsigned int)::atoi(value); else if (::strcmp(key, "LocalPort") == 0) m_p25LocalPort = (unsigned int)::atoi(value); + else if (::strcmp(key, "ModeHang") == 0) + m_p25NetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_p25NetworkDebug = ::atoi(value) == 1; } else if (section == SECTION_TFTSERIAL) { @@ -630,16 +653,6 @@ bool CConf::getDuplex() const return m_duplex; } -unsigned int CConf::getRFModeHang() const -{ - return m_rfModeHang; -} - -unsigned int CConf::getNetModeHang() const -{ - return m_netModeHang; -} - std::string CConf::getDisplay() const { return m_display; @@ -875,6 +888,11 @@ bool CConf::getDStarErrorReply() const return m_dstarErrorReply; } +unsigned int CConf::getDStarModeHang() const +{ + return m_dstarModeHang; +} + bool CConf::getDMREnabled() const { return m_dmrEnabled; @@ -945,6 +963,11 @@ unsigned int CConf::getDMRTXHang() const return m_dmrTXHang; } +unsigned int CConf::getDMRModeHang() const +{ + return m_dmrModeHang; +} + bool CConf::getFusionEnabled() const { return m_fusionEnabled; @@ -975,6 +998,11 @@ unsigned char CConf::getFusionSQL() const return m_fusionSQL; } +unsigned int CConf::getFusionModeHang() const +{ + return m_fusionModeHang; +} + bool CConf::getP25Enabled() const { return m_p25Enabled; @@ -990,6 +1018,21 @@ unsigned int CConf::getP25NAC() const return m_p25NAC; } +bool CConf::getP25OverrideUID() const +{ + return m_p25OverrideUID; +} + +bool CConf::getP25SelfOnly() const +{ + return m_p25SelfOnly; +} + +unsigned int CConf::getP25ModeHang() const +{ + return m_p25ModeHang; +} + bool CConf::getDStarNetworkEnabled() const { return m_dstarNetworkEnabled; @@ -1010,6 +1053,11 @@ unsigned int CConf::getDStarLocalPort() const return m_dstarLocalPort; } +unsigned int CConf::getDStarNetworkModeHang() const +{ + return m_dstarNetworkModeHang; +} + bool CConf::getDStarNetworkDebug() const { return m_dstarNetworkDebug; @@ -1045,6 +1093,11 @@ std::string CConf::getDMRNetworkOptions() const return m_dmrNetworkOptions; } +unsigned int CConf::getDMRNetworkModeHang() const +{ + return m_dmrNetworkModeHang; +} + bool CConf::getDMRNetworkDebug() const { return m_dmrNetworkDebug; @@ -1090,6 +1143,11 @@ unsigned int CConf::getFusionNetworkGwyPort() const return m_fusionNetworkGwyPort; } +unsigned int CConf::getFusionNetworkModeHang() const +{ + return m_fusionNetworkModeHang; +} + bool CConf::getFusionNetworkDebug() const { return m_fusionNetworkDebug; @@ -1115,21 +1173,16 @@ unsigned int CConf::getP25LocalPort() const return m_p25LocalPort; } +unsigned int CConf::getP25NetworkModeHang() const +{ + return m_p25NetworkModeHang; +} + bool CConf::getP25NetworkDebug() const { return m_p25NetworkDebug; } -bool CConf::getP25OverrideUID() const -{ - return m_p25OverrideUID; -} - -bool CConf::getP25SelfOnly() const -{ - return m_p25SelfOnly; -} - std::string CConf::getTFTSerialPort() const { return m_tftSerialPort; diff --git a/Conf.h b/Conf.h index fce1750..2fce2b9 100644 --- a/Conf.h +++ b/Conf.h @@ -35,8 +35,6 @@ public: unsigned int getId() const; unsigned int getTimeout() const; bool getDuplex() const; - unsigned int getRFModeHang() const; - unsigned int getNetModeHang() const; std::string getDisplay() const; bool getDaemon() const; @@ -98,6 +96,7 @@ public: bool getDStarAckReply() const; unsigned int getDStarAckTime() const; bool getDStarErrorReply() const; + unsigned int getDStarModeHang() const; // The DMR section bool getDMREnabled() const; @@ -114,6 +113,7 @@ public: std::vector getDMRSlot2TGWhiteList() const; unsigned int getDMRCallHang() const; unsigned int getDMRTXHang() const; + unsigned int getDMRModeHang() const; // The System Fusion section bool getFusionEnabled() const; @@ -122,18 +122,22 @@ public: bool getFusionSelfOnly() const; bool getFusionSQLEnabled() const; unsigned char getFusionSQL() const; + unsigned int getFusionModeHang() const; // The P25 section bool getP25Enabled() const; unsigned int getP25Id() const; unsigned int getP25NAC() const; bool getP25SelfOnly() const; + bool getP25OverrideUID() const; + unsigned int getP25ModeHang() const; // The D-Star Network section bool getDStarNetworkEnabled() const; std::string getDStarGatewayAddress() const; unsigned int getDStarGatewayPort() const; unsigned int getDStarLocalPort() const; + unsigned int getDStarNetworkModeHang() const; bool getDStarNetworkDebug() const; // The DMR Network section @@ -147,6 +151,7 @@ public: unsigned int getDMRNetworkJitter() const; bool getDMRNetworkSlot1() const; bool getDMRNetworkSlot2() const; + unsigned int getDMRNetworkModeHang() const; // The System Fusion Network section bool getFusionNetworkEnabled() const; @@ -154,6 +159,7 @@ public: unsigned int getFusionNetworkMyPort() const; std::string getFusionNetworkGwyAddress() const; unsigned int getFusionNetworkGwyPort() const; + unsigned int getFusionNetworkModeHang() const; bool getFusionNetworkDebug() const; // The P25 Network section @@ -161,8 +167,8 @@ public: std::string getP25GatewayAddress() const; unsigned int getP25GatewayPort() const; unsigned int getP25LocalPort() const; + unsigned int getP25NetworkModeHang() const; bool getP25NetworkDebug() const; - bool getP25OverrideUID() const; // The TFTSERIAL section std::string getTFTSerialPort() const; @@ -207,8 +213,6 @@ private: unsigned int m_id; unsigned int m_timeout; bool m_duplex; - unsigned int m_rfModeHang; - unsigned int m_netModeHang; std::string m_display; bool m_daemon; @@ -263,6 +267,7 @@ private: bool m_dstarAckReply; unsigned int m_dstarAckTime; bool m_dstarErrorReply; + unsigned int m_dstarModeHang; bool m_dmrEnabled; bool m_dmrBeacons; @@ -278,6 +283,7 @@ private: std::vector m_dmrSlot2TGWhiteList; unsigned int m_dmrCallHang; unsigned int m_dmrTXHang; + unsigned int m_dmrModeHang; bool m_fusionEnabled; bool m_fusionLowDeviation; @@ -285,16 +291,20 @@ private: bool m_fusionSelfOnly; bool m_fusionSQLEnabled; unsigned char m_fusionSQL; + unsigned int m_fusionModeHang; bool m_p25Enabled; unsigned int m_p25Id; unsigned int m_p25NAC; bool m_p25SelfOnly; + bool m_p25OverrideUID; + unsigned int m_p25ModeHang; bool m_dstarNetworkEnabled; std::string m_dstarGatewayAddress; unsigned int m_dstarGatewayPort; unsigned int m_dstarLocalPort; + unsigned int m_dstarNetworkModeHang; bool m_dstarNetworkDebug; bool m_dmrNetworkEnabled; @@ -307,20 +317,22 @@ private: unsigned int m_dmrNetworkJitter; bool m_dmrNetworkSlot1; bool m_dmrNetworkSlot2; + unsigned int m_dmrNetworkModeHang; bool m_fusionNetworkEnabled; std::string m_fusionNetworkMyAddress; unsigned int m_fusionNetworkMyPort; std::string m_fusionNetworkGwyAddress; unsigned int m_fusionNetworkGwyPort; + unsigned int m_fusionNetworkModeHang; bool m_fusionNetworkDebug; bool m_p25NetworkEnabled; std::string m_p25GatewayAddress; unsigned int m_p25GatewayPort; unsigned int m_p25LocalPort; + unsigned int m_p25NetworkModeHang; bool m_p25NetworkDebug; - bool m_p25OverrideUID; std::string m_tftSerialPort; unsigned int m_tftSerialBrightness; diff --git a/MMDVM.ini b/MMDVM.ini index 9180aeb..005b45b 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -70,6 +70,7 @@ SelfOnly=0 AckReply=1 AckTime=750 ErrorReply=1 +# ModeHang=10 [DMR] Enable=1 @@ -83,6 +84,7 @@ DumpTAData=1 # Slot2TGWhiteList= CallHang=3 TXHang=4 +# ModeHang=10 [System Fusion] Enable=1 @@ -90,18 +92,21 @@ LowDeviation=0 SelfOnly=0 #DSQ=1 RemoteGateway=0 +# ModeHang=10 [P25] Enable=1 NAC=293 SelfOnly=0 OverrideUIDCheck=0 +# ModeHang=10 [D-Star Network] Enable=1 GatewayAddress=127.0.0.1 GatewayPort=20010 LocalPort=20011 +# ModeHang=3 Debug=0 [DMR Network] @@ -114,6 +119,7 @@ Password=PASSWORD # Options= Slot1=1 Slot2=1 +# ModeHang=3 Debug=0 [System Fusion Network] @@ -122,6 +128,7 @@ LocalAddress=127.0.0.1 LocalPort=3200 GwyAddress=127.0.0.1 GwyPort=4200 +# ModeHang=3 Debug=0 [P25 Network] @@ -129,6 +136,7 @@ Enable=1 GatewayAddress=127.0.0.1 GatewayPort=42020 LocalPort=32010 +# ModeHang=3 Debug=0 [TFT Serial] diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index b388579..0ae4634 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -135,8 +135,14 @@ m_p25Network(NULL), m_display(NULL), m_ump(NULL), m_mode(MODE_IDLE), -m_rfModeHang(10U), -m_netModeHang(3U), +m_dstarRFModeHang(10U), +m_dmrRFModeHang(10U), +m_ysfRFModeHang(10U), +m_p25RFModeHang(10U), +m_dstarNetModeHang(3U), +m_dmrNetModeHang(3U), +m_ysfNetModeHang(3U), +m_p25NetModeHang(3U), m_modeTimer(1000U), m_dmrTXTimer(1000U), m_cwIdTimer(1000U), @@ -342,13 +348,15 @@ int CMMDVMHost::run() bool ackReply = m_conf.getDStarAckReply(); unsigned int ackTime = m_conf.getDStarAckTime(); bool errorReply = m_conf.getDStarErrorReply(); + m_dstarRFModeHang = m_conf.getDStarModeHang(); - LogInfo("D-Star Parameters"); + LogInfo("D-Star RF Parameters"); LogInfo(" Module: %s", module.c_str()); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Ack Reply: %s", ackReply ? "yes" : "no"); LogInfo(" Ack Time: %ums", ackTime); LogInfo(" Error Reply: %s", errorReply ? "yes" : "no"); + LogInfo(" Mode Hang: %us", m_dstarRFModeHang); if (blackList.size() > 0U) LogInfo(" Black List: %u", blackList.size()); @@ -371,16 +379,20 @@ int CMMDVMHost::run() unsigned int callHang = m_conf.getDMRCallHang(); unsigned int txHang = m_conf.getDMRTXHang(); unsigned int jitter = m_conf.getDMRNetworkJitter(); + m_dmrRFModeHang = m_conf.getDMRModeHang(); - if (txHang > m_rfModeHang) - txHang = m_rfModeHang; - if (txHang > m_netModeHang) - txHang = m_netModeHang; + if (txHang > m_dmrRFModeHang) + txHang = m_dmrRFModeHang; + + if (m_conf.getDMRNetworkEnabled()) { + if (txHang > m_dmrNetModeHang) + txHang = m_dmrNetModeHang; + } if (callHang > txHang) callHang = txHang; - LogInfo("DMR Parameters"); + LogInfo("DMR RF Parameters"); LogInfo(" Id: %u", id); LogInfo(" Color Code: %u", colorCode); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); @@ -399,6 +411,7 @@ int CMMDVMHost::run() LogInfo(" Call Hang: %us", callHang); LogInfo(" TX Hang: %us", txHang); + LogInfo(" Mode Hang: %us", m_dmrRFModeHang); 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, jitter); @@ -412,14 +425,16 @@ int CMMDVMHost::run() bool selfOnly = m_conf.getFusionSelfOnly(); bool sqlEnabled = m_conf.getFusionSQLEnabled(); unsigned char sql = m_conf.getFusionSQL(); + m_ysfRFModeHang = m_conf.getFusionModeHang(); - LogInfo("YSF Parameters"); + LogInfo("YSF RF Parameters"); LogInfo(" Low Deviation: %s", lowDeviation ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" DSQ: %s", sqlEnabled ? "yes" : "no"); if (sqlEnabled) LogInfo(" DSQ Value: %u", sql); + LogInfo(" Mode Hang: %us", m_ysfRFModeHang); ysf = new CYSFControl(m_callsign, selfOnly, m_ysfNetwork, m_display, m_timeout, m_duplex, lowDeviation, remoteGateway, rssi); ysf->setSQL(sqlEnabled, sql); @@ -431,12 +446,14 @@ int CMMDVMHost::run() unsigned int nac = m_conf.getP25NAC(); bool uidOverride = m_conf.getP25OverrideUID(); bool selfOnly = m_conf.getP25SelfOnly(); + m_p25RFModeHang = m_conf.getP25ModeHang(); - LogInfo("P25 Parameters"); + LogInfo("P25 RF Parameters"); LogInfo(" Id: %u", id); LogInfo(" NAC: $%03X", nac); LogInfo(" UID Override: %s", uidOverride ? "yes" : "no"); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); + LogInfo(" Mode Hang: %us", m_p25RFModeHang); p25 = new CP25Control(nac, id, selfOnly, uidOverride, m_p25Network, m_display, m_timeout, m_duplex, m_lookup, rssi); } @@ -477,7 +494,7 @@ int CMMDVMHost::run() if (m_mode == MODE_IDLE) { bool ret = dstar->writeModem(data, len); if (ret) { - m_modeTimer.setTimeout(m_rfModeHang); + m_modeTimer.setTimeout(m_dstarRFModeHang); setMode(MODE_DSTAR); } } else if (m_mode == MODE_DSTAR) { @@ -494,12 +511,12 @@ int CMMDVMHost::run() if (m_duplex) { bool ret = dmr->processWakeup(data); if (ret) { - m_modeTimer.setTimeout(m_rfModeHang); + m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); dmrBeaconTimer.stop(); } } else { - m_modeTimer.setTimeout(m_rfModeHang); + m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); dmr->writeModemSlot1(data, len); dmrBeaconTimer.stop(); @@ -531,12 +548,12 @@ int CMMDVMHost::run() if (m_duplex) { bool ret = dmr->processWakeup(data); if (ret) { - m_modeTimer.setTimeout(m_rfModeHang); + m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); dmrBeaconTimer.stop(); } } else { - m_modeTimer.setTimeout(m_rfModeHang); + m_modeTimer.setTimeout(m_dmrRFModeHang); setMode(MODE_DMR); dmr->writeModemSlot2(data, len); dmrBeaconTimer.stop(); @@ -567,7 +584,7 @@ int CMMDVMHost::run() if (m_mode == MODE_IDLE) { bool ret = ysf->writeModem(data, len); if (ret) { - m_modeTimer.setTimeout(m_rfModeHang); + m_modeTimer.setTimeout(m_ysfRFModeHang); setMode(MODE_YSF); } } else if (m_mode == MODE_YSF) { @@ -583,7 +600,7 @@ int CMMDVMHost::run() if (m_mode == MODE_IDLE) { bool ret = p25->writeModem(data, len); if (ret) { - m_modeTimer.setTimeout(m_rfModeHang); + m_modeTimer.setTimeout(m_p25RFModeHang); setMode(MODE_P25); } } else if (m_mode == MODE_P25) { @@ -603,7 +620,7 @@ int CMMDVMHost::run() len = dstar->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { - m_modeTimer.setTimeout(m_netModeHang); + m_modeTimer.setTimeout(m_dstarNetModeHang); setMode(MODE_DSTAR); } if (m_mode == MODE_DSTAR) { @@ -622,7 +639,7 @@ int CMMDVMHost::run() len = dmr->readModemSlot1(data); if (len > 0U) { if (m_mode == MODE_IDLE) { - m_modeTimer.setTimeout(m_netModeHang); + m_modeTimer.setTimeout(m_dmrNetModeHang); setMode(MODE_DMR); } if (m_mode == MODE_DMR) { @@ -644,7 +661,7 @@ int CMMDVMHost::run() len = dmr->readModemSlot2(data); if (len > 0U) { if (m_mode == MODE_IDLE) { - m_modeTimer.setTimeout(m_netModeHang); + m_modeTimer.setTimeout(m_dmrNetModeHang); setMode(MODE_DMR); } if (m_mode == MODE_DMR) { @@ -668,7 +685,7 @@ int CMMDVMHost::run() len = ysf->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { - m_modeTimer.setTimeout(m_netModeHang); + m_modeTimer.setTimeout(m_ysfNetModeHang); setMode(MODE_YSF); } if (m_mode == MODE_YSF) { @@ -687,14 +704,13 @@ int CMMDVMHost::run() len = p25->readModem(data); if (len > 0U) { if (m_mode == MODE_IDLE) { - m_modeTimer.setTimeout(m_netModeHang); + m_modeTimer.setTimeout(m_p25NetModeHang); setMode(MODE_P25); } if (m_mode == MODE_P25) { m_modem->writeP25Data(data, len); m_modeTimer.start(); - } - else if (m_mode != MODE_LOCKOUT) { + } else if (m_mode != MODE_LOCKOUT) { LogWarning("P25 data received when in mode %u", m_mode); } } @@ -873,14 +889,16 @@ bool CMMDVMHost::createModem() bool CMMDVMHost::createDStarNetwork() { std::string gatewayAddress = m_conf.getDStarGatewayAddress(); - unsigned int gatewayPort = m_conf.getDStarGatewayPort(); - unsigned int localPort = m_conf.getDStarLocalPort(); - bool debug = m_conf.getDStarNetworkDebug(); + unsigned int gatewayPort = m_conf.getDStarGatewayPort(); + unsigned int localPort = m_conf.getDStarLocalPort(); + bool debug = m_conf.getDStarNetworkDebug(); + m_dstarNetModeHang = m_conf.getDStarNetworkModeHang(); LogInfo("D-Star Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); LogInfo(" Gateway Port: %u", gatewayPort); LogInfo(" Local Port: %u", localPort); + LogInfo(" Mode Hang: %us", m_dstarNetModeHang); m_dstarNetwork = new CDStarNetwork(gatewayAddress, gatewayPort, localPort, m_duplex, VERSION, debug); @@ -908,6 +926,7 @@ bool CMMDVMHost::createDMRNetwork() bool slot1 = m_conf.getDMRNetworkSlot1(); bool slot2 = m_conf.getDMRNetworkSlot2(); HW_TYPE hwType = m_modem->getHWType(); + m_dmrNetModeHang = m_conf.getDMRNetworkModeHang(); LogInfo("DMR Network Parameters"); LogInfo(" Address: %s", address.c_str()); @@ -919,6 +938,7 @@ bool CMMDVMHost::createDMRNetwork() LogInfo(" Jitter: %ums", jitter); LogInfo(" Slot 1: %s", slot1 ? "enabled" : "disabled"); LogInfo(" Slot 2: %s", slot2 ? "enabled" : "disabled"); + LogInfo(" Mode Hang: %us", m_dmrNetModeHang); m_dmrNetwork = new CDMRNetwork(address, port, local, id, password, m_duplex, VERSION, debug, slot1, slot2, hwType); @@ -971,6 +991,7 @@ bool CMMDVMHost::createYSFNetwork() unsigned int myPort = m_conf.getFusionNetworkMyPort(); std::string gwyAddress = m_conf.getFusionNetworkGwyAddress(); unsigned int gwyPort = m_conf.getFusionNetworkGwyPort(); + m_ysfNetModeHang = m_conf.getFusionNetworkModeHang(); bool debug = m_conf.getFusionNetworkDebug(); LogInfo("System Fusion Network Parameters"); @@ -978,6 +999,7 @@ bool CMMDVMHost::createYSFNetwork() LogInfo(" Local Port: %u", myPort); LogInfo(" Gateway Address: %s", gwyAddress.c_str()); LogInfo(" Gateway Port: %u", gwyPort); + LogInfo(" Mode Hang: %us", m_ysfNetModeHang); m_ysfNetwork = new CYSFNetwork(myAddress, myPort, gwyAddress, gwyPort, m_callsign, debug); @@ -998,12 +1020,14 @@ bool CMMDVMHost::createP25Network() std::string gatewayAddress = m_conf.getP25GatewayAddress(); unsigned int gatewayPort = m_conf.getP25GatewayPort(); unsigned int localPort = m_conf.getP25LocalPort(); + m_p25NetModeHang = m_conf.getP25NetworkModeHang(); bool debug = m_conf.getP25NetworkDebug(); LogInfo("P25 Network Parameters"); LogInfo(" Gateway Address: %s", gatewayAddress.c_str()); LogInfo(" Gateway Port: %u", gatewayPort); LogInfo(" Local Port: %u", localPort); + LogInfo(" Mode Hang: %us", m_p25NetModeHang); m_p25Network = new CP25Network(gatewayAddress, gatewayPort, localPort, debug); @@ -1030,16 +1054,11 @@ void CMMDVMHost::readParams() m_id = m_conf.getId(); m_timeout = m_conf.getTimeout(); - m_rfModeHang = m_conf.getRFModeHang(); - m_netModeHang = m_conf.getNetModeHang(); - LogInfo("General Parameters"); LogInfo(" Callsign: %s", m_callsign.c_str()); LogInfo(" Id: %u", m_id); LogInfo(" Duplex: %s", m_duplex ? "yes" : "no"); LogInfo(" Timeout: %us", m_timeout); - LogInfo(" RF Mode Hang: %us", m_rfModeHang); - LogInfo(" Net Mode Hang: %us", m_netModeHang); LogInfo(" D-Star: %s", m_dstarEnabled ? "enabled" : "disabled"); LogInfo(" DMR: %s", m_dmrEnabled ? "enabled" : "disabled"); LogInfo(" YSF: %s", m_ysfEnabled ? "enabled" : "disabled"); diff --git a/MMDVMHost.h b/MMDVMHost.h index 6609d02..190a805 100644 --- a/MMDVMHost.h +++ b/MMDVMHost.h @@ -50,8 +50,14 @@ private: CDisplay* m_display; CUMP* m_ump; unsigned char m_mode; - unsigned int m_rfModeHang; - unsigned int m_netModeHang; + unsigned int m_dstarRFModeHang; + unsigned int m_dmrRFModeHang; + unsigned int m_ysfRFModeHang; + unsigned int m_p25RFModeHang; + unsigned int m_dstarNetModeHang; + unsigned int m_dmrNetModeHang; + unsigned int m_ysfNetModeHang; + unsigned int m_p25NetModeHang; CTimer m_modeTimer; CTimer m_dmrTXTimer; CTimer m_cwIdTimer;