Make the compilation of POCSAG conditional.

This commit is contained in:
Jonathan Naylor
2023-06-29 12:46:03 +01:00
parent 11fc87896c
commit b524c14d1d
8 changed files with 155 additions and 60 deletions

View File

@@ -44,7 +44,9 @@ enum SECTION {
SECTION_P25,
SECTION_NXDN,
SECTION_M17,
#if defined(USE_POCSAG)
SECTION_POCSAG,
#endif
SECTION_FM,
#if defined(USE_AX25)
SECTION_AX25,
@@ -55,7 +57,9 @@ enum SECTION {
SECTION_P25_NETWORK,
SECTION_NXDN_NETWORK,
SECTION_M17_NETWORK,
#if defined(USE_POCSAG)
SECTION_POCSAG_NETWORK,
#endif
SECTION_FM_NETWORK,
#if defined(USE_AX25)
SECTION_AX25_NETWORK,
@@ -188,7 +192,9 @@ m_m17SelfOnly(false),
m_m17AllowEncryption(false),
m_m17TXHang(5U),
m_m17ModeHang(10U),
#if defined(USE_POCSAG)
m_pocsagEnabled(false),
#endif
m_pocsagFrequency(0U),
m_fmEnabled(false),
m_fmCallsign(),
@@ -228,7 +234,9 @@ m_fmExtAudioBoost(1U),
m_fmModeHang(10U),
#if defined(USE_AX25)
m_ax25Enabled(false),
#endif
m_ax25TXDelay(300U),
#if defined(USE_AX25)
m_ax25RXTwist(6),
m_ax25SlotTime(30U),
m_ax25PPersist(128U),
@@ -280,6 +288,7 @@ m_m17LocalAddress(),
m_m17LocalPort(0U),
m_m17NetworkModeHang(3U),
m_m17NetworkDebug(false),
#if defined(USE_POCSAG)
m_pocsagNetworkEnabled(false),
m_pocsagGatewayAddress(),
m_pocsagGatewayPort(0U),
@@ -287,6 +296,7 @@ m_pocsagLocalAddress(),
m_pocsagLocalPort(0U),
m_pocsagNetworkModeHang(3U),
m_pocsagNetworkDebug(false),
#endif
m_fmNetworkEnabled(false),
m_fmNetworkProtocol("USRP"),
m_fmGatewayAddress(),
@@ -361,8 +371,10 @@ bool CConf::read()
section = SECTION_NXDN;
else if (::strncmp(buffer, "[M17]", 5U) == 0)
section = SECTION_M17;
#if defined(USE_POCSAG)
else if (::strncmp(buffer, "[POCSAG]", 8U) == 0)
section = SECTION_POCSAG;
#endif
else if (::strncmp(buffer, "[FM]", 4U) == 0)
section = SECTION_FM;
#if defined(USE_AX25)
@@ -381,8 +393,10 @@ bool CConf::read()
section = SECTION_NXDN_NETWORK;
else if (::strncmp(buffer, "[M17 Network]", 13U) == 0)
section = SECTION_M17_NETWORK;
#if defined(USE_POCSAG)
else if (::strncmp(buffer, "[POCSAG Network]", 16U) == 0)
section = SECTION_POCSAG_NETWORK;
#endif
else if (::strncmp(buffer, "[FM Network]", 12U) == 0)
section = SECTION_FM_NETWORK;
#if defined(USE_AX25)
@@ -772,11 +786,13 @@ bool CConf::read()
m_m17TXHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "ModeHang") == 0)
m_m17ModeHang = (unsigned int)::atoi(value);
#if defined(USE_POCSAG)
} 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);
#endif
} else if (section == SECTION_FM) {
if (::strcmp(key, "Enable") == 0)
m_fmEnabled = ::atoi(value) == 1;
@@ -974,6 +990,7 @@ bool CConf::read()
m_m17NetworkModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "Debug") == 0)
m_m17NetworkDebug = ::atoi(value) == 1;
#if defined(USE_POCSAG)
} else if (section == SECTION_POCSAG_NETWORK) {
if (::strcmp(key, "Enable") == 0)
m_pocsagNetworkEnabled = ::atoi(value) == 1;
@@ -989,6 +1006,7 @@ bool CConf::read()
m_pocsagNetworkModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "Debug") == 0)
m_pocsagNetworkDebug = ::atoi(value) == 1;
#endif
} else if (section == SECTION_FM_NETWORK) {
if (::strcmp(key, "Enable") == 0)
m_fmNetworkEnabled = ::atoi(value) == 1;
@@ -1311,10 +1329,12 @@ float CConf::getModemM17TXLevel() const
return m_modemM17TXLevel;
}
#if defined(USE_POCSAG)
float CConf::getModemPOCSAGTXLevel() const
{
return m_modemPOCSAGTXLevel;
}
#endif
float CConf::getModemFMTXLevel() const
{
@@ -1653,6 +1673,7 @@ unsigned int CConf::getM17ModeHang() const
return m_m17ModeHang;
}
#if defined(USE_POCSAG)
bool CConf::getPOCSAGEnabled() const
{
return m_pocsagEnabled;
@@ -1662,6 +1683,7 @@ unsigned int CConf::getPOCSAGFrequency() const
{
return m_pocsagFrequency;
}
#endif
bool CConf::getFMEnabled() const
{
@@ -2105,6 +2127,7 @@ bool CConf::getM17NetworkDebug() const
return m_m17NetworkDebug;
}
#if defined(USE_POCSAG)
bool CConf::getPOCSAGNetworkEnabled() const
{
return m_pocsagNetworkEnabled;
@@ -2139,6 +2162,7 @@ bool CConf::getPOCSAGNetworkDebug() const
{
return m_pocsagNetworkDebug;
}
#endif
bool CConf::getFMNetworkEnabled() const
{

16
Conf.h
View File

@@ -99,7 +99,9 @@ public:
float getModemP25TXLevel() const;
float getModemNXDNTXLevel() const;
float getModemM17TXLevel() const;
#if defined(USE_POCSAG)
float getModemPOCSAGTXLevel() const;
#endif
float getModemFMTXLevel() const;
#if defined(USE_AX25)
float getModemAX25TXLevel() const;
@@ -184,9 +186,11 @@ public:
unsigned int getM17TXHang() const;
unsigned int getM17ModeHang() const;
#if defined(USE_POCSAG)
// The POCSAG section
bool getPOCSAGEnabled() const;
unsigned int getPOCSAGFrequency() const;
#endif
#if defined(USE_AX25)
// The AX.25 section
@@ -294,6 +298,7 @@ public:
unsigned int getM17NetworkModeHang() const;
bool getM17NetworkDebug() const;
#if defined(USE_POCSAG)
// The POCSAG Network section
bool getPOCSAGNetworkEnabled() const;
std::string getPOCSAGGatewayAddress() const;
@@ -302,6 +307,7 @@ public:
unsigned short getPOCSAGLocalPort() const;
unsigned int getPOCSAGNetworkModeHang() const;
bool getPOCSAGNetworkDebug() const;
#endif
// The FM Network section
bool getFMNetworkEnabled() const;
@@ -471,7 +477,9 @@ private:
unsigned int m_m17TXHang;
unsigned int m_m17ModeHang;
#if defined(USE_POCSAG)
bool m_pocsagEnabled;
#endif
unsigned int m_pocsagFrequency;
bool m_fmEnabled;
@@ -511,12 +519,16 @@ private:
unsigned int m_fmExtAudioBoost;
unsigned int m_fmModeHang;
#if defined(USE_AX25)
bool m_ax25Enabled;
#endif
unsigned int m_ax25TXDelay;
#if defined(USE_AX25)
int m_ax25RXTwist;
unsigned int m_ax25SlotTime;
unsigned int m_ax25PPersist;
bool m_ax25Trace;
#endif
bool m_dstarNetworkEnabled;
std::string m_dstarGatewayAddress;
@@ -570,6 +582,7 @@ private:
unsigned int m_m17NetworkModeHang;
bool m_m17NetworkDebug;
#if defined(USE_POCSAG)
bool m_pocsagNetworkEnabled;
std::string m_pocsagGatewayAddress;
unsigned short m_pocsagGatewayPort;
@@ -577,6 +590,7 @@ private:
unsigned short m_pocsagLocalPort;
unsigned int m_pocsagNetworkModeHang;
bool m_pocsagNetworkDebug;
#endif
bool m_fmNetworkEnabled;
std::string m_fmNetworkProtocol;
@@ -591,10 +605,12 @@ private:
unsigned int m_fmNetworkModeHang;
bool m_fmNetworkDebug;
#if defined(USE_AX25)
bool m_ax25NetworkEnabled;
std::string m_ax25NetworkPort;
unsigned int m_ax25NetworkSpeed;
bool m_ax25NetworkDebug;
#endif
bool m_lockFileEnabled;
std::string m_lockFileName;

View File

@@ -152,7 +152,9 @@ m_ysf(NULL),
m_p25(NULL),
m_nxdn(NULL),
m_m17(NULL),
#if defined(USE_POCSAG)
m_pocsag(NULL),
#endif
m_fm(NULL),
#if defined(USE_AX25)
m_ax25(NULL),
@@ -163,7 +165,9 @@ m_ysfNetwork(NULL),
m_p25Network(NULL),
m_nxdnNetwork(NULL),
m_m17Network(NULL),
#if defined(USE_POCSAG)
m_pocsagNetwork(NULL),
#endif
m_fmNetwork(NULL),
#if defined(USE_AX25)
m_ax25Network(NULL),
@@ -182,7 +186,9 @@ m_ysfNetModeHang(3U),
m_p25NetModeHang(3U),
m_nxdnNetModeHang(3U),
m_m17NetModeHang(3U),
#if defined(USE_POCSAG)
m_pocsagNetModeHang(3U),
#endif
m_fmNetModeHang(3U),
m_modeTimer(1000U),
m_dmrTXTimer(1000U),
@@ -355,10 +361,12 @@ int CMMDVMHost::run()
m_fmEnabled = false;
}
#if defined(USE_POCSAG)
if (m_pocsagEnabled && !m_modem->hasPOCSAG()) {
LogWarning("POCSAG enabled in the host but not in the modem firmware, disabling");
m_pocsagEnabled = false;
}
#endif
#if defined(USE_AX25)
if (m_ax25Enabled && !m_modem->hasAX25()) {
@@ -406,11 +414,13 @@ int CMMDVMHost::run()
return 1;
}
#if defined(USE_POCSAG)
if (m_pocsagEnabled && m_conf.getPOCSAGNetworkEnabled()) {
ret = createPOCSAGNetwork();
if (!ret)
return 1;
}
#endif
if (m_fmEnabled && m_conf.getFMNetworkEnabled()) {
ret = createFMNetwork();
@@ -726,6 +736,7 @@ int CMMDVMHost::run()
m_m17 = new CM17Control(m_callsign, can, selfOnly, allowEncryption, m_m17Network, m_timeout, m_duplex, rssi);
}
#if defined(USE_POCSAG)
CTimer pocsagTimer(1000U, 30U);
if (m_pocsagEnabled) {
@@ -739,6 +750,7 @@ int CMMDVMHost::run()
if (m_pocsagNetwork != NULL)
pocsagTimer.start();
}
#endif
#if defined(USE_AX25)
if (m_ax25Enabled) {
@@ -1133,6 +1145,7 @@ int CMMDVMHost::run()
}
}
#if defined(USE_POCSAG)
if (m_pocsag != NULL) {
ret = m_modem->hasPOCSAGSpace();
if (ret) {
@@ -1151,6 +1164,7 @@ int CMMDVMHost::run()
}
}
}
#endif
if (m_fm != NULL) {
unsigned int space = m_modem->getFMSpace();
@@ -1230,8 +1244,10 @@ int CMMDVMHost::run()
m_nxdn->clock(ms);
if (m_m17 != NULL)
m_m17->clock(ms);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->clock(ms);
#endif
if (m_fm != NULL)
m_fm->clock(ms);
@@ -1247,8 +1263,10 @@ int CMMDVMHost::run()
m_nxdnNetwork->clock(ms);
if (m_m17Network != NULL)
m_m17Network->clock(ms);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->clock(ms);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->clock(ms);
@@ -1308,12 +1326,14 @@ int CMMDVMHost::run()
m_dmrTXTimer.stop();
}
#if defined(USE_POCSAG)
pocsagTimer.clock(ms);
if (pocsagTimer.isRunning() && pocsagTimer.hasExpired()) {
assert(m_pocsagNetwork != NULL);
m_pocsagNetwork->enable(m_mode == MODE_IDLE || m_mode == MODE_POCSAG);
pocsagTimer.start();
}
#endif
if (ms < 5U)
CThread::sleep(5U);
@@ -1360,10 +1380,12 @@ int CMMDVMHost::run()
delete m_m17Network;
}
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL) {
m_pocsagNetwork->close();
delete m_pocsagNetwork;
}
#endif
if (m_fmNetwork != NULL) {
m_fmNetwork->close();
@@ -1393,7 +1415,9 @@ int CMMDVMHost::run()
delete m_p25;
delete m_nxdn;
delete m_m17;
#if defined(USE_POCSAG)
delete m_pocsag;
#endif
delete m_fm;
#if defined(USE_AX25)
delete m_ax25;
@@ -1437,7 +1461,11 @@ bool CMMDVMHost::createModem()
float p25TXLevel = m_conf.getModemP25TXLevel();
float nxdnTXLevel = m_conf.getModemNXDNTXLevel();
float m17TXLevel = m_conf.getModemM17TXLevel();
#if defined(USE_POCSAG)
float pocsagTXLevel = m_conf.getModemPOCSAGTXLevel();
#else
float pocsagTXLevel = 0.0F;
#endif
float fmTXLevel = m_conf.getModemFMTXLevel();
#if defined(USE_AX25)
float ax25TXLevel = m_conf.getModemAX25TXLevel();
@@ -1454,7 +1482,11 @@ bool CMMDVMHost::createModem()
unsigned int m17TXHang = m_conf.getM17TXHang();
unsigned int rxFrequency = m_conf.getRXFrequency();
unsigned int txFrequency = m_conf.getTXFrequency();
#if defined(USE_POCSAG)
unsigned int pocsagFrequency = m_conf.getPOCSAGFrequency();
#else
unsigned int pocsagFrequency = txFrequency;
#endif
int rxOffset = m_conf.getModemRXOffset();
int txOffset = m_conf.getModemTXOffset();
int rxDCOffset = m_conf.getModemRXDCOffset();
@@ -1505,7 +1537,9 @@ bool CMMDVMHost::createModem()
LogInfo(" P25 TX Level: %.1f%%", p25TXLevel);
LogInfo(" NXDN TX Level: %.1f%%", nxdnTXLevel);
LogInfo(" M17 TX Level: %.1f%%", m17TXLevel);
#if defined(USE_POCSAG)
LogInfo(" POCSAG TX Level: %.1f%%", pocsagTXLevel);
#endif
LogInfo(" FM TX Level: %.1f%%", fmTXLevel);
#if defined(USE_AX25)
LogInfo(" AX.25 TX Level: %.1f%%", ax25TXLevel);
@@ -1846,6 +1880,7 @@ bool CMMDVMHost::createM17Network()
return true;
}
#if defined(USE_POCSAG)
bool CMMDVMHost::createPOCSAGNetwork()
{
std::string gatewayAddress = m_conf.getPOCSAGGatewayAddress();
@@ -1875,6 +1910,7 @@ bool CMMDVMHost::createPOCSAGNetwork()
return true;
}
#endif
bool CMMDVMHost::createFMNetwork()
{
@@ -1951,7 +1987,9 @@ void CMMDVMHost::readParams()
m_p25Enabled = m_conf.getP25Enabled();
m_nxdnEnabled = m_conf.getNXDNEnabled();
m_m17Enabled = m_conf.getM17Enabled();
#if defined(USE_POCSAG)
m_pocsagEnabled = m_conf.getPOCSAGEnabled();
#endif
m_fmEnabled = m_conf.getFMEnabled();
#if defined(USE_AX25)
m_ax25Enabled = m_conf.getAX25Enabled();
@@ -1972,7 +2010,9 @@ void CMMDVMHost::readParams()
LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled");
LogInfo(" NXDN: %s", m_nxdnEnabled ? "enabled" : "disabled");
LogInfo(" M17: %s", m_m17Enabled ? "enabled" : "disabled");
#if defined(USE_POCSAG)
LogInfo(" POCSAG: %s", m_pocsagEnabled ? "enabled" : "disabled");
#endif
LogInfo(" FM: %s", m_fmEnabled ? "enabled" : "disabled");
#if defined(USE_AX25)
LogInfo(" AX.25: %s", m_ax25Enabled ? "enabled" : "disabled");
@@ -1997,8 +2037,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2017,8 +2059,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2046,8 +2090,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2066,8 +2112,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2099,8 +2147,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2119,8 +2169,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2148,8 +2200,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2168,8 +2222,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2197,8 +2253,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(true);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2217,8 +2275,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(true);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2246,8 +2306,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(true);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2266,8 +2328,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(true);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2295,8 +2359,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(true);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2315,8 +2381,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(true);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2344,8 +2412,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(true);
#if defined(USE_AX25)
@@ -2364,8 +2434,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(true);
#if defined(USE_AX25)
@@ -2397,8 +2469,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2417,8 +2491,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2451,8 +2527,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(false);
if (m_m17Network != NULL)
m_m17Network->enable(false);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(false);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(false);
#if defined(USE_AX25)
@@ -2471,8 +2549,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(false);
if (m_m17 != NULL)
m_m17->enable(false);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(false);
#endif
if (m_fm != NULL)
m_fm->enable(false);
#if defined(USE_AX25)
@@ -2503,8 +2583,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdnNetwork->enable(true);
if (m_m17Network != NULL)
m_m17Network->enable(true);
#if defined(USE_POCSAG)
if (m_pocsagNetwork != NULL)
m_pocsagNetwork->enable(true);
#endif
if (m_fmNetwork != NULL)
m_fmNetwork->enable(true);
#if defined(USE_AX25)
@@ -2523,8 +2605,10 @@ void CMMDVMHost::setMode(unsigned char mode)
m_nxdn->enable(true);
if (m_m17 != NULL)
m_m17->enable(true);
#if defined(USE_POCSAG)
if (m_pocsag != NULL)
m_pocsag->enable(true);
#endif
if (m_fm != NULL)
m_fm->enable(true);
#if defined(USE_AX25)
@@ -2704,6 +2788,7 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
processEnableCommand(m_ax25Enabled, false);
break;
#endif
#if defined(USE_POCSAG)
case RCD_PAGE:
if (m_pocsag != NULL) {
unsigned int ric = m_remoteControl->getArgUInt(0U);
@@ -2746,6 +2831,7 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
m_pocsag->sendPageAlert2(ric, text);
}
break;
#endif
case RCD_CW:
setMode(MODE_IDLE); // Force the modem to go idle so that we can send the CW text.
if (!m_modem->hasTX()) {

View File

@@ -67,7 +67,9 @@ private:
CP25Control* m_p25;
CNXDNControl* m_nxdn;
CM17Control* m_m17;
#if defined(USE_POCSAG)
CPOCSAGControl* m_pocsag;
#endif
CFMControl* m_fm;
#if defined(USE_AX25)
CAX25Control* m_ax25;
@@ -78,7 +80,9 @@ private:
CP25Network* m_p25Network;
INXDNNetwork* m_nxdnNetwork;
CM17Network* m_m17Network;
#if defined(USE_POCSAG)
CPOCSAGNetwork* m_pocsagNetwork;
#endif
CFMNetwork* m_fmNetwork;
#if defined(USE_AX25)
CAX25Network* m_ax25Network;
@@ -97,7 +101,9 @@ private:
unsigned int m_p25NetModeHang;
unsigned int m_nxdnNetModeHang;
unsigned int m_m17NetModeHang;
#if defined(USE_POCSAG)
unsigned int m_pocsagNetModeHang;
#endif
unsigned int m_fmNetModeHang;
CTimer m_modeTimer;
CTimer m_dmrTXTimer;
@@ -132,7 +138,9 @@ private:
bool createP25Network();
bool createNXDNNetwork();
bool createM17Network();
#if defined(USE_POCSAG)
bool createPOCSAGNetwork();
#endif
bool createFMNetwork();
#if defined(USE_AX25)
bool createAX25Network();

View File

@@ -15,13 +15,13 @@
#include "Utils.h"
#include "Log.h"
#if defined(USE_POCSAG)
#include <cstdio>
#include <cassert>
#include <cstring>
#include <ctime>
// #define DUMP_POCSAG
const struct BCD {
char m_c;
uint32_t m_bcd[5U];
@@ -305,10 +305,6 @@ void CPOCSAGControl::clock(unsigned int ms)
m_state = PS_WAITING;
m_frames = 0U;
m_count = 1U;
#if defined(DUMP_POCSAG)
openFile();
#endif
}
m_output.clear();
@@ -363,10 +359,6 @@ void CPOCSAGControl::clock(unsigned int ms)
if (m_state == PS_ENDING) {
LogMessage("POCSAG, transmitted %u frame(s) of data from %u message(s)", m_frames, m_count);
m_state = PS_NONE;
#if defined(DUMP_POCSAG)
closeFile();
#endif
}
}
@@ -503,10 +495,6 @@ void CPOCSAGControl::writeQueue()
m_output.clear();
#if defined(DUMP_POCSAG)
writeFile(data);
#endif
CUtils::dump(1U, "Data to MMDVM", data, len);
assert(len == POCSAG_FRAME_LENGTH_BYTES);
@@ -521,46 +509,6 @@ void CPOCSAGControl::writeQueue()
m_queue.addData(data, len);
}
bool CPOCSAGControl::openFile()
{
if (m_fp != NULL)
return true;
time_t t;
::time(&t);
struct tm* tm = ::localtime(&t);
char name[100U];
::sprintf(name, "POCSAG_%04d%02d%02d_%02d%02d%02d.dat", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
m_fp = ::fopen(name, "wb");
if (m_fp == NULL)
return false;
::fwrite("POCSAG", 1U, 6U, m_fp);
return true;
}
bool CPOCSAGControl::writeFile(const unsigned char* data)
{
if (m_fp == NULL)
return false;
::fwrite(data, 1U, POCSAG_FRAME_LENGTH_BYTES, m_fp);
return true;
}
void CPOCSAGControl::closeFile()
{
if (m_fp != NULL) {
::fclose(m_fp);
m_fp = NULL;
}
}
void CPOCSAGControl::enable(bool enabled)
{
if (!enabled && m_enabled) {
@@ -614,4 +562,5 @@ void CPOCSAGControl::writeJSON(const char* source, unsigned int ric, const char*
WriteJSON("POCSAG", json);
}
#endif

View File

@@ -24,6 +24,8 @@
#include "RingBuffer.h"
#include "Defines.h"
#if defined(USE_POCSAG)
#include <cstdint>
#include <string>
@@ -82,9 +84,6 @@ private:
void packASCII(const std::string& text, std::deque<uint32_t>& buffer) const;
void packNumeric(const std::string& text, std::deque<uint32_t>& buffer) const;
void addBCHAndParity(uint32_t& word) const;
bool openFile();
bool writeFile(const unsigned char* data);
void closeFile();
void decodeROT1(const std::string& in, unsigned int start, std::string& out) const;
@@ -93,3 +92,6 @@ private:
};
#endif
#endif

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018,2019,2020,2021 by Jonathan Naylor G4KLX
* Copyright (C) 2018,2019,2020,2021,2023 by Jonathan Naylor G4KLX
*
* 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
@@ -18,10 +18,11 @@
#include "POCSAGDefines.h"
#include "POCSAGNetwork.h"
#include "Defines.h"
#include "Utils.h"
#include "Log.h"
#if defined(USE_POCSAG)
#include <cstdio>
#include <cassert>
#include <cstring>
@@ -124,3 +125,6 @@ void CPOCSAGNetwork::enable(bool enabled)
m_enabled = enabled;
}
#endif

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018,2020,2021 by Jonathan Naylor G4KLX
* Copyright (C) 2018,2020,2021,2023 by Jonathan Naylor G4KLX
*
* 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
@@ -22,8 +22,11 @@
#include "POCSAGDefines.h"
#include "RingBuffer.h"
#include "UDPSocket.h"
#include "Defines.h"
#include "Timer.h"
#if defined(USE_POCSAG)
#include <cstdint>
#include <string>
@@ -54,3 +57,6 @@ private:
};
#endif
#endif