Merge branch 'master' into AX25_FM

This commit is contained in:
Jonathan Naylor
2020-07-15 12:15:07 +01:00
9 changed files with 474 additions and 30 deletions

455
Conf.cpp
View File

@@ -117,6 +117,7 @@ m_modemPOCSAGTXLevel(50.0F),
m_modemFMTXLevel(50.0F), m_modemFMTXLevel(50.0F),
m_modemAX25TXLevel(50.0F), m_modemAX25TXLevel(50.0F),
m_modemRSSIMappingFile(), m_modemRSSIMappingFile(),
m_modemUseCOSAsLockout(false),
m_modemTrace(false), m_modemTrace(false),
m_modemDebug(false), m_modemDebug(false),
m_transparentEnabled(false), m_transparentEnabled(false),
@@ -205,7 +206,7 @@ m_fmCTCSSLowThreshold(20U),
m_fmCTCSSLevel(2.0F), m_fmCTCSSLevel(2.0F),
m_fmKerchunkTime(0U), m_fmKerchunkTime(0U),
m_fmHangTime(7U), m_fmHangTime(7U),
m_fmUseCOS(true), m_fmAccessMode(1U),
m_fmCOSInvert(false), m_fmCOSInvert(false),
m_fmRFAudioBoost(1U), m_fmRFAudioBoost(1U),
m_fmMaxDevLevel(90.0F), m_fmMaxDevLevel(90.0F),
@@ -437,12 +438,12 @@ bool CConf::read()
else if (::strcmp(key, "Duplex") == 0) else if (::strcmp(key, "Duplex") == 0)
m_duplex = ::atoi(value) == 1; m_duplex = ::atoi(value) == 1;
else if (::strcmp(key, "ModeHang") == 0) else if (::strcmp(key, "ModeHang") == 0)
m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = m_nxdnNetworkModeHang = m_fmNetworkModeHang =
m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = (unsigned int)::atoi(value); m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = m_nxdnModeHang = m_fmModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "RFModeHang") == 0) else if (::strcmp(key, "RFModeHang") == 0)
m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = (unsigned int)::atoi(value); m_dstarModeHang = m_dmrModeHang = m_fusionModeHang = m_p25ModeHang = m_nxdnModeHang = m_fmModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "NetModeHang") == 0) else if (::strcmp(key, "NetModeHang") == 0)
m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = (unsigned int)::atoi(value); m_dstarNetworkModeHang = m_dmrNetworkModeHang = m_fusionNetworkModeHang = m_p25NetworkModeHang = m_nxdnNetworkModeHang = m_fmNetworkModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "Display") == 0) else if (::strcmp(key, "Display") == 0)
m_display = value; m_display = value;
else if (::strcmp(key, "Daemon") == 0) else if (::strcmp(key, "Daemon") == 0)
@@ -496,6 +497,181 @@ bool CConf::read()
m_nxdnIdLookupFile = value; m_nxdnIdLookupFile = value;
else if (::strcmp(key, "Time") == 0) else if (::strcmp(key, "Time") == 0)
m_nxdnIdLookupTime = (unsigned int)::atoi(value); m_nxdnIdLookupTime = (unsigned int)::atoi(value);
} else if (section == SECTION_MODEM) {
if (::strcmp(key, "Port") == 0)
m_modemPort = value;
else if (::strcmp(key, "Protocol") == 0)
m_modemProtocol = value;
else if (::strcmp(key, "Address") == 0)
m_modemAddress = (unsigned int)::strtoul(value, NULL, 16);
else if (::strcmp(key, "RXInvert") == 0)
m_modemRXInvert = ::atoi(value) == 1;
else if (::strcmp(key, "TXInvert") == 0)
m_modemTXInvert = ::atoi(value) == 1;
else if (::strcmp(key, "PTTInvert") == 0)
m_modemPTTInvert = ::atoi(value) == 1;
else if (::strcmp(key, "TXDelay") == 0)
m_modemTXDelay = (unsigned int)::atoi(value);
else if (::strcmp(key, "DMRDelay") == 0)
m_modemDMRDelay = (unsigned int)::atoi(value);
else if (::strcmp(key, "RXOffset") == 0)
m_modemRXOffset = ::atoi(value);
else if (::strcmp(key, "TXOffset") == 0)
m_modemTXOffset = ::atoi(value);
else if (::strcmp(key, "RXDCOffset") == 0)
m_modemRXDCOffset = ::atoi(value);
else if (::strcmp(key, "TXDCOffset") == 0)
m_modemTXDCOffset = ::atoi(value);
else if (::strcmp(key, "RFLevel") == 0)
m_modemRFLevel = float(::atof(value));
else if (::strcmp(key, "RXLevel") == 0)
m_modemRXLevel = float(::atof(value));
else if (::strcmp(key, "TXLevel") == 0)
m_modemAX25TXLevel = m_modemFMTXLevel = m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = float(::atof(value));
else if (::strcmp(key, "CWIdTXLevel") == 0)
m_modemCWIdTXLevel = float(::atof(value));
else if (::strcmp(key, "D-StarTXLevel") == 0)
m_modemDStarTXLevel = float(::atof(value));
else if (::strcmp(key, "DMRTXLevel") == 0)
m_modemDMRTXLevel = float(::atof(value));
else if (::strcmp(key, "YSFTXLevel") == 0)
m_modemYSFTXLevel = float(::atof(value));
else if (::strcmp(key, "P25TXLevel") == 0)
m_modemP25TXLevel = float(::atof(value));
else if (::strcmp(key, "NXDNTXLevel") == 0)
m_modemNXDNTXLevel = float(::atof(value));
else if (::strcmp(key, "POCSAGTXLevel") == 0)
m_modemPOCSAGTXLevel = float(::atof(value));
else if (::strcmp(key, "FMTXLevel") == 0)
m_modemFMTXLevel = float(::atof(value));
else if (::strcmp(key, "RSSIMappingFile") == 0)
m_modemRSSIMappingFile = value;
else if (::strcmp(key, "UseCOSAsLockout") == 0)
m_modemUseCOSAsLockout = ::atoi(value) == 1;
else if (::strcmp(key, "Trace") == 0)
m_modemTrace = ::atoi(value) == 1;
else if (::strcmp(key, "Debug") == 0)
m_modemDebug = ::atoi(value) == 1;
} else if (section == SECTION_TRANSPARENT) {
if (::strcmp(key, "Enable") == 0)
m_transparentEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "RemoteAddress") == 0)
m_transparentRemoteAddress = value;
else if (::strcmp(key, "RemotePort") == 0)
m_transparentRemotePort = (unsigned int)::atoi(value);
else if (::strcmp(key, "LocalPort") == 0)
m_transparentLocalPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "SendFrameType") == 0)
m_transparentSendFrameType = (unsigned int)::atoi(value);
} else if (section == SECTION_UMP) {
if (::strcmp(key, "Enable") == 0)
m_umpEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Port") == 0)
m_umpPort = value;
} else if (section == SECTION_DSTAR) {
if (::strcmp(key, "Enable") == 0)
m_dstarEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Module") == 0) {
// Convert the module to upper case
for (unsigned int i = 0U; value[i] != 0; i++)
value[i] = ::toupper(value[i]);
m_dstarModule = value;
} else if (::strcmp(key, "SelfOnly") == 0)
m_dstarSelfOnly = ::atoi(value) == 1;
else if (::strcmp(key, "BlackList") == 0) {
char* p = ::strtok(value, ",\r\n");
while (p != NULL) {
if (::strlen(p) > 0U) {
for (unsigned int i = 0U; p[i] != 0; i++)
p[i] = ::toupper(p[i]);
std::string callsign = std::string(p);
callsign.resize(DSTAR_LONG_CALLSIGN_LENGTH, ' ');
m_dstarBlackList.push_back(callsign);
}
p = ::strtok(NULL, ",\r\n");
}
} else if (::strcmp(key, "AckReply") == 0)
m_dstarAckReply = ::atoi(value) == 1;
else if (::strcmp(key, "AckTime") == 0)
m_dstarAckTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "AckMessage") == 0)
m_dstarAckMessage = ::atoi(value) == 1;
else if (::strcmp(key, "ErrorReply") == 0)
m_dstarErrorReply = ::atoi(value) == 1;
else if (::strcmp(key, "RemoteGateway") == 0)
m_dstarRemoteGateway = ::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;
else if (::strcmp(key, "Beacons") == 0)
m_dmrBeacons = ::atoi(value) == 1 ? DMR_BEACONS_NETWORK : DMR_BEACONS_OFF;
else if (::strcmp(key, "BeaconInterval") == 0) {
m_dmrBeacons = m_dmrBeacons != DMR_BEACONS_OFF ? DMR_BEACONS_TIMED : DMR_BEACONS_OFF;
m_dmrBeaconInterval = (unsigned int)::atoi(value);
} else if (::strcmp(key, "BeaconDuration") == 0)
m_dmrBeaconDuration = (unsigned int)::atoi(value);
else if (::strcmp(key, "Id") == 0)
m_dmrId = (unsigned int)::atoi(value);
else if (::strcmp(key, "ColorCode") == 0)
m_dmrColorCode = (unsigned int)::atoi(value);
else if (::strcmp(key, "SelfOnly") == 0)
m_dmrSelfOnly = ::atoi(value) == 1;
else if (::strcmp(key, "EmbeddedLCOnly") == 0)
m_dmrEmbeddedLCOnly = ::atoi(value) == 1;
else if (::strcmp(key, "DumpTAData") == 0)
m_dmrDumpTAData = ::atoi(value) == 1;
else if (::strcmp(key, "Prefixes") == 0) {
char* p = ::strtok(value, ",\r\n");
while (p != NULL) {
unsigned int prefix = (unsigned int)::atoi(p);
if (prefix > 0U && prefix <= 999U)
m_dmrPrefixes.push_back(prefix);
p = ::strtok(NULL, ",\r\n");
}
} else if (::strcmp(key, "BlackList") == 0) {
char* p = ::strtok(value, ",\r\n");
while (p != NULL) {
unsigned int id = (unsigned int)::atoi(p);
if (id > 0U)
m_dmrBlackList.push_back(id);
p = ::strtok(NULL, ",\r\n");
}
} else if (::strcmp(key, "WhiteList") == 0) {
char* p = ::strtok(value, ",\r\n");
while (p != NULL) {
unsigned int id = (unsigned int)::atoi(p);
if (id > 0U)
m_dmrWhiteList.push_back(id);
p = ::strtok(NULL, ",\r\n");
}
} else if (::strcmp(key, "Slot1TGWhiteList") == 0) {
char* p = ::strtok(value, ",\r\n");
while (p != NULL) {
unsigned int id = (unsigned int)::atoi(p);
if (id > 0U)
m_dmrSlot1TGWhiteList.push_back(id);
p = ::strtok(NULL, ",\r\n");
}
} else if (::strcmp(key, "Slot2TGWhiteList") == 0) {
char* p = ::strtok(value, ",\r\n");
while (p != NULL) {
unsigned int id = (unsigned int)::atoi(p);
if (id > 0U)
m_dmrSlot2TGWhiteList.push_back(id);
p = ::strtok(NULL, ",\r\n");
}
} else if (section == SECTION_DMRID_LOOKUP) {
if (::strcmp(key, "File") == 0)
m_dmrIdLookupFile = value;
else if (::strcmp(key, "Time") == 0)
m_dmrIdLookupTime = (unsigned int)::atoi(value);
} else if (section == SECTION_NXDNID_LOOKUP) {
if (::strcmp(key, "File") == 0)
m_nxdnIdLookupFile = value;
else if (::strcmp(key, "Time") == 0)
m_nxdnIdLookupTime = (unsigned int)::atoi(value);
} else if (section == SECTION_MODEM) { } else if (section == SECTION_MODEM) {
if (::strcmp(key, "Port") == 0) if (::strcmp(key, "Port") == 0)
m_modemPort = value; m_modemPort = value;
@@ -802,8 +978,8 @@ bool CConf::read()
m_fmKerchunkTime = (unsigned int)::atoi(value); m_fmKerchunkTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "HangTime") == 0) else if (::strcmp(key, "HangTime") == 0)
m_fmHangTime = (unsigned int)::atoi(value); m_fmHangTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "UseCOS") == 0) else if (::strcmp(key, "AccessMode") == 0)
m_fmUseCOS = ::atoi(value) == 1; m_fmAccessMode = ::atoi(value);
else if (::strcmp(key, "COSInvert") == 0) else if (::strcmp(key, "COSInvert") == 0)
m_fmCOSInvert = ::atoi(value) == 1; m_fmCOSInvert = ::atoi(value) == 1;
else if (::strcmp(key, "RFAudioBoost") == 0) else if (::strcmp(key, "RFAudioBoost") == 0)
@@ -976,6 +1152,262 @@ bool CConf::read()
m_hd44780Pins.push_back(pin); m_hd44780Pins.push_back(pin);
p = ::strtok(NULL, ",\r\n"); p = ::strtok(NULL, ",\r\n");
} }
} else if (section == SECTION_FUSION) {
if (::strcmp(key, "Enable") == 0)
m_fusionEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "LowDeviation") == 0)
m_fusionLowDeviation = ::atoi(value) == 1;
else if (::strcmp(key, "DGID") == 0) {
m_fusionDGIdEnabled = true;
m_fusionDGId = (unsigned int)::atoi(value);
} else if (::strcmp(key, "RemoteGateway") == 0)
m_fusionRemoteGateway = ::atoi(value) == 1;
else if (::strcmp(key, "SelfOnly") == 0)
m_fusionSelfOnly = ::atoi(value) == 1;
else if (::strcmp(key, "TXHang") == 0)
m_fusionTXHang = (unsigned int)::atoi(value);
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;
else if (::strcmp(key, "Id") == 0)
m_p25Id = (unsigned int)::atoi(value);
else if (::strcmp(key, "NAC") == 0)
m_p25NAC = (unsigned int)::strtoul(value, NULL, 16);
else if (::strcmp(key, "OverrideUIDCheck") == 0)
m_p25OverrideUID = ::atoi(value) == 1;
else if (::strcmp(key, "SelfOnly") == 0)
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) {
if (::strcmp(key, "Enable") == 0)
m_nxdnEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Id") == 0)
m_nxdnId = (unsigned int)::atoi(value);
else if (::strcmp(key, "RAN") == 0)
m_nxdnRAN = (unsigned int)::atoi(value);
else if (::strcmp(key, "SelfOnly") == 0)
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) {
if (::strcmp(key, "Enable") == 0)
m_pocsagEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Frequency") == 0)
m_pocsagFrequency = (unsigned int)::atoi(value);
}
else if (section == SECTION_FM) {
if (::strcmp(key, "Enable") == 0)
m_fmEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Callsign") == 0) {
// Convert the callsign to upper case
for (unsigned int i = 0U; value[i] != 0; i++)
value[i] = ::toupper(value[i]);
m_fmCallsign = value;
} else if (::strcmp(key, "CallsignSpeed") == 0)
m_fmCallsignSpeed = (unsigned int)::atoi(value);
else if (::strcmp(key, "CallsignFrequency") == 0)
m_fmCallsignFrequency = (unsigned int)::atoi(value);
else if (::strcmp(key, "CallsignTime") == 0)
m_fmCallsignTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "CallsignHoldoff") == 0)
m_fmCallsignHoldoff = (unsigned int)::atoi(value);
else if (::strcmp(key, "CallsignHighLevel") == 0)
m_fmCallsignHighLevel = float(::atof(value));
else if (::strcmp(key, "CallsignLowLevel") == 0)
m_fmCallsignLowLevel = float(::atof(value));
else if (::strcmp(key, "CallsignAtStart") == 0)
m_fmCallsignAtStart = ::atoi(value) == 1;
else if (::strcmp(key, "CallsignAtEnd") == 0)
m_fmCallsignAtEnd = ::atoi(value) == 1;
else if (::strcmp(key, "CallsignAtLatch") == 0)
m_fmCallsignAtLatch = ::atoi(value) == 1;
else if (::strcmp(key, "RFAck") == 0) {
// Convert the ack to upper case
for (unsigned int i = 0U; value[i] != 0; i++)
value[i] = ::toupper(value[i]);
m_fmRFAck = value;
} else if (::strcmp(key, "ExtAck") == 0) {
// Convert the ack to upper case
for (unsigned int i = 0U; value[i] != 0; i++)
value[i] = ::toupper(value[i]);
m_fmExtAck = value;
} else if (::strcmp(key, "AckSpeed") == 0)
m_fmAckSpeed = (unsigned int)::atoi(value);
else if (::strcmp(key, "AckFrequency") == 0)
m_fmAckFrequency = (unsigned int)::atoi(value);
else if (::strcmp(key, "AckMinTime") == 0)
m_fmAckMinTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "AckDelay") == 0)
m_fmAckDelay = (unsigned int)::atoi(value);
else if (::strcmp(key, "AckLevel") == 0)
m_fmAckLevel = float(::atof(value));
else if (::strcmp(key, "Timeout") == 0)
m_fmTimeout = (unsigned int)::atoi(value);
else if (::strcmp(key, "TimeoutLevel") == 0)
m_fmTimeoutLevel = float(::atof(value));
else if (::strcmp(key, "CTCSSFrequency") == 0)
m_fmCTCSSFrequency = float(::atof(value));
else if (::strcmp(key, "CTCSSThreshold") == 0)
m_fmCTCSSHighThreshold = m_fmCTCSSLowThreshold = (unsigned int)::atoi(value);
else if (::strcmp(key, "CTCSSHighThreshold") == 0)
m_fmCTCSSHighThreshold = (unsigned int)::atoi(value);
else if (::strcmp(key, "CTCSSLowThreshold") == 0)
m_fmCTCSSLowThreshold = (unsigned int)::atoi(value);
else if (::strcmp(key, "CTCSSLevel") == 0)
m_fmCTCSSLevel = float(::atof(value));
else if (::strcmp(key, "KerchunkTime") == 0)
m_fmKerchunkTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "HangTime") == 0)
m_fmHangTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "AccessMode") == 0)
m_fmAccessMode = (unsigned int)::atoi(value);
else if (::strcmp(key, "COSInvert") == 0)
m_fmCOSInvert = ::atoi(value) == 1;
else if (::strcmp(key, "RFAudioBoost") == 0)
m_fmRFAudioBoost = (unsigned int)::atoi(value);
else if (::strcmp(key, "MaxDevLevel") == 0)
m_fmMaxDevLevel = float(::atof(value));
else if (::strcmp(key, "ExtAudioBoost") == 0)
m_fmExtAudioBoost = (unsigned int)::atoi(value);
} else if (section == SECTION_DSTAR_NETWORK) {
if (::strcmp(key, "Enable") == 0)
m_dstarNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "GatewayAddress") == 0)
m_dstarGatewayAddress = value;
else if (::strcmp(key, "GatewayPort") == 0)
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) {
if (::strcmp(key, "Enable") == 0)
m_dmrNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Address") == 0)
m_dmrNetworkAddress = value;
else if (::strcmp(key, "Port") == 0)
m_dmrNetworkPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "Local") == 0)
m_dmrNetworkLocal = (unsigned int)::atoi(value);
else if (::strcmp(key, "Password") == 0)
m_dmrNetworkPassword = value;
else if (::strcmp(key, "Options") == 0)
m_dmrNetworkOptions = value;
else if (::strcmp(key, "Debug") == 0)
m_dmrNetworkDebug = ::atoi(value) == 1;
else if (::strcmp(key, "Jitter") == 0)
m_dmrNetworkJitter = (unsigned int)::atoi(value);
else if (::strcmp(key, "Slot1") == 0)
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;
else if (::strcmp(key, "LocalAddress") == 0)
m_fusionNetworkMyAddress = value;
else if (::strcmp(key, "LocalPort") == 0)
m_fusionNetworkMyPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "GatewayAddress") == 0)
m_fusionNetworkGatewayAddress = value;
else if (::strcmp(key, "GatewayPort") == 0)
m_fusionNetworkGatewayPort = (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) {
if (::strcmp(key, "Enable") == 0)
m_p25NetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "GatewayAddress") == 0)
m_p25GatewayAddress = value;
else if (::strcmp(key, "GatewayPort") == 0)
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_NXDN_NETWORK) {
if (::strcmp(key, "Enable") == 0)
m_nxdnNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Protocol") == 0)
m_nxdnNetworkProtocol = value;
else if (::strcmp(key, "LocalAddress") == 0)
m_nxdnLocalAddress = value;
else if (::strcmp(key, "LocalPort") == 0)
m_nxdnLocalPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "GatewayAddress") == 0)
m_nxdnGatewayAddress = value;
else if (::strcmp(key, "GatewayPort") == 0)
m_nxdnGatewayPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "ModeHang") == 0)
m_nxdnNetworkModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "Debug") == 0)
m_nxdnNetworkDebug = ::atoi(value) == 1;
} else if (section == SECTION_POCSAG_NETWORK) {
if (::strcmp(key, "Enable") == 0)
m_pocsagNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "LocalAddress") == 0)
m_pocsagLocalAddress = value;
else if (::strcmp(key, "LocalPort") == 0)
m_pocsagLocalPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "GatewayAddress") == 0)
m_pocsagGatewayAddress = value;
else if (::strcmp(key, "GatewayPort") == 0)
m_pocsagGatewayPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "ModeHang") == 0)
m_pocsagNetworkModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "Debug") == 0)
m_pocsagNetworkDebug = ::atoi(value) == 1;
} else if (section == SECTION_TFTSERIAL) {
if (::strcmp(key, "Port") == 0)
m_tftSerialPort = value;
else if (::strcmp(key, "Brightness") == 0)
m_tftSerialBrightness = (unsigned int)::atoi(value);
} else if (section == SECTION_HD44780) {
if (::strcmp(key, "Rows") == 0)
m_hd44780Rows = (unsigned int)::atoi(value);
else if (::strcmp(key, "Columns") == 0)
m_hd44780Columns = (unsigned int)::atoi(value);
else if (::strcmp(key, "I2CAddress") == 0)
m_hd44780i2cAddress = (unsigned int)::strtoul(value, NULL, 16);
else if (::strcmp(key, "PWM") == 0)
m_hd44780PWM = ::atoi(value) == 1;
else if (::strcmp(key, "PWMPin") == 0)
m_hd44780PWMPin = (unsigned int)::atoi(value);
else if (::strcmp(key, "PWMBright") == 0)
m_hd44780PWMBright = (unsigned int)::atoi(value);
else if (::strcmp(key, "PWMDim") == 0)
m_hd44780PWMDim = (unsigned int)::atoi(value);
else if (::strcmp(key, "DisplayClock") == 0)
m_hd44780DisplayClock = ::atoi(value) == 1;
else if (::strcmp(key, "UTC") == 0)
m_hd44780UTC = ::atoi(value) == 1;
else if (::strcmp(key, "Pins") == 0) {
char* p = ::strtok(value, ",\r\n");
while (p != NULL) {
unsigned int pin = (unsigned int)::atoi(p);
m_hd44780Pins.push_back(pin);
p = ::strtok(NULL, ",\r\n");
} }
} else if (section == SECTION_NEXTION) { } else if (section == SECTION_NEXTION) {
if (::strcmp(key, "Port") == 0) if (::strcmp(key, "Port") == 0)
@@ -1298,6 +1730,11 @@ std::string CConf::getModemRSSIMappingFile () const
return m_modemRSSIMappingFile; return m_modemRSSIMappingFile;
} }
bool CConf::getModemUseCOSAsLockout() const
{
return m_modemUseCOSAsLockout;
}
bool CConf::getModemTrace() const bool CConf::getModemTrace() const
{ {
return m_modemTrace; return m_modemTrace;
@@ -1738,9 +2175,9 @@ unsigned int CConf::getFMHangTime() const
return m_fmHangTime; return m_fmHangTime;
} }
bool CConf::getFMUseCOS() const unsigned int CConf::getFMAccessMode() const
{ {
return m_fmUseCOS; return m_fmAccessMode;
} }
bool CConf::getFMCOSInvert() const bool CConf::getFMCOSInvert() const

