mirror of https://github.com/g4klx/MMDVMHost
Make the compilation of FM support conditional.
This commit is contained in:
parent
7fa24d7f57
commit
5a12f49a6e
34
Conf.cpp
34
Conf.cpp
|
|
@ -47,7 +47,9 @@ enum SECTION {
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
SECTION_POCSAG,
|
SECTION_POCSAG,
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
SECTION_FM,
|
SECTION_FM,
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
SECTION_AX25,
|
SECTION_AX25,
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -60,7 +62,9 @@ enum SECTION {
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
SECTION_POCSAG_NETWORK,
|
SECTION_POCSAG_NETWORK,
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
SECTION_FM_NETWORK,
|
SECTION_FM_NETWORK,
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
SECTION_AX25_NETWORK,
|
SECTION_AX25_NETWORK,
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -196,8 +200,11 @@ m_m17ModeHang(10U),
|
||||||
m_pocsagEnabled(false),
|
m_pocsagEnabled(false),
|
||||||
#endif
|
#endif
|
||||||
m_pocsagFrequency(0U),
|
m_pocsagFrequency(0U),
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmEnabled(false),
|
m_fmEnabled(false),
|
||||||
|
#endif
|
||||||
m_fmCallsign(),
|
m_fmCallsign(),
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmCallsignSpeed(20U),
|
m_fmCallsignSpeed(20U),
|
||||||
m_fmCallsignFrequency(1000U),
|
m_fmCallsignFrequency(1000U),
|
||||||
m_fmCallsignTime(10U),
|
m_fmCallsignTime(10U),
|
||||||
|
|
@ -214,7 +221,9 @@ m_fmAckFrequency(1750U),
|
||||||
m_fmAckMinTime(5U),
|
m_fmAckMinTime(5U),
|
||||||
m_fmAckDelay(1000U),
|
m_fmAckDelay(1000U),
|
||||||
m_fmAckLevel(80.0F),
|
m_fmAckLevel(80.0F),
|
||||||
|
#endif
|
||||||
m_fmTimeout(180U),
|
m_fmTimeout(180U),
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmTimeoutLevel(80.0F),
|
m_fmTimeoutLevel(80.0F),
|
||||||
m_fmCTCSSFrequency(88.6F),
|
m_fmCTCSSFrequency(88.6F),
|
||||||
m_fmCTCSSHighThreshold(30U),
|
m_fmCTCSSHighThreshold(30U),
|
||||||
|
|
@ -231,6 +240,7 @@ m_fmSquelchLowThreshold(20U),
|
||||||
m_fmRFAudioBoost(1U),
|
m_fmRFAudioBoost(1U),
|
||||||
m_fmMaxDevLevel(90.0F),
|
m_fmMaxDevLevel(90.0F),
|
||||||
m_fmExtAudioBoost(1U),
|
m_fmExtAudioBoost(1U),
|
||||||
|
#endif
|
||||||
m_fmModeHang(10U),
|
m_fmModeHang(10U),
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Enabled(false),
|
m_ax25Enabled(false),
|
||||||
|
|
@ -297,6 +307,7 @@ m_pocsagLocalPort(0U),
|
||||||
m_pocsagNetworkModeHang(3U),
|
m_pocsagNetworkModeHang(3U),
|
||||||
m_pocsagNetworkDebug(false),
|
m_pocsagNetworkDebug(false),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmNetworkEnabled(false),
|
m_fmNetworkEnabled(false),
|
||||||
m_fmNetworkProtocol("USRP"),
|
m_fmNetworkProtocol("USRP"),
|
||||||
m_fmGatewayAddress(),
|
m_fmGatewayAddress(),
|
||||||
|
|
@ -307,8 +318,11 @@ m_fmPreEmphasis(true),
|
||||||
m_fmDeEmphasis(true),
|
m_fmDeEmphasis(true),
|
||||||
m_fmTXAudioGain(1.0F),
|
m_fmTXAudioGain(1.0F),
|
||||||
m_fmRXAudioGain(1.0F),
|
m_fmRXAudioGain(1.0F),
|
||||||
|
#endif
|
||||||
m_fmNetworkModeHang(3U),
|
m_fmNetworkModeHang(3U),
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmNetworkDebug(false),
|
m_fmNetworkDebug(false),
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25NetworkEnabled(false),
|
m_ax25NetworkEnabled(false),
|
||||||
m_ax25NetworkPort(),
|
m_ax25NetworkPort(),
|
||||||
|
|
@ -375,8 +389,10 @@ bool CConf::read()
|
||||||
else if (::strncmp(buffer, "[POCSAG]", 8U) == 0)
|
else if (::strncmp(buffer, "[POCSAG]", 8U) == 0)
|
||||||
section = SECTION_POCSAG;
|
section = SECTION_POCSAG;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
else if (::strncmp(buffer, "[FM]", 4U) == 0)
|
else if (::strncmp(buffer, "[FM]", 4U) == 0)
|
||||||
section = SECTION_FM;
|
section = SECTION_FM;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
else if (::strncmp(buffer, "[AX.25]", 7U) == 0)
|
else if (::strncmp(buffer, "[AX.25]", 7U) == 0)
|
||||||
section = SECTION_AX25;
|
section = SECTION_AX25;
|
||||||
|
|
@ -397,8 +413,10 @@ bool CConf::read()
|
||||||
else if (::strncmp(buffer, "[POCSAG Network]", 16U) == 0)
|
else if (::strncmp(buffer, "[POCSAG Network]", 16U) == 0)
|
||||||
section = SECTION_POCSAG_NETWORK;
|
section = SECTION_POCSAG_NETWORK;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
else if (::strncmp(buffer, "[FM Network]", 12U) == 0)
|
else if (::strncmp(buffer, "[FM Network]", 12U) == 0)
|
||||||
section = SECTION_FM_NETWORK;
|
section = SECTION_FM_NETWORK;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
else if (::strncmp(buffer, "[AX.25 Network]", 15U) == 0)
|
else if (::strncmp(buffer, "[AX.25 Network]", 15U) == 0)
|
||||||
section = SECTION_AX25_NETWORK;
|
section = SECTION_AX25_NETWORK;
|
||||||
|
|
@ -570,12 +588,18 @@ bool CConf::read()
|
||||||
m_modemNXDNTXLevel = float(::atof(value));
|
m_modemNXDNTXLevel = float(::atof(value));
|
||||||
else if (::strcmp(key, "M17TXLevel") == 0)
|
else if (::strcmp(key, "M17TXLevel") == 0)
|
||||||
m_modemM17TXLevel = float(::atof(value));
|
m_modemM17TXLevel = float(::atof(value));
|
||||||
|
#if defined(USE_POCSAG)
|
||||||
else if (::strcmp(key, "POCSAGTXLevel") == 0)
|
else if (::strcmp(key, "POCSAGTXLevel") == 0)
|
||||||
m_modemPOCSAGTXLevel = float(::atof(value));
|
m_modemPOCSAGTXLevel = float(::atof(value));
|
||||||
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
else if (::strcmp(key, "FMTXLevel") == 0)
|
else if (::strcmp(key, "FMTXLevel") == 0)
|
||||||
m_modemFMTXLevel = float(::atof(value));
|
m_modemFMTXLevel = float(::atof(value));
|
||||||
|
#endif
|
||||||
|
#if defined(USE_AX25)
|
||||||
else if (::strcmp(key, "AX25TXLevel") == 0)
|
else if (::strcmp(key, "AX25TXLevel") == 0)
|
||||||
m_modemAX25TXLevel = float(::atof(value));
|
m_modemAX25TXLevel = float(::atof(value));
|
||||||
|
#endif
|
||||||
else if (::strcmp(key, "RSSIMappingFile") == 0)
|
else if (::strcmp(key, "RSSIMappingFile") == 0)
|
||||||
m_modemRSSIMappingFile = value;
|
m_modemRSSIMappingFile = value;
|
||||||
else if (::strcmp(key, "UseCOSAsLockout") == 0)
|
else if (::strcmp(key, "UseCOSAsLockout") == 0)
|
||||||
|
|
@ -793,6 +817,7 @@ bool CConf::read()
|
||||||
else if (::strcmp(key, "Frequency") == 0)
|
else if (::strcmp(key, "Frequency") == 0)
|
||||||
m_pocsagFrequency = (unsigned int)::atoi(value);
|
m_pocsagFrequency = (unsigned int)::atoi(value);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
} else if (section == SECTION_FM) {
|
} else if (section == SECTION_FM) {
|
||||||
if (::strcmp(key, "Enable") == 0)
|
if (::strcmp(key, "Enable") == 0)
|
||||||
m_fmEnabled = ::atoi(value) == 1;
|
m_fmEnabled = ::atoi(value) == 1;
|
||||||
|
|
@ -879,6 +904,7 @@ bool CConf::read()
|
||||||
m_fmExtAudioBoost = (unsigned int)::atoi(value);
|
m_fmExtAudioBoost = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "ModeHang") == 0)
|
else if (::strcmp(key, "ModeHang") == 0)
|
||||||
m_fmModeHang = (unsigned int)::atoi(value);
|
m_fmModeHang = (unsigned int)::atoi(value);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
} else if (section == SECTION_AX25) {
|
} else if (section == SECTION_AX25) {
|
||||||
if (::strcmp(key, "Enable") == 0)
|
if (::strcmp(key, "Enable") == 0)
|
||||||
|
|
@ -1007,6 +1033,7 @@ bool CConf::read()
|
||||||
else if (::strcmp(key, "Debug") == 0)
|
else if (::strcmp(key, "Debug") == 0)
|
||||||
m_pocsagNetworkDebug = ::atoi(value) == 1;
|
m_pocsagNetworkDebug = ::atoi(value) == 1;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
} else if (section == SECTION_FM_NETWORK) {
|
} else if (section == SECTION_FM_NETWORK) {
|
||||||
if (::strcmp(key, "Enable") == 0)
|
if (::strcmp(key, "Enable") == 0)
|
||||||
m_fmNetworkEnabled = ::atoi(value) == 1;
|
m_fmNetworkEnabled = ::atoi(value) == 1;
|
||||||
|
|
@ -1032,6 +1059,7 @@ bool CConf::read()
|
||||||
m_fmNetworkModeHang = (unsigned int)::atoi(value);
|
m_fmNetworkModeHang = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "Debug") == 0)
|
else if (::strcmp(key, "Debug") == 0)
|
||||||
m_fmNetworkDebug = ::atoi(value) == 1;
|
m_fmNetworkDebug = ::atoi(value) == 1;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
} else if (section == SECTION_AX25_NETWORK) {
|
} else if (section == SECTION_AX25_NETWORK) {
|
||||||
if (::strcmp(key, "Enable") == 0)
|
if (::strcmp(key, "Enable") == 0)
|
||||||
|
|
@ -1336,10 +1364,12 @@ float CConf::getModemPOCSAGTXLevel() const
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
float CConf::getModemFMTXLevel() const
|
float CConf::getModemFMTXLevel() const
|
||||||
{
|
{
|
||||||
return m_modemFMTXLevel;
|
return m_modemFMTXLevel;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
float CConf::getModemAX25TXLevel() const
|
float CConf::getModemAX25TXLevel() const
|
||||||
|
|
@ -1685,6 +1715,7 @@ unsigned int CConf::getPOCSAGFrequency() const
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
bool CConf::getFMEnabled() const
|
bool CConf::getFMEnabled() const
|
||||||
{
|
{
|
||||||
return m_fmEnabled;
|
return m_fmEnabled;
|
||||||
|
|
@ -1864,6 +1895,7 @@ unsigned int CConf::getFMModeHang() const
|
||||||
{
|
{
|
||||||
return m_fmModeHang;
|
return m_fmModeHang;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool CConf::getAX25Enabled() const
|
bool CConf::getAX25Enabled() const
|
||||||
|
|
@ -2164,6 +2196,7 @@ bool CConf::getPOCSAGNetworkDebug() const
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
bool CConf::getFMNetworkEnabled() const
|
bool CConf::getFMNetworkEnabled() const
|
||||||
{
|
{
|
||||||
return m_fmNetworkEnabled;
|
return m_fmNetworkEnabled;
|
||||||
|
|
@ -2223,6 +2256,7 @@ bool CConf::getFMNetworkDebug() const
|
||||||
{
|
{
|
||||||
return m_fmNetworkDebug;
|
return m_fmNetworkDebug;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool CConf::getAX25NetworkEnabled() const
|
bool CConf::getAX25NetworkEnabled() const
|
||||||
|
|
|
||||||
16
Conf.h
16
Conf.h
|
|
@ -102,7 +102,9 @@ public:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
float getModemPOCSAGTXLevel() const;
|
float getModemPOCSAGTXLevel() const;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
float getModemFMTXLevel() const;
|
float getModemFMTXLevel() const;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
float getModemAX25TXLevel() const;
|
float getModemAX25TXLevel() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -202,6 +204,7 @@ public:
|
||||||
bool getAX25Trace() const;
|
bool getAX25Trace() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
// The FM Section
|
// The FM Section
|
||||||
bool getFMEnabled() const;
|
bool getFMEnabled() const;
|
||||||
std::string getFMCallsign() const;
|
std::string getFMCallsign() const;
|
||||||
|
|
@ -239,6 +242,7 @@ public:
|
||||||
float getFMMaxDevLevel() const;
|
float getFMMaxDevLevel() const;
|
||||||
unsigned int getFMExtAudioBoost() const;
|
unsigned int getFMExtAudioBoost() const;
|
||||||
unsigned int getFMModeHang() const;
|
unsigned int getFMModeHang() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
// The D-Star Network section
|
// The D-Star Network section
|
||||||
bool getDStarNetworkEnabled() const;
|
bool getDStarNetworkEnabled() const;
|
||||||
|
|
@ -309,6 +313,7 @@ public:
|
||||||
bool getPOCSAGNetworkDebug() const;
|
bool getPOCSAGNetworkDebug() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
// The FM Network section
|
// The FM Network section
|
||||||
bool getFMNetworkEnabled() const;
|
bool getFMNetworkEnabled() const;
|
||||||
std::string getFMNetworkProtocol() const;
|
std::string getFMNetworkProtocol() const;
|
||||||
|
|
@ -322,6 +327,7 @@ public:
|
||||||
float getFMRXAudioGain() const;
|
float getFMRXAudioGain() const;
|
||||||
unsigned int getFMNetworkModeHang() const;
|
unsigned int getFMNetworkModeHang() const;
|
||||||
bool getFMNetworkDebug() const;
|
bool getFMNetworkDebug() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
// The AX.25 Network section
|
// The AX.25 Network section
|
||||||
|
|
@ -482,8 +488,11 @@ private:
|
||||||
#endif
|
#endif
|
||||||
unsigned int m_pocsagFrequency;
|
unsigned int m_pocsagFrequency;
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
bool m_fmEnabled;
|
bool m_fmEnabled;
|
||||||
|
#endif
|
||||||
std::string m_fmCallsign;
|
std::string m_fmCallsign;
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int m_fmCallsignSpeed;
|
unsigned int m_fmCallsignSpeed;
|
||||||
unsigned int m_fmCallsignFrequency;
|
unsigned int m_fmCallsignFrequency;
|
||||||
unsigned int m_fmCallsignTime;
|
unsigned int m_fmCallsignTime;
|
||||||
|
|
@ -500,7 +509,9 @@ private:
|
||||||
unsigned int m_fmAckMinTime;
|
unsigned int m_fmAckMinTime;
|
||||||
unsigned int m_fmAckDelay;
|
unsigned int m_fmAckDelay;
|
||||||
float m_fmAckLevel;
|
float m_fmAckLevel;
|
||||||
|
#endif
|
||||||
unsigned int m_fmTimeout;
|
unsigned int m_fmTimeout;
|
||||||
|
#if defined(USE_FM)
|
||||||
float m_fmTimeoutLevel;
|
float m_fmTimeoutLevel;
|
||||||
float m_fmCTCSSFrequency;
|
float m_fmCTCSSFrequency;
|
||||||
unsigned int m_fmCTCSSHighThreshold;
|
unsigned int m_fmCTCSSHighThreshold;
|
||||||
|
|
@ -517,6 +528,7 @@ private:
|
||||||
unsigned int m_fmRFAudioBoost;
|
unsigned int m_fmRFAudioBoost;
|
||||||
float m_fmMaxDevLevel;
|
float m_fmMaxDevLevel;
|
||||||
unsigned int m_fmExtAudioBoost;
|
unsigned int m_fmExtAudioBoost;
|
||||||
|
#endif
|
||||||
unsigned int m_fmModeHang;
|
unsigned int m_fmModeHang;
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
|
|
@ -592,6 +604,7 @@ private:
|
||||||
bool m_pocsagNetworkDebug;
|
bool m_pocsagNetworkDebug;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
bool m_fmNetworkEnabled;
|
bool m_fmNetworkEnabled;
|
||||||
std::string m_fmNetworkProtocol;
|
std::string m_fmNetworkProtocol;
|
||||||
std::string m_fmGatewayAddress;
|
std::string m_fmGatewayAddress;
|
||||||
|
|
@ -602,8 +615,11 @@ private:
|
||||||
bool m_fmDeEmphasis;
|
bool m_fmDeEmphasis;
|
||||||
float m_fmTXAudioGain;
|
float m_fmTXAudioGain;
|
||||||
float m_fmRXAudioGain;
|
float m_fmRXAudioGain;
|
||||||
|
#endif
|
||||||
unsigned int m_fmNetworkModeHang;
|
unsigned int m_fmNetworkModeHang;
|
||||||
|
#if defined(USE_FM)
|
||||||
bool m_fmNetworkDebug;
|
bool m_fmNetworkDebug;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool m_ax25NetworkEnabled;
|
bool m_ax25NetworkEnabled;
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,9 @@
|
||||||
#include "FMControl.h"
|
#include "FMControl.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
|
|
||||||
#include <string>
|
#if defined(USE_FM)
|
||||||
|
|
||||||
#if defined(DUMP_RF_AUDIO)
|
#include <string>
|
||||||
#include <cstdio>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SWAP_BYTES_16(a) (((a >> 8) & 0x00FFU) | ((a << 8) & 0xFF00U))
|
#define SWAP_BYTES_16(a) (((a >> 8) & 0x00FFU) | ((a << 8) & 0xFF00U))
|
||||||
|
|
||||||
|
|
@ -153,13 +151,6 @@ bool CFMControl::writeModem(const unsigned char* data, unsigned int length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DUMP_RF_AUDIO)
|
|
||||||
FILE * audiofile = fopen("./audiodump.bin", "ab");
|
|
||||||
if (audiofile != NULL) {
|
|
||||||
fwrite(out, sizeof(float), nOut, audiofile);
|
|
||||||
fclose(audiofile);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return m_network->writeData(out, nOut);
|
return m_network->writeData(out, nOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -234,3 +225,5 @@ void CFMControl::writeJSON(const char* state)
|
||||||
WriteJSON("FM", json);
|
WriteJSON("FM", json);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@
|
||||||
#include "Defines.h"
|
#include "Defines.h"
|
||||||
#include "IIRDirectForm1Filter.h"
|
#include "IIRDirectForm1Filter.h"
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
// Uncomment this to dump audio to a raw audio file
|
// Uncomment this to dump audio to a raw audio file
|
||||||
|
|
@ -62,3 +64,5 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020,2021 by Jonathan Naylor G4KLX
|
* Copyright (C) 2020,2021,2023 by Jonathan Naylor G4KLX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -17,10 +17,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "FMNetwork.h"
|
#include "FMNetwork.h"
|
||||||
#include "Defines.h"
|
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
@ -396,3 +397,6 @@ bool CFMNetwork::writeStart()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020,2021 by Jonathan Naylor G4KLX
|
* Copyright (C) 2020,2021,2023 by Jonathan Naylor G4KLX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -21,6 +21,9 @@
|
||||||
|
|
||||||
#include "RingBuffer.h"
|
#include "RingBuffer.h"
|
||||||
#include "UDPSocket.h"
|
#include "UDPSocket.h"
|
||||||
|
#include "Defines.h"
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
@ -65,3 +68,6 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,9 @@ m_m17(NULL),
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsag(NULL),
|
m_pocsag(NULL),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fm(NULL),
|
m_fm(NULL),
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25(NULL),
|
m_ax25(NULL),
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -168,7 +170,9 @@ m_m17Network(NULL),
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagNetwork(NULL),
|
m_pocsagNetwork(NULL),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmNetwork(NULL),
|
m_fmNetwork(NULL),
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Network(NULL),
|
m_ax25Network(NULL),
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -179,7 +183,9 @@ m_ysfRFModeHang(10U),
|
||||||
m_p25RFModeHang(10U),
|
m_p25RFModeHang(10U),
|
||||||
m_nxdnRFModeHang(10U),
|
m_nxdnRFModeHang(10U),
|
||||||
m_m17RFModeHang(10U),
|
m_m17RFModeHang(10U),
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmRFModeHang(10U),
|
m_fmRFModeHang(10U),
|
||||||
|
#endif
|
||||||
m_dstarNetModeHang(3U),
|
m_dstarNetModeHang(3U),
|
||||||
m_dmrNetModeHang(3U),
|
m_dmrNetModeHang(3U),
|
||||||
m_ysfNetModeHang(3U),
|
m_ysfNetModeHang(3U),
|
||||||
|
|
@ -189,7 +195,9 @@ m_m17NetModeHang(3U),
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagNetModeHang(3U),
|
m_pocsagNetModeHang(3U),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmNetModeHang(3U),
|
m_fmNetModeHang(3U),
|
||||||
|
#endif
|
||||||
m_modeTimer(1000U),
|
m_modeTimer(1000U),
|
||||||
m_dmrTXTimer(1000U),
|
m_dmrTXTimer(1000U),
|
||||||
m_cwIdTimer(1000U),
|
m_cwIdTimer(1000U),
|
||||||
|
|
@ -356,10 +364,12 @@ int CMMDVMHost::run()
|
||||||
m_m17Enabled = false;
|
m_m17Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmEnabled && !m_modem->hasFM()) {
|
if (m_fmEnabled && !m_modem->hasFM()) {
|
||||||
LogWarning("FM enabled in the host but not in the modem firmware, disabling");
|
LogWarning("FM enabled in the host but not in the modem firmware, disabling");
|
||||||
m_fmEnabled = false;
|
m_fmEnabled = false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
if (m_pocsagEnabled && !m_modem->hasPOCSAG()) {
|
if (m_pocsagEnabled && !m_modem->hasPOCSAG()) {
|
||||||
|
|
@ -422,11 +432,13 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmEnabled && m_conf.getFMNetworkEnabled()) {
|
if (m_fmEnabled && m_conf.getFMNetworkEnabled()) {
|
||||||
ret = createFMNetwork();
|
ret = createFMNetwork();
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Enabled && m_conf.getAX25NetworkEnabled()) {
|
if (m_ax25Enabled && m_conf.getAX25NetworkEnabled()) {
|
||||||
|
|
@ -771,6 +783,7 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmEnabled) {
|
if (m_fmEnabled) {
|
||||||
bool preEmphasis = m_conf.getFMPreEmphasis();
|
bool preEmphasis = m_conf.getFMPreEmphasis();
|
||||||
bool deEmphasis = m_conf.getFMDeEmphasis();
|
bool deEmphasis = m_conf.getFMDeEmphasis();
|
||||||
|
|
@ -780,6 +793,7 @@ int CMMDVMHost::run()
|
||||||
|
|
||||||
m_fm = new CFMControl(m_fmNetwork, txAudioGain, rxAudioGain, preEmphasis, deEmphasis);
|
m_fm = new CFMControl(m_fmNetwork, txAudioGain, rxAudioGain, preEmphasis, deEmphasis);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool remoteControlEnabled = m_conf.getRemoteControlEnabled();
|
bool remoteControlEnabled = m_conf.getRemoteControlEnabled();
|
||||||
if (remoteControlEnabled)
|
if (remoteControlEnabled)
|
||||||
|
|
@ -967,6 +981,7 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
len = m_modem->readFMData(data);
|
len = m_modem->readFMData(data);
|
||||||
if (m_fm != NULL && len > 0U) {
|
if (m_fm != NULL && len > 0U) {
|
||||||
if (m_mode == MODE_IDLE) {
|
if (m_mode == MODE_IDLE) {
|
||||||
|
|
@ -983,6 +998,7 @@ int CMMDVMHost::run()
|
||||||
LogWarning("FM modem data received when in mode %u", m_mode);
|
LogWarning("FM modem data received when in mode %u", m_mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
len = m_modem->readAX25Data(data);
|
len = m_modem->readAX25Data(data);
|
||||||
|
|
@ -1166,6 +1182,7 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL) {
|
if (m_fm != NULL) {
|
||||||
unsigned int space = m_modem->getFMSpace();
|
unsigned int space = m_modem->getFMSpace();
|
||||||
if (space > 0U) {
|
if (space > 0U) {
|
||||||
|
|
@ -1184,6 +1201,7 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL) {
|
if (m_ax25 != NULL) {
|
||||||
|
|
@ -1248,8 +1266,10 @@ int CMMDVMHost::run()
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->clock(ms);
|
m_pocsag->clock(ms);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->clock(ms);
|
m_fm->clock(ms);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (m_dstarNetwork != NULL)
|
if (m_dstarNetwork != NULL)
|
||||||
m_dstarNetwork->clock(ms);
|
m_dstarNetwork->clock(ms);
|
||||||
|
|
@ -1267,8 +1287,10 @@ int CMMDVMHost::run()
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->clock(ms);
|
m_pocsagNetwork->clock(ms);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->clock(ms);
|
m_fmNetwork->clock(ms);
|
||||||
|
#endif
|
||||||
|
|
||||||
m_cwIdTimer.clock(ms);
|
m_cwIdTimer.clock(ms);
|
||||||
if (m_cwIdTimer.isRunning() && m_cwIdTimer.hasExpired()) {
|
if (m_cwIdTimer.isRunning() && m_cwIdTimer.hasExpired()) {
|
||||||
|
|
@ -1387,10 +1409,12 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL) {
|
if (m_fmNetwork != NULL) {
|
||||||
m_fmNetwork->close();
|
m_fmNetwork->close();
|
||||||
delete m_fmNetwork;
|
delete m_fmNetwork;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL) {
|
if (m_ax25Network != NULL) {
|
||||||
|
|
@ -1418,7 +1442,9 @@ int CMMDVMHost::run()
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
delete m_pocsag;
|
delete m_pocsag;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
delete m_fm;
|
delete m_fm;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
delete m_ax25;
|
delete m_ax25;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1466,7 +1492,11 @@ bool CMMDVMHost::createModem()
|
||||||
#else
|
#else
|
||||||
float pocsagTXLevel = 0.0F;
|
float pocsagTXLevel = 0.0F;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
float fmTXLevel = m_conf.getModemFMTXLevel();
|
float fmTXLevel = m_conf.getModemFMTXLevel();
|
||||||
|
#else
|
||||||
|
float fmTXLevel = 0.0F;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
float ax25TXLevel = m_conf.getModemAX25TXLevel();
|
float ax25TXLevel = m_conf.getModemAX25TXLevel();
|
||||||
#else
|
#else
|
||||||
|
|
@ -1540,7 +1570,9 @@ bool CMMDVMHost::createModem()
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
LogInfo(" POCSAG TX Level: %.1f%%", pocsagTXLevel);
|
LogInfo(" POCSAG TX Level: %.1f%%", pocsagTXLevel);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
LogInfo(" FM TX Level: %.1f%%", fmTXLevel);
|
LogInfo(" FM TX Level: %.1f%%", fmTXLevel);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
LogInfo(" AX.25 TX Level: %.1f%%", ax25TXLevel);
|
LogInfo(" AX.25 TX Level: %.1f%%", ax25TXLevel);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1576,6 +1608,7 @@ bool CMMDVMHost::createModem()
|
||||||
m_modem->setAX25Params(rxTwist, ax25TXDelay, ax25SlotTime, ax25PPersist);
|
m_modem->setAX25Params(rxTwist, ax25TXDelay, ax25SlotTime, ax25PPersist);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmEnabled) {
|
if (m_fmEnabled) {
|
||||||
std::string callsign = m_conf.getFMCallsign();
|
std::string callsign = m_conf.getFMCallsign();
|
||||||
unsigned int callsignSpeed = m_conf.getFMCallsignSpeed();
|
unsigned int callsignSpeed = m_conf.getFMCallsignSpeed();
|
||||||
|
|
@ -1664,6 +1697,7 @@ bool CMMDVMHost::createModem()
|
||||||
m_modem->setFMExtParams(extAck, extAudioBoost);
|
m_modem->setFMExtParams(extAck, extAudioBoost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool ret = m_modem->open();
|
bool ret = m_modem->open();
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
|
@ -1912,6 +1946,7 @@ bool CMMDVMHost::createPOCSAGNetwork()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
bool CMMDVMHost::createFMNetwork()
|
bool CMMDVMHost::createFMNetwork()
|
||||||
{
|
{
|
||||||
std::string callsign = m_conf.getFMCallsign();
|
std::string callsign = m_conf.getFMCallsign();
|
||||||
|
|
@ -1952,6 +1987,7 @@ bool CMMDVMHost::createFMNetwork()
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool CMMDVMHost::createAX25Network()
|
bool CMMDVMHost::createAX25Network()
|
||||||
|
|
@ -1990,7 +2026,9 @@ void CMMDVMHost::readParams()
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagEnabled = m_conf.getPOCSAGEnabled();
|
m_pocsagEnabled = m_conf.getPOCSAGEnabled();
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmEnabled = m_conf.getFMEnabled();
|
m_fmEnabled = m_conf.getFMEnabled();
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Enabled = m_conf.getAX25Enabled();
|
m_ax25Enabled = m_conf.getAX25Enabled();
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -2013,7 +2051,9 @@ void CMMDVMHost::readParams()
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
LogInfo(" POCSAG: %s", m_pocsagEnabled ? "enabled" : "disabled");
|
LogInfo(" POCSAG: %s", m_pocsagEnabled ? "enabled" : "disabled");
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
LogInfo(" FM: %s", m_fmEnabled ? "enabled" : "disabled");
|
LogInfo(" FM: %s", m_fmEnabled ? "enabled" : "disabled");
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
LogInfo(" AX.25: %s", m_ax25Enabled ? "enabled" : "disabled");
|
LogInfo(" AX.25: %s", m_ax25Enabled ? "enabled" : "disabled");
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -2041,8 +2081,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2063,8 +2105,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2094,8 +2138,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2116,8 +2162,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2151,8 +2199,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2173,8 +2223,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2204,8 +2256,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2226,8 +2280,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2257,8 +2313,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2279,8 +2337,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2310,8 +2370,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2332,8 +2394,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2363,8 +2427,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(true);
|
m_pocsagNetwork->enable(true);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2385,8 +2451,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(true);
|
m_pocsag->enable(true);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2416,8 +2484,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(true);
|
m_fmNetwork->enable(true);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(true);
|
m_ax25Network->enable(true);
|
||||||
|
|
@ -2438,8 +2508,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(true);
|
m_fm->enable(true);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(true);
|
m_ax25->enable(true);
|
||||||
|
|
@ -2473,8 +2545,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2495,8 +2569,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2531,8 +2607,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(false);
|
m_pocsagNetwork->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(false);
|
m_fmNetwork->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(false);
|
m_ax25Network->enable(false);
|
||||||
|
|
@ -2553,8 +2631,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(false);
|
m_pocsag->enable(false);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(false);
|
m_fm->enable(false);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(false);
|
m_ax25->enable(false);
|
||||||
|
|
@ -2587,8 +2667,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsagNetwork != NULL)
|
if (m_pocsagNetwork != NULL)
|
||||||
m_pocsagNetwork->enable(true);
|
m_pocsagNetwork->enable(true);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmNetwork != NULL)
|
if (m_fmNetwork != NULL)
|
||||||
m_fmNetwork->enable(true);
|
m_fmNetwork->enable(true);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Network != NULL)
|
if (m_ax25Network != NULL)
|
||||||
m_ax25Network->enable(true);
|
m_ax25Network->enable(true);
|
||||||
|
|
@ -2609,8 +2691,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
||||||
if (m_pocsag != NULL)
|
if (m_pocsag != NULL)
|
||||||
m_pocsag->enable(true);
|
m_pocsag->enable(true);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fm != NULL)
|
if (m_fm != NULL)
|
||||||
m_fm->enable(true);
|
m_fm->enable(true);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25 != NULL)
|
if (m_ax25 != NULL)
|
||||||
m_ax25->enable(true);
|
m_ax25->enable(true);
|
||||||
|
|
@ -2692,10 +2776,12 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
|
||||||
if (m_m17 != NULL)
|
if (m_m17 != NULL)
|
||||||
processModeCommand(MODE_M17, m_m17RFModeHang);
|
processModeCommand(MODE_M17, m_m17RFModeHang);
|
||||||
break;
|
break;
|
||||||
|
#if defined(USE_FM)
|
||||||
case RCD_MODE_FM:
|
case RCD_MODE_FM:
|
||||||
if (m_fmEnabled)
|
if (m_fmEnabled)
|
||||||
processModeCommand(MODE_FM, 0);
|
processModeCommand(MODE_FM, 0);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case RCD_ENABLE_DSTAR:
|
case RCD_ENABLE_DSTAR:
|
||||||
if (m_dstar != NULL && !m_dstarEnabled)
|
if (m_dstar != NULL && !m_dstarEnabled)
|
||||||
processEnableCommand(m_dstarEnabled, true);
|
processEnableCommand(m_dstarEnabled, true);
|
||||||
|
|
@ -2732,10 +2818,12 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
|
||||||
if (m_m17Network != NULL)
|
if (m_m17Network != NULL)
|
||||||
m_m17Network->enable(true);
|
m_m17Network->enable(true);
|
||||||
break;
|
break;
|
||||||
|
#if defined(USE_FM)
|
||||||
case RCD_ENABLE_FM:
|
case RCD_ENABLE_FM:
|
||||||
if (!m_fmEnabled)
|
if (!m_fmEnabled)
|
||||||
processEnableCommand(m_fmEnabled, true);
|
processEnableCommand(m_fmEnabled, true);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
case RCD_ENABLE_AX25:
|
case RCD_ENABLE_AX25:
|
||||||
if (!m_ax25Enabled)
|
if (!m_ax25Enabled)
|
||||||
|
|
@ -2778,10 +2866,12 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
|
||||||
if (m_m17Network != NULL)
|
if (m_m17Network != NULL)
|
||||||
m_m17Network->enable(false);
|
m_m17Network->enable(false);
|
||||||
break;
|
break;
|
||||||
|
#if defined(USE_FM)
|
||||||
case RCD_DISABLE_FM:
|
case RCD_DISABLE_FM:
|
||||||
if (m_fmEnabled)
|
if (m_fmEnabled)
|
||||||
processEnableCommand(m_fmEnabled, false);
|
processEnableCommand(m_fmEnabled, false);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
case RCD_DISABLE_AX25:
|
case RCD_DISABLE_AX25:
|
||||||
if (m_ax25Enabled)
|
if (m_ax25Enabled)
|
||||||
|
|
@ -2890,7 +2980,9 @@ void CMMDVMHost::buildNetworkStatusString(std::string &str)
|
||||||
str += std::string(" p25:") + (((m_p25Network == NULL) || (m_p25Enabled == false)) ? "n/a" : (m_p25Network->isConnected() ? "conn" : "disc"));
|
str += std::string(" p25:") + (((m_p25Network == NULL) || (m_p25Enabled == false)) ? "n/a" : (m_p25Network->isConnected() ? "conn" : "disc"));
|
||||||
str += std::string(" nxdn:") + (((m_nxdnNetwork == NULL) || (m_nxdnEnabled == false)) ? "n/a" : (m_nxdnNetwork->isConnected() ? "conn" : "disc"));
|
str += std::string(" nxdn:") + (((m_nxdnNetwork == NULL) || (m_nxdnEnabled == false)) ? "n/a" : (m_nxdnNetwork->isConnected() ? "conn" : "disc"));
|
||||||
str += std::string(" m17:") + (((m_m17Network == NULL) || (m_m17Enabled == false)) ? "n/a" : (m_m17Network->isConnected() ? "conn" : "disc"));
|
str += std::string(" m17:") + (((m_m17Network == NULL) || (m_m17Enabled == false)) ? "n/a" : (m_m17Network->isConnected() ? "conn" : "disc"));
|
||||||
|
#if defined(USE_FM)
|
||||||
str += std::string(" fm:") + (m_fmEnabled ? "conn" : "n/a");
|
str += std::string(" fm:") + (m_fmEnabled ? "conn" : "n/a");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMMDVMHost::buildNetworkHostsString(std::string &str)
|
void CMMDVMHost::buildNetworkHostsString(std::string &str)
|
||||||
|
|
@ -2924,7 +3016,9 @@ void CMMDVMHost::buildNetworkHostsString(std::string &str)
|
||||||
str += std::string(" p25:\"") + ((m_p25Enabled && (m_p25Network != NULL)) ? m_conf.getP25GatewayAddress() : "NONE") + "\"";
|
str += std::string(" p25:\"") + ((m_p25Enabled && (m_p25Network != NULL)) ? m_conf.getP25GatewayAddress() : "NONE") + "\"";
|
||||||
str += std::string(" nxdn:\"") + ((m_nxdnEnabled && (m_nxdnNetwork != NULL)) ? m_conf.getNXDNGatewayAddress() : "NONE") + "\"";
|
str += std::string(" nxdn:\"") + ((m_nxdnEnabled && (m_nxdnNetwork != NULL)) ? m_conf.getNXDNGatewayAddress() : "NONE") + "\"";
|
||||||
str += std::string(" m17:\"") + ((m_m17Enabled && (m_m17Network != NULL)) ? m_conf.getM17GatewayAddress() : "NONE") + "\"";
|
str += std::string(" m17:\"") + ((m_m17Enabled && (m_m17Network != NULL)) ? m_conf.getM17GatewayAddress() : "NONE") + "\"";
|
||||||
|
#if defined(USE_FM)
|
||||||
str += std::string(" fm:\"") + ((m_fmEnabled && (m_fmNetwork != NULL)) ? m_conf.getFMGatewayAddress() : "NONE") + "\"";
|
str += std::string(" fm:\"") + ((m_fmEnabled && (m_fmNetwork != NULL)) ? m_conf.getFMGatewayAddress() : "NONE") + "\"";
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMMDVMHost::writeJSONMode(const std::string& mode)
|
void CMMDVMHost::writeJSONMode(const std::string& mode)
|
||||||
|
|
|
||||||
10
MMDVMHost.h
10
MMDVMHost.h
|
|
@ -70,7 +70,9 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
CPOCSAGControl* m_pocsag;
|
CPOCSAGControl* m_pocsag;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
CFMControl* m_fm;
|
CFMControl* m_fm;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
CAX25Control* m_ax25;
|
CAX25Control* m_ax25;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -83,7 +85,9 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
CPOCSAGNetwork* m_pocsagNetwork;
|
CPOCSAGNetwork* m_pocsagNetwork;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
CFMNetwork* m_fmNetwork;
|
CFMNetwork* m_fmNetwork;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
CAX25Network* m_ax25Network;
|
CAX25Network* m_ax25Network;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -94,7 +98,9 @@ private:
|
||||||
unsigned int m_p25RFModeHang;
|
unsigned int m_p25RFModeHang;
|
||||||
unsigned int m_nxdnRFModeHang;
|
unsigned int m_nxdnRFModeHang;
|
||||||
unsigned int m_m17RFModeHang;
|
unsigned int m_m17RFModeHang;
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int m_fmRFModeHang;
|
unsigned int m_fmRFModeHang;
|
||||||
|
#endif
|
||||||
unsigned int m_dstarNetModeHang;
|
unsigned int m_dstarNetModeHang;
|
||||||
unsigned int m_dmrNetModeHang;
|
unsigned int m_dmrNetModeHang;
|
||||||
unsigned int m_ysfNetModeHang;
|
unsigned int m_ysfNetModeHang;
|
||||||
|
|
@ -104,7 +110,9 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
unsigned int m_pocsagNetModeHang;
|
unsigned int m_pocsagNetModeHang;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int m_fmNetModeHang;
|
unsigned int m_fmNetModeHang;
|
||||||
|
#endif
|
||||||
CTimer m_modeTimer;
|
CTimer m_modeTimer;
|
||||||
CTimer m_dmrTXTimer;
|
CTimer m_dmrTXTimer;
|
||||||
CTimer m_cwIdTimer;
|
CTimer m_cwIdTimer;
|
||||||
|
|
@ -141,7 +149,9 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
bool createPOCSAGNetwork();
|
bool createPOCSAGNetwork();
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
bool createFMNetwork();
|
bool createFMNetwork();
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool createAX25Network();
|
bool createAX25Network();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
52
Modem.cpp
52
Modem.cpp
|
|
@ -88,6 +88,7 @@ const unsigned char MMDVM_POCSAG_DATA = 0x50U;
|
||||||
const unsigned char MMDVM_AX25_DATA = 0x55U;
|
const unsigned char MMDVM_AX25_DATA = 0x55U;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
const unsigned char MMDVM_FM_PARAMS1 = 0x60U;
|
const unsigned char MMDVM_FM_PARAMS1 = 0x60U;
|
||||||
const unsigned char MMDVM_FM_PARAMS2 = 0x61U;
|
const unsigned char MMDVM_FM_PARAMS2 = 0x61U;
|
||||||
const unsigned char MMDVM_FM_PARAMS3 = 0x62U;
|
const unsigned char MMDVM_FM_PARAMS3 = 0x62U;
|
||||||
|
|
@ -95,6 +96,7 @@ const unsigned char MMDVM_FM_PARAMS4 = 0x63U;
|
||||||
const unsigned char MMDVM_FM_DATA = 0x65U;
|
const unsigned char MMDVM_FM_DATA = 0x65U;
|
||||||
const unsigned char MMDVM_FM_STATUS = 0x66U;
|
const unsigned char MMDVM_FM_STATUS = 0x66U;
|
||||||
const unsigned char MMDVM_FM_EOT = 0x67U;
|
const unsigned char MMDVM_FM_EOT = 0x67U;
|
||||||
|
#endif
|
||||||
|
|
||||||
const unsigned char MMDVM_ACK = 0x70U;
|
const unsigned char MMDVM_ACK = 0x70U;
|
||||||
const unsigned char MMDVM_NAK = 0x7FU;
|
const unsigned char MMDVM_NAK = 0x7FU;
|
||||||
|
|
@ -121,7 +123,9 @@ const unsigned char CAP1_YSF = 0x04U;
|
||||||
const unsigned char CAP1_P25 = 0x08U;
|
const unsigned char CAP1_P25 = 0x08U;
|
||||||
const unsigned char CAP1_NXDN = 0x10U;
|
const unsigned char CAP1_NXDN = 0x10U;
|
||||||
const unsigned char CAP1_M17 = 0x20U;
|
const unsigned char CAP1_M17 = 0x20U;
|
||||||
|
#if defined(USE_FM)
|
||||||
const unsigned char CAP1_FM = 0x40U;
|
const unsigned char CAP1_FM = 0x40U;
|
||||||
|
#endif
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
const unsigned char CAP2_POCSAG = 0x01U;
|
const unsigned char CAP2_POCSAG = 0x01U;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -154,7 +158,9 @@ m_m17TXLevel(0.0F),
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagTXLevel(0.0F),
|
m_pocsagTXLevel(0.0F),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmTXLevel(0.0F),
|
m_fmTXLevel(0.0F),
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25TXLevel(0.0F),
|
m_ax25TXLevel(0.0F),
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -176,7 +182,9 @@ m_m17Enabled(false),
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagEnabled(false),
|
m_pocsagEnabled(false),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmEnabled(false),
|
m_fmEnabled(false),
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Enabled(false),
|
m_ax25Enabled(false),
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -205,8 +213,10 @@ m_txM17Data(1000U, "Modem TX M17"),
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_txPOCSAGData(1000U, "Modem TX POCSAG"),
|
m_txPOCSAGData(1000U, "Modem TX POCSAG"),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_rxFMData(5000U, "Modem RX FM"),
|
m_rxFMData(5000U, "Modem RX FM"),
|
||||||
m_txFMData(5000U, "Modem TX FM"),
|
m_txFMData(5000U, "Modem TX FM"),
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_rxAX25Data(1000U, "Modem RX AX.25"),
|
m_rxAX25Data(1000U, "Modem RX AX.25"),
|
||||||
m_txAX25Data(1000U, "Modem TX AX.25"),
|
m_txAX25Data(1000U, "Modem TX AX.25"),
|
||||||
|
|
@ -229,7 +239,9 @@ m_m17Space(0U),
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagSpace(0U),
|
m_pocsagSpace(0U),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmSpace(0U),
|
m_fmSpace(0U),
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Space(0U),
|
m_ax25Space(0U),
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -245,6 +257,7 @@ m_ax25TXDelay(300U),
|
||||||
m_ax25SlotTime(30U),
|
m_ax25SlotTime(30U),
|
||||||
m_ax25PPersist(128U),
|
m_ax25PPersist(128U),
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmCallsign(),
|
m_fmCallsign(),
|
||||||
m_fmCallsignSpeed(20U),
|
m_fmCallsignSpeed(20U),
|
||||||
m_fmCallsignFrequency(1000U),
|
m_fmCallsignFrequency(1000U),
|
||||||
|
|
@ -280,6 +293,7 @@ m_fmRFAudioBoost(1U),
|
||||||
m_fmExtAudioBoost(1U),
|
m_fmExtAudioBoost(1U),
|
||||||
m_fmMaxDevLevel(90.0F),
|
m_fmMaxDevLevel(90.0F),
|
||||||
m_fmExtEnable(false),
|
m_fmExtEnable(false),
|
||||||
|
#endif
|
||||||
m_capabilities1(0x00U),
|
m_capabilities1(0x00U),
|
||||||
m_capabilities2(0x00U)
|
m_capabilities2(0x00U)
|
||||||
{
|
{
|
||||||
|
|
@ -322,7 +336,9 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled,
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagEnabled = pocsagEnabled;
|
m_pocsagEnabled = pocsagEnabled;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmEnabled = fmEnabled;
|
m_fmEnabled = fmEnabled;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Enabled = ax25Enabled;
|
m_ax25Enabled = ax25Enabled;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -341,7 +357,9 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagTXLevel = pocsagTXLevel;
|
m_pocsagTXLevel = pocsagTXLevel;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmTXLevel = fmTXLevel;
|
m_fmTXLevel = fmTXLevel;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25TXLevel = ax25TXLevel;
|
m_ax25TXLevel = ax25TXLevel;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -426,6 +444,7 @@ bool CModem::open()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmEnabled) {
|
if (m_fmEnabled) {
|
||||||
ret = setFMCallsignParams();
|
ret = setFMCallsignParams();
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
|
@ -461,6 +480,7 @@ bool CModem::open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
m_statusTimer.start();
|
m_statusTimer.start();
|
||||||
|
|
||||||
|
|
@ -755,6 +775,7 @@ void CModem::clock(unsigned int ms)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
case MMDVM_FM_DATA: {
|
case MMDVM_FM_DATA: {
|
||||||
if (m_trace)
|
if (m_trace)
|
||||||
CUtils::dump(1U, "RX FM Data", m_buffer, m_length);
|
CUtils::dump(1U, "RX FM Data", m_buffer, m_length);
|
||||||
|
|
@ -796,7 +817,7 @@ void CModem::clock(unsigned int ms)
|
||||||
m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset);
|
m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
case MMDVM_AX25_DATA: {
|
case MMDVM_AX25_DATA: {
|
||||||
if (m_trace)
|
if (m_trace)
|
||||||
|
|
@ -840,7 +861,9 @@ void CModem::clock(unsigned int ms)
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagSpace = 0U;
|
m_pocsagSpace = 0U;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmSpace = 0U;
|
m_fmSpace = 0U;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Space = 0U;
|
m_ax25Space = 0U;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -890,7 +913,9 @@ void CModem::clock(unsigned int ms)
|
||||||
m_p25Space = m_buffer[m_offset + 7U];
|
m_p25Space = m_buffer[m_offset + 7U];
|
||||||
m_nxdnSpace = m_buffer[m_offset + 8U];
|
m_nxdnSpace = m_buffer[m_offset + 8U];
|
||||||
m_m17Space = m_buffer[m_offset + 9U];
|
m_m17Space = m_buffer[m_offset + 9U];
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmSpace = m_buffer[m_offset + 10U];
|
m_fmSpace = m_buffer[m_offset + 10U];
|
||||||
|
#endif
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagSpace = m_buffer[m_offset + 11U];
|
m_pocsagSpace = m_buffer[m_offset + 11U];
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -911,7 +936,9 @@ void CModem::clock(unsigned int ms)
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
m_pocsagSpace = 0U;
|
m_pocsagSpace = 0U;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
m_fmSpace = 0U;
|
m_fmSpace = 0U;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
m_ax25Space = 0U;
|
m_ax25Space = 0U;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1149,6 +1176,7 @@ void CModem::clock(unsigned int ms)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmSpace > 1U && !m_txFMData.isEmpty()) {
|
if (m_fmSpace > 1U && !m_txFMData.isEmpty()) {
|
||||||
unsigned int len = 0U;
|
unsigned int len = 0U;
|
||||||
m_txFMData.getData((unsigned char*)&len, sizeof(unsigned int));
|
m_txFMData.getData((unsigned char*)&len, sizeof(unsigned int));
|
||||||
|
|
@ -1169,6 +1197,7 @@ void CModem::clock(unsigned int ms)
|
||||||
|
|
||||||
m_fmSpace--;
|
m_fmSpace--;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
if (m_ax25Space > 0U && !m_txAX25Data.isEmpty()) {
|
if (m_ax25Space > 0U && !m_txAX25Data.isEmpty()) {
|
||||||
|
|
@ -1323,6 +1352,7 @@ unsigned int CModem::readM17Data(unsigned char* data)
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int CModem::readFMData(unsigned char* data)
|
unsigned int CModem::readFMData(unsigned char* data)
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != NULL);
|
||||||
|
|
@ -1336,6 +1366,7 @@ unsigned int CModem::readFMData(unsigned char* data)
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
unsigned int CModem::readAX25Data(unsigned char* data)
|
unsigned int CModem::readAX25Data(unsigned char* data)
|
||||||
|
|
@ -1642,6 +1673,7 @@ bool CModem::writePOCSAGData(const unsigned char* data, unsigned int length)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int CModem::getFMSpace() const
|
unsigned int CModem::getFMSpace() const
|
||||||
{
|
{
|
||||||
return m_txFMData.freeSpace();
|
return m_txFMData.freeSpace();
|
||||||
|
|
@ -1675,6 +1707,7 @@ bool CModem::writeFMData(const unsigned char* data, unsigned int length)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool CModem::hasAX25Space() const
|
bool CModem::hasAX25Space() const
|
||||||
|
|
@ -2022,10 +2055,12 @@ bool CModem::hasM17() const
|
||||||
return (m_capabilities1 & CAP1_M17) == CAP1_M17;
|
return (m_capabilities1 & CAP1_M17) == CAP1_M17;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
bool CModem::hasFM() const
|
bool CModem::hasFM() const
|
||||||
{
|
{
|
||||||
return (m_capabilities1 & CAP1_FM) == CAP1_FM;
|
return (m_capabilities1 & CAP1_FM) == CAP1_FM;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
bool CModem::hasPOCSAG() const
|
bool CModem::hasPOCSAG() const
|
||||||
|
|
@ -2143,8 +2178,10 @@ bool CModem::readVersion()
|
||||||
::strcat(modeText, " NXDN");
|
::strcat(modeText, " NXDN");
|
||||||
if (hasM17())
|
if (hasM17())
|
||||||
::strcat(modeText, " M17");
|
::strcat(modeText, " M17");
|
||||||
|
#if defined(USE_FM)
|
||||||
if (hasFM())
|
if (hasFM())
|
||||||
::strcat(modeText, " FM");
|
::strcat(modeText, " FM");
|
||||||
|
#endif
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
if (hasPOCSAG())
|
if (hasPOCSAG())
|
||||||
::strcat(modeText, " POCSAG");
|
::strcat(modeText, " POCSAG");
|
||||||
|
|
@ -2276,8 +2313,11 @@ bool CModem::setConfig1()
|
||||||
#else
|
#else
|
||||||
buffer[20U] = 0U;
|
buffer[20U] = 0U;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
buffer[21U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F);
|
buffer[21U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F);
|
||||||
|
#else
|
||||||
|
buffer[21U] = 0U;
|
||||||
|
#endif
|
||||||
buffer[22U] = (unsigned char)m_p25TXHang;
|
buffer[22U] = (unsigned char)m_p25TXHang;
|
||||||
|
|
||||||
buffer[23U] = (unsigned char)m_nxdnTXHang;
|
buffer[23U] = (unsigned char)m_nxdnTXHang;
|
||||||
|
|
@ -2358,8 +2398,10 @@ bool CModem::setConfig2()
|
||||||
buffer[4U] |= 0x08U;
|
buffer[4U] |= 0x08U;
|
||||||
if (m_nxdnEnabled)
|
if (m_nxdnEnabled)
|
||||||
buffer[4U] |= 0x10U;
|
buffer[4U] |= 0x10U;
|
||||||
|
#if defined(USE_FM)
|
||||||
if (m_fmEnabled)
|
if (m_fmEnabled)
|
||||||
buffer[4U] |= 0x20U;
|
buffer[4U] |= 0x20U;
|
||||||
|
#endif
|
||||||
if (m_m17Enabled)
|
if (m_m17Enabled)
|
||||||
buffer[4U] |= 0x40U;
|
buffer[4U] |= 0x40U;
|
||||||
|
|
||||||
|
|
@ -2393,7 +2435,11 @@ bool CModem::setConfig2()
|
||||||
#else
|
#else
|
||||||
buffer[18U] = 0U;
|
buffer[18U] = 0U;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
buffer[19U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F);
|
buffer[19U] = (unsigned char)(m_fmTXLevel * 2.55F + 0.5F);
|
||||||
|
#else
|
||||||
|
buffer[19U] = 0U;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
buffer[20U] = (unsigned char)(m_ax25TXLevel * 2.55F + 0.5F);
|
buffer[20U] = (unsigned char)(m_ax25TXLevel * 2.55F + 0.5F);
|
||||||
#else
|
#else
|
||||||
|
|
@ -2761,6 +2807,7 @@ bool CModem::writeDMRShortLC(const unsigned char* lc)
|
||||||
return m_port->write(buffer, 12U) == 12;
|
return m_port->write(buffer, 12U) == 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
void CModem::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)
|
void CModem::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)
|
||||||
{
|
{
|
||||||
m_fmCallsign = callsign;
|
m_fmCallsign = callsign;
|
||||||
|
|
@ -3050,6 +3097,7 @@ bool CModem::setFMExtParams()
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void CModem::printDebug()
|
void CModem::printDebug()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
23
Modem.h
23
Modem.h
|
|
@ -59,10 +59,12 @@ public:
|
||||||
#endif
|
#endif
|
||||||
void setTransparentDataParams(unsigned int sendFrameType);
|
void setTransparentDataParams(unsigned int sendFrameType);
|
||||||
|
|
||||||
|
#if defined(USE_FM)
|
||||||
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);
|
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);
|
||||||
void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel);
|
void setFMAckParams(const std::string& rfAck, unsigned int ackSpeed, unsigned int ackFrequency, unsigned int ackMinTime, unsigned int ackDelay, float ackLevel);
|
||||||
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 linkMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel);
|
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 linkMode, bool cosInvert, bool noiseSquelch, unsigned int squelchHighThreshold, unsigned int squelchLowThreshold, unsigned int rfAudioBoost, float maxDevLevel);
|
||||||
void setFMExtParams(const std::string& ack, unsigned int audioBoost);
|
void setFMExtParams(const std::string& ack, unsigned int audioBoost);
|
||||||
|
#endif
|
||||||
|
|
||||||
bool open();
|
bool open();
|
||||||
|
|
||||||
|
|
@ -75,7 +77,9 @@ public:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
bool hasPOCSAG() const;
|
bool hasPOCSAG() const;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
bool hasFM() const;
|
bool hasFM() const;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool hasAX25() const;
|
bool hasAX25() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -88,7 +92,9 @@ public:
|
||||||
unsigned int readP25Data(unsigned char* data);
|
unsigned int readP25Data(unsigned char* data);
|
||||||
unsigned int readNXDNData(unsigned char* data);
|
unsigned int readNXDNData(unsigned char* data);
|
||||||
unsigned int readM17Data(unsigned char* data);
|
unsigned int readM17Data(unsigned char* data);
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int readFMData(unsigned char* data);
|
unsigned int readFMData(unsigned char* data);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
unsigned int readAX25Data(unsigned char* data);
|
unsigned int readAX25Data(unsigned char* data);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -103,7 +109,9 @@ public:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
bool hasPOCSAGSpace() const;
|
bool hasPOCSAGSpace() const;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int getFMSpace() const;
|
unsigned int getFMSpace() const;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool hasAX25Space() const;
|
bool hasAX25Space() const;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -125,7 +133,9 @@ public:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
bool writePOCSAGData(const unsigned char* data, unsigned int length);
|
bool writePOCSAGData(const unsigned char* data, unsigned int length);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
bool writeFMData(const unsigned char* data, unsigned int length);
|
bool writeFMData(const unsigned char* data, unsigned int length);
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool writeAX25Data(const unsigned char* data, unsigned int length);
|
bool writeAX25Data(const unsigned char* data, unsigned int length);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -187,7 +197,9 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
float m_pocsagTXLevel;
|
float m_pocsagTXLevel;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
float m_fmTXLevel;
|
float m_fmTXLevel;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
float m_ax25TXLevel;
|
float m_ax25TXLevel;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -209,7 +221,9 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
bool m_pocsagEnabled;
|
bool m_pocsagEnabled;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
bool m_fmEnabled;
|
bool m_fmEnabled;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
bool m_ax25Enabled;
|
bool m_ax25Enabled;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -238,8 +252,10 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
CRingBuffer<unsigned char> m_txPOCSAGData;
|
CRingBuffer<unsigned char> m_txPOCSAGData;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
CRingBuffer<unsigned char> m_rxFMData;
|
CRingBuffer<unsigned char> m_rxFMData;
|
||||||
CRingBuffer<unsigned char> m_txFMData;
|
CRingBuffer<unsigned char> m_txFMData;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
CRingBuffer<unsigned char> m_rxAX25Data;
|
CRingBuffer<unsigned char> m_rxAX25Data;
|
||||||
CRingBuffer<unsigned char> m_txAX25Data;
|
CRingBuffer<unsigned char> m_txAX25Data;
|
||||||
|
|
@ -262,7 +278,9 @@ private:
|
||||||
#if defined(USE_POCSAG)
|
#if defined(USE_POCSAG)
|
||||||
unsigned int m_pocsagSpace;
|
unsigned int m_pocsagSpace;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
unsigned int m_fmSpace;
|
unsigned int m_fmSpace;
|
||||||
|
#endif
|
||||||
#if defined(USE_AX25)
|
#if defined(USE_AX25)
|
||||||
unsigned int m_ax25Space;
|
unsigned int m_ax25Space;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -278,6 +296,7 @@ private:
|
||||||
unsigned int m_ax25SlotTime;
|
unsigned int m_ax25SlotTime;
|
||||||
unsigned int m_ax25PPersist;
|
unsigned int m_ax25PPersist;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(USE_FM)
|
||||||
std::string m_fmCallsign;
|
std::string m_fmCallsign;
|
||||||
unsigned int m_fmCallsignSpeed;
|
unsigned int m_fmCallsignSpeed;
|
||||||
unsigned int m_fmCallsignFrequency;
|
unsigned int m_fmCallsignFrequency;
|
||||||
|
|
@ -313,6 +332,7 @@ private:
|
||||||
unsigned int m_fmExtAudioBoost;
|
unsigned int m_fmExtAudioBoost;
|
||||||
float m_fmMaxDevLevel;
|
float m_fmMaxDevLevel;
|
||||||
bool m_fmExtEnable;
|
bool m_fmExtEnable;
|
||||||
|
#endif
|
||||||
unsigned char m_capabilities1;
|
unsigned char m_capabilities1;
|
||||||
unsigned char m_capabilities2;
|
unsigned char m_capabilities2;
|
||||||
|
|
||||||
|
|
@ -321,11 +341,12 @@ private:
|
||||||
bool setConfig1();
|
bool setConfig1();
|
||||||
bool setConfig2();
|
bool setConfig2();
|
||||||
bool setFrequency();
|
bool setFrequency();
|
||||||
|
#if defined(USE_FM)
|
||||||
bool setFMCallsignParams();
|
bool setFMCallsignParams();
|
||||||
bool setFMAckParams();
|
bool setFMAckParams();
|
||||||
bool setFMMiscParams();
|
bool setFMMiscParams();
|
||||||
bool setFMExtParams();
|
bool setFMExtParams();
|
||||||
|
#endif
|
||||||
void printDebug();
|
void printDebug();
|
||||||
|
|
||||||
RESP_TYPE_MMDVM getResponse();
|
RESP_TYPE_MMDVM getResponse();
|
||||||
|
|
|
||||||
|
|
@ -92,10 +92,14 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command)
|
||||||
m_command = RCD_ENABLE_NXDN;
|
m_command = RCD_ENABLE_NXDN;
|
||||||
else if (m_args.at(1U) == "m17")
|
else if (m_args.at(1U) == "m17")
|
||||||
m_command = RCD_ENABLE_M17;
|
m_command = RCD_ENABLE_M17;
|
||||||
|
#if defined(USE_FM)
|
||||||
else if (m_args.at(1U) == "fm")
|
else if (m_args.at(1U) == "fm")
|
||||||
m_command = RCD_ENABLE_FM;
|
m_command = RCD_ENABLE_FM;
|
||||||
|
#endif
|
||||||
|
#if defined(USE_AX25)
|
||||||
else if (m_args.at(1U) == "ax25")
|
else if (m_args.at(1U) == "ax25")
|
||||||
m_command = RCD_ENABLE_AX25;
|
m_command = RCD_ENABLE_AX25;
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
reply = "KO";
|
reply = "KO";
|
||||||
} else if (m_args.at(0U) == "disable" && m_args.size() >= DISABLE_ARGS) {
|
} else if (m_args.at(0U) == "disable" && m_args.size() >= DISABLE_ARGS) {
|
||||||
|
|
@ -111,12 +115,17 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command)
|
||||||
m_command = RCD_DISABLE_NXDN;
|
m_command = RCD_DISABLE_NXDN;
|
||||||
else if (m_args.at(1U) == "m17")
|
else if (m_args.at(1U) == "m17")
|
||||||
m_command = RCD_DISABLE_M17;
|
m_command = RCD_DISABLE_M17;
|
||||||
|
#if defined(USE_FM)
|
||||||
else if (m_args.at(1U) == "fm")
|
else if (m_args.at(1U) == "fm")
|
||||||
m_command = RCD_DISABLE_FM;
|
m_command = RCD_DISABLE_FM;
|
||||||
|
#endif
|
||||||
|
#if defined(USE_AX25)
|
||||||
else if (m_args.at(1U) == "ax25")
|
else if (m_args.at(1U) == "ax25")
|
||||||
m_command = RCD_DISABLE_AX25;
|
m_command = RCD_DISABLE_AX25;
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
reply = "KO";
|
reply = "KO";
|
||||||
|
#if defined(USE_POCSAG)
|
||||||
} else if (m_args.at(0U) == "page" && m_args.size() >= PAGE_ARGS) {
|
} else if (m_args.at(0U) == "page" && m_args.size() >= PAGE_ARGS) {
|
||||||
// Page command is in the form of "page <ric> <message>"
|
// Page command is in the form of "page <ric> <message>"
|
||||||
m_command = RCD_PAGE;
|
m_command = RCD_PAGE;
|
||||||
|
|
@ -129,6 +138,7 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command)
|
||||||
} else if (m_args.at(0U) == "page_a2" && m_args.size() >= PAGE_ARGS) {
|
} else if (m_args.at(0U) == "page_a2" && m_args.size() >= PAGE_ARGS) {
|
||||||
// Alert2 page command is in the form of "page_a2 <ric> <message>"
|
// Alert2 page command is in the form of "page_a2 <ric> <message>"
|
||||||
m_command = RCD_PAGE_A2;
|
m_command = RCD_PAGE_A2;
|
||||||
|
#endif
|
||||||
} else if (m_args.at(0U) == "cw" && m_args.size() >= CW_ARGS) {
|
} else if (m_args.at(0U) == "cw" && m_args.size() >= CW_ARGS) {
|
||||||
// CW command is in the form of "cw <message>"
|
// CW command is in the form of "cw <message>"
|
||||||
m_command = RCD_CW;
|
m_command = RCD_CW;
|
||||||
|
|
@ -182,11 +192,13 @@ unsigned int CRemoteControl::getArgCount() const
|
||||||
case RCD_MODE_NXDN:
|
case RCD_MODE_NXDN:
|
||||||
case RCD_MODE_M17:
|
case RCD_MODE_M17:
|
||||||
return m_args.size() - SET_MODE_ARGS;
|
return m_args.size() - SET_MODE_ARGS;
|
||||||
|
#if defined(USE_POCSAG)
|
||||||
case RCD_PAGE:
|
case RCD_PAGE:
|
||||||
case RCD_PAGE_BCD:
|
case RCD_PAGE_BCD:
|
||||||
case RCD_PAGE_A1:
|
case RCD_PAGE_A1:
|
||||||
case RCD_PAGE_A2:
|
case RCD_PAGE_A2:
|
||||||
return m_args.size() - 1U;
|
return m_args.size() - 1U;
|
||||||
|
#endif
|
||||||
case RCD_CW:
|
case RCD_CW:
|
||||||
return m_args.size() - 1U;
|
return m_args.size() - 1U;
|
||||||
default:
|
default:
|
||||||
|
|
@ -207,12 +219,14 @@ std::string CRemoteControl::getArgString(unsigned int n) const
|
||||||
case RCD_MODE_M17:
|
case RCD_MODE_M17:
|
||||||
n += SET_MODE_ARGS;
|
n += SET_MODE_ARGS;
|
||||||
break;
|
break;
|
||||||
|
#if defined(USE_POCSAG)
|
||||||
case RCD_PAGE:
|
case RCD_PAGE:
|
||||||
case RCD_PAGE_BCD:
|
case RCD_PAGE_BCD:
|
||||||
case RCD_PAGE_A1:
|
case RCD_PAGE_A1:
|
||||||
case RCD_PAGE_A2:
|
case RCD_PAGE_A2:
|
||||||
n += 1U;
|
n += 1U;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case RCD_CW:
|
case RCD_CW:
|
||||||
n += 1U;
|
n += 1U;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
#ifndef RemoteControl_H
|
#ifndef RemoteControl_H
|
||||||
#define RemoteControl_H
|
#define RemoteControl_H
|
||||||
|
|
||||||
|
#include "Defines.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
@ -36,27 +38,39 @@ enum REMOTE_COMMAND {
|
||||||
RCD_MODE_P25,
|
RCD_MODE_P25,
|
||||||
RCD_MODE_NXDN,
|
RCD_MODE_NXDN,
|
||||||
RCD_MODE_M17,
|
RCD_MODE_M17,
|
||||||
|
#if defined(USE_FM)
|
||||||
RCD_MODE_FM,
|
RCD_MODE_FM,
|
||||||
|
#endif
|
||||||
RCD_ENABLE_DSTAR,
|
RCD_ENABLE_DSTAR,
|
||||||
RCD_ENABLE_DMR,
|
RCD_ENABLE_DMR,
|
||||||
RCD_ENABLE_YSF,
|
RCD_ENABLE_YSF,
|
||||||
RCD_ENABLE_P25,
|
RCD_ENABLE_P25,
|
||||||
RCD_ENABLE_NXDN,
|
RCD_ENABLE_NXDN,
|
||||||
RCD_ENABLE_M17,
|
RCD_ENABLE_M17,
|
||||||
|
#if defined(USE_FM)
|
||||||
RCD_ENABLE_FM,
|
RCD_ENABLE_FM,
|
||||||
|
#endif
|
||||||
|
#if defined(USE_AX25)
|
||||||
RCD_ENABLE_AX25,
|
RCD_ENABLE_AX25,
|
||||||
|
#endif
|
||||||
RCD_DISABLE_DSTAR,
|
RCD_DISABLE_DSTAR,
|
||||||
RCD_DISABLE_DMR,
|
RCD_DISABLE_DMR,
|
||||||
RCD_DISABLE_YSF,
|
RCD_DISABLE_YSF,
|
||||||
RCD_DISABLE_P25,
|
RCD_DISABLE_P25,
|
||||||
RCD_DISABLE_NXDN,
|
RCD_DISABLE_NXDN,
|
||||||
RCD_DISABLE_M17,
|
RCD_DISABLE_M17,
|
||||||
|
#if defined(USE_FM)
|
||||||
RCD_DISABLE_FM,
|
RCD_DISABLE_FM,
|
||||||
|
#endif
|
||||||
|
#if defined(USE_AX25)
|
||||||
RCD_DISABLE_AX25,
|
RCD_DISABLE_AX25,
|
||||||
|
#endif
|
||||||
|
#if defined(USE_POCSAG)
|
||||||
RCD_PAGE,
|
RCD_PAGE,
|
||||||
RCD_PAGE_BCD,
|
RCD_PAGE_BCD,
|
||||||
RCD_PAGE_A1,
|
RCD_PAGE_A1,
|
||||||
RCD_PAGE_A2,
|
RCD_PAGE_A2,
|
||||||
|
#endif
|
||||||
RCD_CW,
|
RCD_CW,
|
||||||
RCD_RELOAD,
|
RCD_RELOAD,
|
||||||
RCD_CONNECTION_STATUS,
|
RCD_CONNECTION_STATUS,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue