diff --git a/Conf.cpp b/Conf.cpp index fc0c4c0..ee4034b 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -163,12 +163,14 @@ m_p25NAC(0x293U), m_p25SelfOnly(false), m_p25OverrideUID(false), m_p25RemoteGateway(false), +m_p25TXHang(5U), m_p25ModeHang(10U), m_nxdnEnabled(false), m_nxdnId(0U), m_nxdnRAN(1U), m_nxdnSelfOnly(false), m_nxdnRemoteGateway(false), +m_nxdnTXHang(5U), m_nxdnModeHang(10U), m_pocsagEnabled(false), m_pocsagFrequency(0U), @@ -674,6 +676,8 @@ bool CConf::read() m_p25SelfOnly = ::atoi(value) == 1; else if (::strcmp(key, "RemoteGateway") == 0) m_p25RemoteGateway = ::atoi(value) == 1; + else if (::strcmp(key, "TXHang") == 0) + m_p25TXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_p25ModeHang = (unsigned int)::atoi(value); } else if (section == SECTION_NXDN) { @@ -687,6 +691,8 @@ bool CConf::read() m_nxdnSelfOnly = ::atoi(value) == 1; else if (::strcmp(key, "RemoteGateway") == 0) m_nxdnRemoteGateway = ::atoi(value) == 1; + else if (::strcmp(key, "TXHang") == 0) + m_nxdnTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_nxdnModeHang = (unsigned int)::atoi(value); } else if (section == SECTION_POCSAG) { @@ -1461,6 +1467,11 @@ bool CConf::getP25RemoteGateway() const return m_p25RemoteGateway; } +unsigned int CConf::getP25TXHang() const +{ + return m_p25TXHang; +} + unsigned int CConf::getP25ModeHang() const { return m_p25ModeHang; @@ -1491,6 +1502,11 @@ bool CConf::getNXDNRemoteGateway() const return m_nxdnRemoteGateway; } +unsigned int CConf::getNXDNTXHang() const +{ + return m_nxdnTXHang; +} + unsigned int CConf::getNXDNModeHang() const { return m_nxdnModeHang; diff --git a/Conf.h b/Conf.h index 51f7898..40e81a0 100644 --- a/Conf.h +++ b/Conf.h @@ -155,6 +155,7 @@ public: bool getP25SelfOnly() const; bool getP25OverrideUID() const; bool getP25RemoteGateway() const; + unsigned int getP25TXHang() const; unsigned int getP25ModeHang() const; // The NXDN section @@ -163,6 +164,7 @@ public: unsigned int getNXDNRAN() const; bool getNXDNSelfOnly() const; bool getNXDNRemoteGateway() const; + unsigned int getNXDNTXHang() const; unsigned int getNXDNModeHang() const; // The POCSAG section @@ -426,6 +428,7 @@ private: bool m_p25SelfOnly; bool m_p25OverrideUID; bool m_p25RemoteGateway; + unsigned int m_p25TXHang; unsigned int m_p25ModeHang; bool m_nxdnEnabled; @@ -433,6 +436,7 @@ private: unsigned int m_nxdnRAN; bool m_nxdnSelfOnly; bool m_nxdnRemoteGateway; + unsigned int m_nxdnTXHang; unsigned int m_nxdnModeHang; bool m_pocsagEnabled; diff --git a/MMDVM.ini b/MMDVM.ini index 8a89cd5..12f2b73 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -126,6 +126,7 @@ NAC=293 SelfOnly=0 OverrideUIDCheck=0 RemoteGateway=0 +TXHang=5 # ModeHang=10 [NXDN] @@ -133,6 +134,7 @@ Enable=1 RAN=1 SelfOnly=0 RemoteGateway=0 +TXHang=5 # ModeHang=10 [POCSAG] diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 1c32ad6..f4967f3 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -550,12 +550,13 @@ int CMMDVMHost::run() } if (m_p25Enabled) { - unsigned int id = m_conf.getP25Id(); - unsigned int nac = m_conf.getP25NAC(); - bool uidOverride = m_conf.getP25OverrideUID(); - bool selfOnly = m_conf.getP25SelfOnly(); - bool remoteGateway = m_conf.getP25RemoteGateway(); - m_p25RFModeHang = m_conf.getP25ModeHang(); + unsigned int id = m_conf.getP25Id(); + unsigned int nac = m_conf.getP25NAC(); + unsigned int txHang = m_conf.getP25TXHang(); + bool uidOverride = m_conf.getP25OverrideUID(); + bool selfOnly = m_conf.getP25SelfOnly(); + bool remoteGateway = m_conf.getP25RemoteGateway(); + m_p25RFModeHang = m_conf.getP25ModeHang(); LogInfo("P25 RF Parameters"); LogInfo(" Id: %u", id); @@ -563,6 +564,7 @@ int CMMDVMHost::run() LogInfo(" UID Override: %s", uidOverride ? "yes" : "no"); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); + LogInfo(" TX Hang: %us", txHang); LogInfo(" Mode Hang: %us", m_p25RFModeHang); m_p25 = new CP25Control(nac, id, selfOnly, uidOverride, m_p25Network, m_display, m_timeout, m_duplex, m_dmrLookup, remoteGateway, rssi); @@ -580,17 +582,19 @@ int CMMDVMHost::run() m_nxdnLookup = new CNXDNLookup(lookupFile, reloadTime); m_nxdnLookup->read(); - unsigned int id = m_conf.getNXDNId(); - unsigned int ran = m_conf.getNXDNRAN(); - bool selfOnly = m_conf.getNXDNSelfOnly(); - bool remoteGateway = m_conf.getNXDNRemoteGateway(); - m_nxdnRFModeHang = m_conf.getNXDNModeHang(); + unsigned int id = m_conf.getNXDNId(); + unsigned int ran = m_conf.getNXDNRAN(); + bool selfOnly = m_conf.getNXDNSelfOnly(); + bool remoteGateway = m_conf.getNXDNRemoteGateway(); + unsigned int txHang = m_conf.getNXDNTXHang(); + m_nxdnRFModeHang = m_conf.getNXDNModeHang(); LogInfo("NXDN RF Parameters"); LogInfo(" Id: %u", id); LogInfo(" RAN: %u", ran); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); + LogInfo(" TX Hang: %us", txHang); LogInfo(" Mode Hang: %us", m_nxdnRFModeHang); m_nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_display, m_timeout, m_duplex, remoteGateway, m_nxdnLookup, rssi); @@ -1164,7 +1168,9 @@ bool CMMDVMHost::createModem() bool debug = m_conf.getModemDebug(); unsigned int colorCode = m_conf.getDMRColorCode(); bool lowDeviation = m_conf.getFusionLowDeviation(); - unsigned int txHang = m_conf.getFusionTXHang(); + unsigned int ysfTXHang = m_conf.getFusionTXHang(); + unsigned int p25TXHang = m_conf.getP25TXHang(); + unsigned int nxdnTXHang = m_conf.getNXDNTXHang(); unsigned int rxFrequency = m_conf.getRXFrequency(); unsigned int txFrequency = m_conf.getTXFrequency(); unsigned int pocsagFrequency = m_conf.getPOCSAGFrequency(); @@ -1206,7 +1212,9 @@ bool CMMDVMHost::createModem() m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel, fmTXLevel); m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset, rfLevel, pocsagFrequency); m_modem->setDMRParams(colorCode); - m_modem->setYSFParams(lowDeviation, txHang); + m_modem->setYSFParams(lowDeviation, ysfTXHang); + m_modem->setP25Params(p25TXHang); + m_modem->setNXDNParams(nxdnTXHang); if (m_fmEnabled) { std::string callsign = m_conf.getFMCallsign(); diff --git a/Modem.cpp b/Modem.cpp index d913c6a..93319be 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -104,6 +104,8 @@ m_port(port), m_dmrColorCode(0U), m_ysfLoDev(false), m_ysfTXHang(4U), +m_p25TXHang(5U), +m_nxdnTXHang(5U), m_duplex(duplex), m_rxInvert(rxInvert), m_txInvert(txInvert), @@ -265,6 +267,16 @@ void CModem::setYSFParams(bool loDev, unsigned int txHang) m_ysfTXHang = txHang; } +void CModem::setP25Params(unsigned int txHang) +{ + m_p25TXHang = txHang; +} + +void CModem::setNXDNParams(unsigned int txHang) +{ + m_nxdnTXHang = txHang; +} + void CModem::setTransparentDataParams(unsigned int sendFrameType) { m_sendTransparentDataFrameType = sendFrameType; @@ -1507,7 +1519,7 @@ bool CModem::setConfig() buffer[0U] = MMDVM_FRAME_START; - buffer[1U] = 22U; + buffer[1U] = 24U; buffer[2U] = MMDVM_SET_CONFIG; @@ -1571,10 +1583,14 @@ bool CModem::setConfig() buffer[21U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F); - // CUtils::dump(1U, "Written", buffer, 22U); + buffer[22U] = (unsigned char)m_p25TXHang; - int ret = m_serial->write(buffer, 22U); - if (ret != 22) + buffer[23U] = (unsigned char)m_nxdnTXHang; + + // CUtils::dump(1U, "Written", buffer, 24U); + + int ret = m_serial->write(buffer, 24U); + if (ret != 24) return false; unsigned int count = 0U; diff --git a/Modem.h b/Modem.h index 495718f..069fe46 100644 --- a/Modem.h +++ b/Modem.h @@ -43,6 +43,8 @@ public: virtual void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel, float fmTXLevel); virtual void setDMRParams(unsigned int colorCode); virtual void setYSFParams(bool loDev, unsigned int txHang); + virtual void setP25Params(unsigned int txHang); + virtual void setNXDNParams(unsigned int txHang); virtual void setTransparentDataParams(unsigned int sendFrameType); virtual void setFMCallsignParams(const std::string& callsign, unsigned int callsignSpeed, unsigned int callsignFrequency, unsigned int callsignTime, unsigned int callsignHoldoff, float callsignHighLevel, float callsignLowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch); @@ -118,6 +120,8 @@ private: unsigned int m_dmrColorCode; bool m_ysfLoDev; unsigned int m_ysfTXHang; + unsigned int m_p25TXHang; + unsigned int m_nxdnTXHang; bool m_duplex; bool m_rxInvert; bool m_txInvert;