6
Conf.h
View File

@@ -94,6 +94,7 @@ public:
float getModemFMTXLevel() const; float getModemFMTXLevel() const;
float getModemAX25TXLevel() const; float getModemAX25TXLevel() const;
std::string getModemRSSIMappingFile() const; std::string getModemRSSIMappingFile() const;
bool getModemUseCOSAsLockout() const;
bool getModemTrace() const; bool getModemTrace() const;
bool getModemDebug() const; bool getModemDebug() const;
@@ -208,7 +209,7 @@ public:
float getFMCTCSSLevel() const; float getFMCTCSSLevel() const;
unsigned int getFMKerchunkTime() const; unsigned int getFMKerchunkTime() const;
unsigned int getFMHangTime() const; unsigned int getFMHangTime() const;
bool getFMUseCOS() const; unsigned int getFMAccessMode() const;
bool getFMCOSInvert() const; bool getFMCOSInvert() const;
unsigned int getFMRFAudioBoost() const; unsigned int getFMRFAudioBoost() const;
float getFMMaxDevLevel() const; float getFMMaxDevLevel() const;
@@ -400,6 +401,7 @@ private:
float m_modemFMTXLevel; float m_modemFMTXLevel;
float m_modemAX25TXLevel; float m_modemAX25TXLevel;
std::string m_modemRSSIMappingFile; std::string m_modemRSSIMappingFile;
bool m_modemUseCOSAsLockout;
bool m_modemTrace; bool m_modemTrace;
bool m_modemDebug; bool m_modemDebug;
@@ -497,7 +499,7 @@ private:
float m_fmCTCSSLevel; float m_fmCTCSSLevel;
unsigned int m_fmKerchunkTime; unsigned int m_fmKerchunkTime;
unsigned int m_fmHangTime; unsigned int m_fmHangTime;
bool m_fmUseCOS; unsigned int m_fmAccessMode;
bool m_fmCOSInvert; bool m_fmCOSInvert;
unsigned int m_fmRFAudioBoost; unsigned int m_fmRFAudioBoost;
float m_fmMaxDevLevel; float m_fmMaxDevLevel;

