Add the P25 and NXDN transmit hang timer settings.

This commit is contained in:
Jonathan Naylor
2020-05-06 17:10:23 +01:00
parent 7718676928
commit d6b367b8b5
7 changed files with 68 additions and 18 deletions

View File

@@ -163,12 +163,14 @@ m_p25NAC(0x293U),
m_p25SelfOnly(false), m_p25SelfOnly(false),
m_p25OverrideUID(false), m_p25OverrideUID(false),
m_p25RemoteGateway(false), m_p25RemoteGateway(false),
m_p25TXHang(5U),
m_p25ModeHang(10U), m_p25ModeHang(10U),
m_nxdnEnabled(false), m_nxdnEnabled(false),
m_nxdnId(0U), m_nxdnId(0U),
m_nxdnRAN(1U), m_nxdnRAN(1U),
m_nxdnSelfOnly(false), m_nxdnSelfOnly(false),
m_nxdnRemoteGateway(false), m_nxdnRemoteGateway(false),
m_nxdnTXHang(5U),
m_nxdnModeHang(10U), m_nxdnModeHang(10U),
m_pocsagEnabled(false), m_pocsagEnabled(false),
m_pocsagFrequency(0U), m_pocsagFrequency(0U),
@@ -671,6 +673,8 @@ bool CConf::read()
m_p25SelfOnly = ::atoi(value) == 1; m_p25SelfOnly = ::atoi(value) == 1;
else if (::strcmp(key, "RemoteGateway") == 0) else if (::strcmp(key, "RemoteGateway") == 0)
m_p25RemoteGateway = ::atoi(value) == 1; m_p25RemoteGateway = ::atoi(value) == 1;
else if (::strcmp(key, "TXHang") == 0)
m_p25TXHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "ModeHang") == 0) else if (::strcmp(key, "ModeHang") == 0)
m_p25ModeHang = (unsigned int)::atoi(value); m_p25ModeHang = (unsigned int)::atoi(value);
} else if (section == SECTION_NXDN) { } else if (section == SECTION_NXDN) {
@@ -684,6 +688,8 @@ bool CConf::read()
m_nxdnSelfOnly = ::atoi(value) == 1; m_nxdnSelfOnly = ::atoi(value) == 1;
else if (::strcmp(key, "RemoteGateway") == 0) else if (::strcmp(key, "RemoteGateway") == 0)
m_nxdnRemoteGateway = ::atoi(value) == 1; m_nxdnRemoteGateway = ::atoi(value) == 1;
else if (::strcmp(key, "TXHang") == 0)
m_nxdnTXHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "ModeHang") == 0) else if (::strcmp(key, "ModeHang") == 0)
m_nxdnModeHang = (unsigned int)::atoi(value); m_nxdnModeHang = (unsigned int)::atoi(value);
} else if (section == SECTION_POCSAG) { } else if (section == SECTION_POCSAG) {
@@ -1450,6 +1456,11 @@ bool CConf::getP25RemoteGateway() const
return m_p25RemoteGateway; return m_p25RemoteGateway;
} }
unsigned int CConf::getP25TXHang() const
{
return m_p25TXHang;
}
unsigned int CConf::getP25ModeHang() const unsigned int CConf::getP25ModeHang() const
{ {
return m_p25ModeHang; return m_p25ModeHang;
@@ -1480,6 +1491,11 @@ bool CConf::getNXDNRemoteGateway() const
return m_nxdnRemoteGateway; return m_nxdnRemoteGateway;
} }
unsigned int CConf::getNXDNTXHang() const
{
return m_nxdnTXHang;
}
unsigned int CConf::getNXDNModeHang() const unsigned int CConf::getNXDNModeHang() const
{ {
return m_nxdnModeHang; return m_nxdnModeHang;

4
Conf.h
View File

@@ -155,6 +155,7 @@ public:
bool getP25SelfOnly() const; bool getP25SelfOnly() const;
bool getP25OverrideUID() const; bool getP25OverrideUID() const;
bool getP25RemoteGateway() const; bool getP25RemoteGateway() const;
unsigned int getP25TXHang() const;
unsigned int getP25ModeHang() const; unsigned int getP25ModeHang() const;
// The NXDN section // The NXDN section
@@ -163,6 +164,7 @@ public:
unsigned int getNXDNRAN() const; unsigned int getNXDNRAN() const;
bool getNXDNSelfOnly() const; bool getNXDNSelfOnly() const;
bool getNXDNRemoteGateway() const; bool getNXDNRemoteGateway() const;
unsigned int getNXDNTXHang() const;
unsigned int getNXDNModeHang() const; unsigned int getNXDNModeHang() const;
// The POCSAG section // The POCSAG section
@@ -423,6 +425,7 @@ private:
bool m_p25SelfOnly; bool m_p25SelfOnly;
bool m_p25OverrideUID; bool m_p25OverrideUID;
bool m_p25RemoteGateway; bool m_p25RemoteGateway;
unsigned int m_p25TXHang;
unsigned int m_p25ModeHang; unsigned int m_p25ModeHang;
bool m_nxdnEnabled; bool m_nxdnEnabled;
@@ -430,6 +433,7 @@ private:
unsigned int m_nxdnRAN; unsigned int m_nxdnRAN;
bool m_nxdnSelfOnly; bool m_nxdnSelfOnly;
bool m_nxdnRemoteGateway; bool m_nxdnRemoteGateway;
unsigned int m_nxdnTXHang;
unsigned int m_nxdnModeHang; unsigned int m_nxdnModeHang;
bool m_pocsagEnabled; bool m_pocsagEnabled;

View File

@@ -126,6 +126,7 @@ NAC=293
SelfOnly=0 SelfOnly=0
OverrideUIDCheck=0 OverrideUIDCheck=0
RemoteGateway=0 RemoteGateway=0
TXHang=5
# ModeHang=10 # ModeHang=10
[NXDN] [NXDN]
@@ -133,6 +134,7 @@ Enable=1
RAN=1 RAN=1
SelfOnly=0 SelfOnly=0
RemoteGateway=0 RemoteGateway=0
TXHang=5
# ModeHang=10 # ModeHang=10
[POCSAG] [POCSAG]

View File

@@ -549,6 +549,7 @@ int CMMDVMHost::run()
if (m_p25Enabled) { if (m_p25Enabled) {
unsigned int id = m_conf.getP25Id(); unsigned int id = m_conf.getP25Id();
unsigned int nac = m_conf.getP25NAC(); unsigned int nac = m_conf.getP25NAC();
unsigned int txHang = m_conf.getP25TXHang();
bool uidOverride = m_conf.getP25OverrideUID(); bool uidOverride = m_conf.getP25OverrideUID();
bool selfOnly = m_conf.getP25SelfOnly(); bool selfOnly = m_conf.getP25SelfOnly();
bool remoteGateway = m_conf.getP25RemoteGateway(); bool remoteGateway = m_conf.getP25RemoteGateway();
@@ -560,6 +561,7 @@ int CMMDVMHost::run()
LogInfo(" UID Override: %s", uidOverride ? "yes" : "no"); LogInfo(" UID Override: %s", uidOverride ? "yes" : "no");
LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no");
LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no");
LogInfo(" TX Hang: %us", txHang);
LogInfo(" Mode Hang: %us", m_p25RFModeHang); 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); m_p25 = new CP25Control(nac, id, selfOnly, uidOverride, m_p25Network, m_display, m_timeout, m_duplex, m_dmrLookup, remoteGateway, rssi);
@@ -581,6 +583,7 @@ int CMMDVMHost::run()
unsigned int ran = m_conf.getNXDNRAN(); unsigned int ran = m_conf.getNXDNRAN();
bool selfOnly = m_conf.getNXDNSelfOnly(); bool selfOnly = m_conf.getNXDNSelfOnly();
bool remoteGateway = m_conf.getNXDNRemoteGateway(); bool remoteGateway = m_conf.getNXDNRemoteGateway();
unsigned int txHang = m_conf.getNXDNTXHang();
m_nxdnRFModeHang = m_conf.getNXDNModeHang(); m_nxdnRFModeHang = m_conf.getNXDNModeHang();
LogInfo("NXDN RF Parameters"); LogInfo("NXDN RF Parameters");
@@ -588,6 +591,7 @@ int CMMDVMHost::run()
LogInfo(" RAN: %u", ran); LogInfo(" RAN: %u", ran);
LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no");
LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no");
LogInfo(" TX Hang: %us", txHang);
LogInfo(" Mode Hang: %us", m_nxdnRFModeHang); 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); m_nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_display, m_timeout, m_duplex, remoteGateway, m_nxdnLookup, rssi);
@@ -1161,7 +1165,9 @@ bool CMMDVMHost::createModem()
bool debug = m_conf.getModemDebug(); bool debug = m_conf.getModemDebug();
unsigned int colorCode = m_conf.getDMRColorCode(); unsigned int colorCode = m_conf.getDMRColorCode();
bool lowDeviation = m_conf.getFusionLowDeviation(); 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 rxFrequency = m_conf.getRXFrequency();
unsigned int txFrequency = m_conf.getTXFrequency(); unsigned int txFrequency = m_conf.getTXFrequency();
unsigned int pocsagFrequency = m_conf.getPOCSAGFrequency(); unsigned int pocsagFrequency = m_conf.getPOCSAGFrequency();
@@ -1203,7 +1209,9 @@ bool CMMDVMHost::createModem()
m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel, fmTXLevel); 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->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset, rfLevel, pocsagFrequency);
m_modem->setDMRParams(colorCode); 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) { if (m_fmEnabled) {
std::string callsign = m_conf.getFMCallsign(); std::string callsign = m_conf.getFMCallsign();

View File

@@ -104,6 +104,8 @@ m_port(port),
m_dmrColorCode(0U), m_dmrColorCode(0U),
m_ysfLoDev(false), m_ysfLoDev(false),
m_ysfTXHang(4U), m_ysfTXHang(4U),
m_p25TXHang(5U),
m_nxdnTXHang(5U),
m_duplex(duplex), m_duplex(duplex),
m_rxInvert(rxInvert), m_rxInvert(rxInvert),
m_txInvert(txInvert), m_txInvert(txInvert),
@@ -262,6 +264,16 @@ void CModem::setYSFParams(bool loDev, unsigned int txHang)
m_ysfTXHang = 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) void CModem::setTransparentDataParams(unsigned int sendFrameType)
{ {
m_sendTransparentDataFrameType = sendFrameType; m_sendTransparentDataFrameType = sendFrameType;
@@ -1499,7 +1511,7 @@ bool CModem::setConfig()
buffer[0U] = MMDVM_FRAME_START; buffer[0U] = MMDVM_FRAME_START;
buffer[1U] = 22U; buffer[1U] = 24U;
buffer[2U] = MMDVM_SET_CONFIG; buffer[2U] = MMDVM_SET_CONFIG;
@@ -1563,10 +1575,14 @@ bool CModem::setConfig()
buffer[21U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F); 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); buffer[23U] = (unsigned char)m_nxdnTXHang;
if (ret != 22)
// CUtils::dump(1U, "Written", buffer, 24U);
int ret = m_serial->write(buffer, 24U);
if (ret != 24)
return false; return false;
unsigned int count = 0U; unsigned int count = 0U;

View File

@@ -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 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 setDMRParams(unsigned int colorCode);
virtual void setYSFParams(bool loDev, unsigned int txHang); 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 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); 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);
@@ -117,6 +119,8 @@ private:
unsigned int m_dmrColorCode; unsigned int m_dmrColorCode;
bool m_ysfLoDev; bool m_ysfLoDev;
unsigned int m_ysfTXHang; unsigned int m_ysfTXHang;
unsigned int m_p25TXHang;
unsigned int m_nxdnTXHang;
bool m_duplex; bool m_duplex;
bool m_rxInvert; bool m_rxInvert;
bool m_txInvert; bool m_txInvert;

View File

@@ -19,6 +19,6 @@
#if !defined(VERSION_H) #if !defined(VERSION_H)
#define VERSION_H #define VERSION_H
const char* VERSION = "20200428"; const char* VERSION = "20200506";
#endif #endif