View File

@@ -69,6 +69,7 @@ RFLevel=100
# FMTXLevel=50 # FMTXLevel=50
# AX25TXLevel=50 # AX25TXLevel=50
RSSIMappingFile=RSSI.dat RSSIMappingFile=RSSI.dat
UseCOSAsLockout=0
Trace=0 Trace=0
Debug=0 Debug=0
@@ -171,7 +172,7 @@ CTCSSThreshold=30
CTCSSLevel=20 CTCSSLevel=20
KerchunkTime=0 KerchunkTime=0
HangTime=7 HangTime=7
UseCOS=1 AccessMode=1
COSInvert=0 COSInvert=0
RFAudioBoost=1 RFAudioBoost=1
MaxDevLevel=90 MaxDevLevel=90

View File

@@ -1307,6 +1307,7 @@ bool CMMDVMHost::createModem()
unsigned int ax25TXDelay = m_conf.getAX25TXDelay(); unsigned int ax25TXDelay = m_conf.getAX25TXDelay();
unsigned int ax25SlotTime = m_conf.getAX25SlotTime(); unsigned int ax25SlotTime = m_conf.getAX25SlotTime();
unsigned int ax25PPersist = m_conf.getAX25PPersist(); unsigned int ax25PPersist = m_conf.getAX25PPersist();
bool useCOSAsLockout = m_conf.getModemUseCOSAsLockout();
LogInfo("Modem Parameters"); LogInfo("Modem Parameters");
LogInfo(" Port: %s", port.c_str()); LogInfo(" Port: %s", port.c_str());
@@ -1338,11 +1339,12 @@ bool CMMDVMHost::createModem()
LogInfo(" FM TX Level: %.1f%%", fmTXLevel); LogInfo(" FM TX Level: %.1f%%", fmTXLevel);
LogInfo(" AX.25 TX Level: %.1f%%", ax25TXLevel); LogInfo(" AX.25 TX Level: %.1f%%", ax25TXLevel);
LogInfo(" TX Frequency: %uHz (%uHz)", txFrequency, txFrequency + txOffset); LogInfo(" TX Frequency: %uHz (%uHz)", txFrequency, txFrequency + txOffset);
LogInfo(" Use COS as Lockout: %s", useCOSAsLockout ? "yes" : "no");
if (port == "NullModem") if (port == "NullModem")
m_modem = new CNullModem; m_modem = new CNullModem;
else else
m_modem = new CSerialModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, trace, debug); m_modem = new CSerialModem(port, m_duplex, rxInvert, txInvert, pttInvert, txDelay, dmrDelay, useCOSAsLockout, trace, debug);
m_modem->setSerialParams(protocol, address, speed); m_modem->setSerialParams(protocol, address, speed);
m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_pocsagEnabled, m_fmEnabled, m_ax25Enabled); m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_pocsagEnabled, m_fmEnabled, m_ax25Enabled);
m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel, fmTXLevel, ax25TXLevel); m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, pocsagTXLevel, fmTXLevel, ax25TXLevel);
@@ -1378,7 +1380,7 @@ bool CMMDVMHost::createModem()
float ctcssLevel = m_conf.getFMCTCSSLevel(); float ctcssLevel = m_conf.getFMCTCSSLevel();
unsigned int kerchunkTime = m_conf.getFMKerchunkTime(); unsigned int kerchunkTime = m_conf.getFMKerchunkTime();
unsigned int hangTime = m_conf.getFMHangTime(); unsigned int hangTime = m_conf.getFMHangTime();
bool useCOS = m_conf.getFMUseCOS(); unsigned int accessMode = m_conf.getFMAccessMode();
bool cosInvert = m_conf.getFMCOSInvert(); bool cosInvert = m_conf.getFMCOSInvert();
unsigned int rfAudioBoost = m_conf.getFMRFAudioBoost(); unsigned int rfAudioBoost = m_conf.getFMRFAudioBoost();
float maxDevLevel = m_conf.getFMMaxDevLevel(); float maxDevLevel = m_conf.getFMMaxDevLevel();
@@ -1409,7 +1411,7 @@ bool CMMDVMHost::createModem()
LogInfo(" CTCSS Level: %.1f%%", ctcssLevel); LogInfo(" CTCSS Level: %.1f%%", ctcssLevel);
LogInfo(" Kerchunk Time: %us", kerchunkTime); LogInfo(" Kerchunk Time: %us", kerchunkTime);
LogInfo(" Hang Time: %us", hangTime); LogInfo(" Hang Time: %us", hangTime);
LogInfo(" Use COS: %s", useCOS ? "yes" : "no"); LogInfo(" Access Mode: %u", accessMode);
LogInfo(" COS Invert: %s", cosInvert ? "yes" : "no"); LogInfo(" COS Invert: %s", cosInvert ? "yes" : "no");
LogInfo(" RF Audio Boost: x%u", rfAudioBoost); LogInfo(" RF Audio Boost: x%u", rfAudioBoost);
LogInfo(" Max. Deviation Level: %.1f%%", maxDevLevel); LogInfo(" Max. Deviation Level: %.1f%%", maxDevLevel);
@@ -1417,7 +1419,7 @@ bool CMMDVMHost::createModem()
m_modem->setFMCallsignParams(callsign, callsignSpeed, callsignFrequency, callsignTime, callsignHoldoff, callsignHighLevel, callsignLowLevel, callsignAtStart, callsignAtEnd, callsignAtLatch); m_modem->setFMCallsignParams(callsign, callsignSpeed, callsignFrequency, callsignTime, callsignHoldoff, callsignHighLevel, callsignLowLevel, callsignAtStart, callsignAtEnd, callsignAtLatch);
m_modem->setFMAckParams(rfAck, ackSpeed, ackFrequency, ackMinTime, ackDelay, ackLevel); m_modem->setFMAckParams(rfAck, ackSpeed, ackFrequency, ackMinTime, ackDelay, ackLevel);
m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssHighThreshold, ctcssLowThreshold, ctcssLevel, kerchunkTime, hangTime, useCOS, cosInvert, rfAudioBoost, maxDevLevel); m_modem->setFMMiscParams(timeout, timeoutLevel, ctcssFrequency, ctcssHighThreshold, ctcssLowThreshold, ctcssLevel, kerchunkTime, hangTime, accessMode, cosInvert, rfAudioBoost, maxDevLevel);
if (m_conf.getFMNetworkEnabled()) { if (m_conf.getFMNetworkEnabled()) {
std::string extAck = m_conf.getFMExtAck(); std::string extAck = m_conf.getFMExtAck();

View File

@@ -40,7 +40,7 @@ public:
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) = 0; 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) = 0;
virtual void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel) = 0; virtual void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel) = 0;
virtual void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, bool useCOS, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel) = 0; virtual void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel) = 0;
virtual void setFMExtParams(const std::string& ack, unsigned int audioBoost) = 0; virtual void setFMExtParams(const std::string& ack, unsigned int audioBoost) = 0;
virtual bool open() = 0; virtual bool open() = 0;

View File

@@ -42,7 +42,7 @@ public:
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) {}; 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) {};
virtual void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel) {}; virtual void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel) {};
virtual void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, bool useCOS, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel) {}; virtual void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel) {};
virtual void setFMExtParams(const std::string& ack, unsigned int audioBoost) {}; virtual void setFMExtParams(const std::string& ack, unsigned int audioBoost) {};
virtual bool open(); virtual bool open();

View File

@@ -109,7 +109,7 @@ const unsigned int MAX_RESPONSES = 30U;
const unsigned int BUFFER_LENGTH = 2000U; const unsigned int BUFFER_LENGTH = 2000U;
CSerialModem::CSerialModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug) : CSerialModem::CSerialModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool useCOSAsLockout, bool trace, bool debug) :
m_port(port), m_port(port),
m_dmrColorCode(0U), m_dmrColorCode(0U),
m_ysfLoDev(false), m_ysfLoDev(false),
@@ -133,6 +133,7 @@ m_pocsagTXLevel(0.0F),
m_fmTXLevel(0.0F), m_fmTXLevel(0.0F),
m_ax25TXLevel(0.0F), m_ax25TXLevel(0.0F),
m_rfLevel(0.0F), m_rfLevel(0.0F),
m_useCOSAsLockout(useCOSAsLockout),
m_trace(trace), m_trace(trace),
m_debug(debug), m_debug(debug),
m_rxFrequency(0U), m_rxFrequency(0U),
@@ -221,7 +222,7 @@ m_fmCtcssLowThreshold(20U),
m_fmCtcssLevel(10.0F), m_fmCtcssLevel(10.0F),
m_fmKerchunkTime(0U), m_fmKerchunkTime(0U),
m_fmHangTime(5U), m_fmHangTime(5U),
m_fmUseCOS(true), m_fmAccessMode(1U),
m_fmCOSInvert(false), m_fmCOSInvert(false),
m_fmRFAudioBoost(1U), m_fmRFAudioBoost(1U),
m_fmExtAudioBoost(1U), m_fmExtAudioBoost(1U),
@@ -1775,6 +1776,8 @@ bool CSerialModem::setConfig()
buffer[3U] |= 0x08U; buffer[3U] |= 0x08U;
if (m_debug) if (m_debug)
buffer[3U] |= 0x10U; buffer[3U] |= 0x10U;
if (m_useCOSAsLockout)
buffer[3U] |= 0x20U;
if (!m_duplex) if (!m_duplex)
buffer[3U] |= 0x80U; buffer[3U] |= 0x80U;
@@ -2183,7 +2186,7 @@ void CSerialModem::setFMAckParams(const std::string& rfAck, unsigned int ackSpee
m_fmAckLevel = ackLevel; m_fmAckLevel = ackLevel;
} }
void CSerialModem::setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, bool useCOS, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel) void CSerialModem::setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel)
{ {
m_fmTimeout = timeout; m_fmTimeout = timeout;
m_fmTimeoutLevel = timeoutLevel; m_fmTimeoutLevel = timeoutLevel;
@@ -2197,7 +2200,7 @@ void CSerialModem::setFMMiscParams(unsigned int timeout, float timeoutLevel, flo
m_fmHangTime = hangTime; m_fmHangTime = hangTime;
m_fmUseCOS = useCOS; m_fmAccessMode = accessMode;
m_fmCOSInvert = cosInvert; m_fmCOSInvert = cosInvert;
m_fmRFAudioBoost = rfAudioBoost; m_fmRFAudioBoost = rfAudioBoost;
@@ -2345,11 +2348,9 @@ bool CSerialModem::setFMMiscParams()
buffer[9U] = m_fmKerchunkTime; buffer[9U] = m_fmKerchunkTime;
buffer[10U] = m_fmHangTime; buffer[10U] = m_fmHangTime;
buffer[11U] = 0x00U; buffer[11U] = m_fmAccessMode;
if (m_fmUseCOS)
buffer[11U] |= 0x01U;
if (m_fmCOSInvert) if (m_fmCOSInvert)
buffer[11U] |= 0x02U; buffer[11U] |= 0x80U;
buffer[12U] = m_fmRFAudioBoost; buffer[12U] = m_fmRFAudioBoost;

View File

@@ -44,7 +44,7 @@ enum SERIAL_STATE {
class CSerialModem : public IModem { class CSerialModem : public IModem {
public: public:
CSerialModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool trace, bool debug); CSerialModem(const std::string& port, bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool useCOSAsLockout, bool trace, bool debug);
virtual ~CSerialModem(); virtual ~CSerialModem();
virtual void setSerialParams(const std::string& protocol, unsigned int address, unsigned int speed); virtual void setSerialParams(const std::string& protocol, unsigned int address, unsigned int speed);
@@ -60,7 +60,7 @@ public:
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); 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);
virtual void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel); virtual void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel);
virtual void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, bool useCOS, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel); virtual void setFMMiscParams(unsigned int timeout, float timeoutLevel, float ctcssFrequency, unsigned int ctcssHighThreshold, unsigned int ctcssLowThreshold, float ctcssLevel, unsigned int kerchunkTime, unsigned int hangTime, unsigned int accessMode, bool cosInvert, unsigned int rfAudioBoost, float maxDevLevel);
virtual void setFMExtParams(const std::string& ack, unsigned int audioBoost); virtual void setFMExtParams(const std::string& ack, unsigned int audioBoost);
virtual bool open(); virtual bool open();
@@ -155,6 +155,7 @@ private:
float m_fmTXLevel; float m_fmTXLevel;
float m_ax25TXLevel; float m_ax25TXLevel;
float m_rfLevel; float m_rfLevel;
bool m_useCOSAsLockout;
bool m_trace; bool m_trace;
bool m_debug; bool m_debug;
unsigned int m_rxFrequency; unsigned int m_rxFrequency;
@@ -244,7 +245,7 @@ private:
float m_fmCtcssLevel; float m_fmCtcssLevel;
unsigned int m_fmKerchunkTime; unsigned int m_fmKerchunkTime;
unsigned int m_fmHangTime; unsigned int m_fmHangTime;
bool m_fmUseCOS; unsigned int m_fmAccessMode;
bool m_fmCOSInvert; bool m_fmCOSInvert;
unsigned int m_fmRFAudioBoost; unsigned int m_fmRFAudioBoost;
unsigned int m_fmExtAudioBoost; unsigned int m_fmExtAudioBoost;

View File

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