From 72152cc82b0e57389d33b2385d79a61bfca00e92 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 29 Jun 2023 18:15:33 +0100 Subject: [PATCH] Make the compilation of M17 conditional. --- Conf.cpp | 26 +++++++++++++ Conf.h | 12 ++++++ M17CRC.cpp | 7 +++- M17CRC.h | 9 ++++- M17Control.cpp | 67 ++++---------------------------- M17Control.h | 10 ++--- M17Convolution.cpp | 7 +++- M17Convolution.h | 9 ++++- M17LSF.cpp | 7 +++- M17LSF.h | 9 ++++- M17Network.cpp | 8 +++- M17Network.h | 8 +++- M17Utils.cpp | 7 +++- M17Utils.h | 9 ++++- MMDVMHost.cpp | 96 ++++++++++++++++++++++++++++++++++++++++++++++ MMDVMHost.h | 10 +++++ Modem.cpp | 66 +++++++++++++++++++++++++++++-- Modem.h | 22 +++++++++++ RemoteControl.cpp | 11 ++++++ RemoteControl.h | 6 +++ Sync.cpp | 7 +++- Sync.h | 9 ++++- 22 files changed, 339 insertions(+), 83 deletions(-) diff --git a/Conf.cpp b/Conf.cpp index 3b5abca..1d688dc 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -45,7 +45,9 @@ enum SECTION { SECTION_FUSION, SECTION_P25, SECTION_NXDN, +#if defined(USE_M17) SECTION_M17, +#endif #if defined(USE_POCSAG) SECTION_POCSAG, #endif @@ -62,7 +64,9 @@ enum SECTION { SECTION_FUSION_NETWORK, SECTION_P25_NETWORK, SECTION_NXDN_NETWORK, +#if defined(USE_M17) SECTION_M17_NETWORK, +#endif #if defined(USE_POCSAG) SECTION_POCSAG_NETWORK, #endif @@ -196,11 +200,13 @@ m_nxdnSelfOnly(false), m_nxdnRemoteGateway(false), m_nxdnTXHang(5U), m_nxdnModeHang(10U), +#if defined(USE_M17) m_m17Enabled(false), m_m17CAN(0U), m_m17SelfOnly(false), m_m17AllowEncryption(false), m_m17TXHang(5U), +#endif m_m17ModeHang(10U), #if defined(USE_POCSAG) m_pocsagEnabled(false), @@ -301,13 +307,17 @@ m_nxdnLocalAddress(), m_nxdnLocalPort(0U), m_nxdnNetworkModeHang(3U), m_nxdnNetworkDebug(false), +#if defined(USE_M17) m_m17NetworkEnabled(false), m_m17GatewayAddress(), m_m17GatewayPort(0U), m_m17LocalAddress(), m_m17LocalPort(0U), +#endif m_m17NetworkModeHang(3U), +#if defined(USE_M17) m_m17NetworkDebug(false), +#endif #if defined(USE_POCSAG) m_pocsagNetworkEnabled(false), m_pocsagGatewayAddress(), @@ -395,8 +405,10 @@ bool CConf::read() section = SECTION_P25; else if (::strncmp(buffer, "[NXDN]", 6U) == 0) section = SECTION_NXDN; +#if defined(USE_M17) else if (::strncmp(buffer, "[M17]", 5U) == 0) section = SECTION_M17; +#endif #if defined(USE_POCSAG) else if (::strncmp(buffer, "[POCSAG]", 8U) == 0) section = SECTION_POCSAG; @@ -421,8 +433,10 @@ bool CConf::read() section = SECTION_P25_NETWORK; else if (::strncmp(buffer, "[NXDN Network]", 14U) == 0) section = SECTION_NXDN_NETWORK; +#if defined(USE_M17) else if (::strncmp(buffer, "[M17 Network]", 13U) == 0) section = SECTION_M17_NETWORK; +#endif #if defined(USE_POCSAG) else if (::strncmp(buffer, "[POCSAG Network]", 16U) == 0) section = SECTION_POCSAG_NETWORK; @@ -600,8 +614,10 @@ bool CConf::read() m_modemP25TXLevel = float(::atof(value)); else if (::strcmp(key, "NXDNTXLevel") == 0) m_modemNXDNTXLevel = float(::atof(value)); +#if defined(USE_M17) else if (::strcmp(key, "M17TXLevel") == 0) m_modemM17TXLevel = float(::atof(value)); +#endif #if defined(USE_POCSAG) else if (::strcmp(key, "POCSAGTXLevel") == 0) m_modemPOCSAGTXLevel = float(::atof(value)); @@ -813,6 +829,7 @@ bool CConf::read() m_nxdnTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_nxdnModeHang = (unsigned int)::atoi(value); +#if defined(USE_M17) } else if (section == SECTION_M17) { if (::strcmp(key, "Enable") == 0) m_m17Enabled = ::atoi(value) == 1; @@ -826,6 +843,7 @@ bool CConf::read() m_m17TXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_m17ModeHang = (unsigned int)::atoi(value); +#endif #if defined(USE_POCSAG) } else if (section == SECTION_POCSAG) { if (::strcmp(key, "Enable") == 0) @@ -1019,6 +1037,7 @@ bool CConf::read() m_nxdnNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_nxdnNetworkDebug = ::atoi(value) == 1; +#if defined(USE_M17) } else if (section == SECTION_M17_NETWORK) { if (::strcmp(key, "Enable") == 0) m_m17NetworkEnabled = ::atoi(value) == 1; @@ -1034,6 +1053,7 @@ bool CConf::read() m_m17NetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_m17NetworkDebug = ::atoi(value) == 1; +#endif #if defined(USE_POCSAG) } else if (section == SECTION_POCSAG_NETWORK) { if (::strcmp(key, "Enable") == 0) @@ -1372,10 +1392,12 @@ float CConf::getModemNXDNTXLevel() const return m_modemNXDNTXLevel; } +#if defined(USE_M17) float CConf::getModemM17TXLevel() const { return m_modemM17TXLevel; } +#endif #if defined(USE_POCSAG) float CConf::getModemPOCSAGTXLevel() const @@ -1695,6 +1717,7 @@ unsigned int CConf::getNXDNModeHang() const return m_nxdnModeHang; } +#if defined(USE_M17) bool CConf::getM17Enabled() const { return m_m17Enabled; @@ -1724,6 +1747,7 @@ unsigned int CConf::getM17ModeHang() const { return m_m17ModeHang; } +#endif #if defined(USE_POCSAG) bool CConf::getPOCSAGEnabled() const @@ -2148,6 +2172,7 @@ bool CConf::getNXDNNetworkDebug() const return m_nxdnNetworkDebug; } +#if defined(USE_M17) bool CConf::getM17NetworkEnabled() const { return m_m17NetworkEnabled; @@ -2182,6 +2207,7 @@ bool CConf::getM17NetworkDebug() const { return m_m17NetworkDebug; } +#endif #if defined(USE_POCSAG) bool CConf::getPOCSAGNetworkEnabled() const diff --git a/Conf.h b/Conf.h index 6f9a5c9..7ba8a51 100644 --- a/Conf.h +++ b/Conf.h @@ -100,7 +100,9 @@ public: float getModemYSFTXLevel() const; float getModemP25TXLevel() const; float getModemNXDNTXLevel() const; +#if defined(USE_M17) float getModemM17TXLevel() const; +#endif #if defined(USE_POCSAG) float getModemPOCSAGTXLevel() const; #endif @@ -184,6 +186,7 @@ public: unsigned int getNXDNTXHang() const; unsigned int getNXDNModeHang() const; +#if defined(USE_M17) // The M17 section bool getM17Enabled() const; unsigned int getM17CAN() const; @@ -191,6 +194,7 @@ public: bool getM17AllowEncryption() const; unsigned int getM17TXHang() const; unsigned int getM17ModeHang() const; +#endif #if defined(USE_POCSAG) // The POCSAG section @@ -299,6 +303,7 @@ public: unsigned int getNXDNNetworkModeHang() const; bool getNXDNNetworkDebug() const; +#if defined(USE_M17) // The M17 Network section bool getM17NetworkEnabled() const; std::string getM17GatewayAddress() const; @@ -307,6 +312,7 @@ public: unsigned short getM17LocalPort() const; unsigned int getM17NetworkModeHang() const; bool getM17NetworkDebug() const; +#endif #if defined(USE_POCSAG) // The POCSAG Network section @@ -484,11 +490,13 @@ private: unsigned int m_nxdnTXHang; unsigned int m_nxdnModeHang; +#if defined(USE_M17) bool m_m17Enabled; unsigned int m_m17CAN; bool m_m17SelfOnly; bool m_m17AllowEncryption; unsigned int m_m17TXHang; +#endif unsigned int m_m17ModeHang; #if defined(USE_POCSAG) @@ -598,13 +606,17 @@ private: unsigned int m_nxdnNetworkModeHang; bool m_nxdnNetworkDebug; +#if defined(USE_M17) bool m_m17NetworkEnabled; std::string m_m17GatewayAddress; unsigned short m_m17GatewayPort; std::string m_m17LocalAddress; unsigned short m_m17LocalPort; +#endif unsigned int m_m17NetworkModeHang; +#if defined(USE_M17) bool m_m17NetworkDebug; +#endif #if defined(USE_POCSAG) bool m_pocsagNetworkEnabled; diff --git a/M17CRC.cpp b/M17CRC.cpp index e65b10c..4bea5a8 100644 --- a/M17CRC.cpp +++ b/M17CRC.cpp @@ -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 * it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ #include "M17CRC.h" +#if defined(USE_M17) + #include #include @@ -82,3 +84,6 @@ uint16_t CM17CRC::createCRC16(const unsigned char* in, unsigned int nBytes) return crc; } + +#endif + diff --git a/M17CRC.h b/M17CRC.h index d06a9de..51a1287 100644 --- a/M17CRC.h +++ b/M17CRC.h @@ -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 * it under the terms of the GNU General Public License as published by @@ -19,6 +19,10 @@ #if !defined(M17CRC_H) #define M17CRC_H +#include "Defines.h" + +#if defined(USE_M17) + #include class CM17CRC @@ -32,3 +36,6 @@ private: }; #endif + +#endif + diff --git a/M17Control.cpp b/M17Control.cpp index 40c767c..2dbab37 100644 --- a/M17Control.cpp +++ b/M17Control.cpp @@ -20,6 +20,8 @@ #include "Sync.h" #include "Log.h" +#if defined(USE_M17) + #include #include #include @@ -53,8 +55,6 @@ const unsigned char SCRAMBLER[] = { const unsigned int RSSI_COUNT = 28U; // 28 * 40ms = 1120ms const unsigned int BER_COUNT = 28U * 272U; // 28 * 40ms = 1120ms -// #define DUMP_M17 - const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; #define WRITE_BIT(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) @@ -102,8 +102,7 @@ m_rssiAccum(0U), m_rssiCount(0U), m_bitsCount(0U), m_bitErrsAccum(0U), -m_enabled(true), -m_fp(NULL) +m_enabled(true) { assert(rssiMapper != NULL); @@ -227,9 +226,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) m_rfLSFCount = 0U; m_rfTextBits = 0x00U; ::memset(m_rfText, 0x00U, 4U * M17_META_LENGTH_BYTES); -#if defined(DUMP_M17) - openFile(); -#endif + return true; } else { m_rfState = RS_RF_LATE_ENTRY; @@ -290,9 +287,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) m_rfLSFCount = 0U; m_rfTextBits = 0x00U; ::memset(m_rfText, 0x00U, 4U * M17_META_LENGTH_BYTES); -#if defined(DUMP_M17) - openFile(); -#endif + // Fall through } else { return false; @@ -300,9 +295,6 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) } if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_DATA) { -#if defined(DUMP_M17) - writeFile(data + 2U); -#endif // Keep looking at the running LSF in case of changed META field data unsigned int lich1, lich2, lich3, lich4; bool valid1 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 0U, lich1); @@ -453,9 +445,6 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) } if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_EOT) { -#if defined(DUMP_M17) - writeFile(data + 2U); -#endif if (m_duplex) { unsigned char rfData[M17_FRAME_LENGTH_BYTES + 2U]; @@ -542,10 +531,6 @@ void CM17Control::writeEndRF() if (m_network != NULL) m_network->reset(); } - -#if defined(DUMP_M17) - closeFile(); -#endif } void CM17Control::writeEndNet() @@ -960,46 +945,6 @@ bool CM17Control::checkCallsign(const std::string& callsign) const return m_callsign.compare(0U, len, callsign, 0U, len) == 0; } -bool CM17Control::openFile() -{ - if (m_fp != NULL) - return true; - - time_t t; - ::time(&t); - - struct tm* tm = ::localtime(&t); - - char name[100U]; - ::sprintf(name, "M17_%04d%02d%02d_%02d%02d%02d.ambe", 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("M17", 1U, 3U, m_fp); - - return true; -} - -bool CM17Control::writeFile(const unsigned char* data) -{ - if (m_fp == NULL) - return false; - - ::fwrite(data, 1U, M17_FRAME_LENGTH_BYTES, m_fp); - - return true; -} - -void CM17Control::closeFile() -{ - if (m_fp != NULL) { - ::fclose(m_fp); - m_fp = NULL; - } -} - bool CM17Control::isBusy() const { return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; @@ -1224,3 +1169,5 @@ void CM17Control::writeJSONNet(nlohmann::json& json, const char* action, RPT_NET } } +#endif + diff --git a/M17Control.h b/M17Control.h index a08b1b5..18cac63 100644 --- a/M17Control.h +++ b/M17Control.h @@ -29,6 +29,8 @@ #include "Timer.h" #include "Modem.h" +#if defined(USE_M17) + #include #include @@ -91,7 +93,6 @@ private: unsigned int m_bitsCount; unsigned int m_bitErrsAccum; bool m_enabled; - FILE* m_fp; bool processRFHeader(bool lateEntry); @@ -127,10 +128,9 @@ private: void writeJSONRF(nlohmann::json& json, const char* action, float duration, float ber); void writeJSONNet(nlohmann::json& json, const char* action); void writeJSONNet(nlohmann::json& json, const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest); - - bool openFile(); - bool writeFile(const unsigned char* data); - void closeFile(); }; #endif + +#endif + diff --git a/M17Convolution.cpp b/M17Convolution.cpp index 56e689d..871d476 100644 --- a/M17Convolution.cpp +++ b/M17Convolution.cpp @@ -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 * it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ #include "M17Convolution.h" +#if defined(USE_M17) + #include #include #include @@ -281,3 +283,6 @@ void CM17Convolution::encode(const unsigned char* in, unsigned char* out, unsign k++; } } + +#endif + diff --git a/M17Convolution.h b/M17Convolution.h index 0c5c7c3..9a975cc 100644 --- a/M17Convolution.h +++ b/M17Convolution.h @@ -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 * it under the terms of the GNU General Public License as published by @@ -19,6 +19,10 @@ #if !defined(M17Convolution_H) #define M17Convolution_H +#include "Defines.h" + +#if defined(USE_M17) + #include class CM17Convolution { @@ -49,3 +53,6 @@ private: }; #endif + +#endif + diff --git a/M17LSF.cpp b/M17LSF.cpp index 3034e26..7f321d0 100644 --- a/M17LSF.cpp +++ b/M17LSF.cpp @@ -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 * it under the terms of the GNU General Public License as published by @@ -21,6 +21,8 @@ #include "M17Defines.h" #include "M17CRC.h" +#if defined(USE_M17) + #include #include @@ -216,3 +218,6 @@ CM17LSF& CM17LSF::operator=(const CM17LSF& lsf) return *this; } + +#endif + diff --git a/M17LSF.h b/M17LSF.h index 92aaa2a..1e387e2 100644 --- a/M17LSF.h +++ b/M17LSF.h @@ -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 * it under the terms of the GNU General Public License as published by @@ -19,6 +19,10 @@ #if !defined(M17LSF_H) #define M17LSF_H +#include "Defines.h" + +#if defined(USE_M17) + #include class CM17LSF { @@ -71,3 +75,6 @@ private: }; #endif + +#endif + diff --git a/M17Network.cpp b/M17Network.cpp index cef7b73..4ba4753 100644 --- a/M17Network.cpp +++ b/M17Network.cpp @@ -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 * it under the terms of the GNU General Public License as published by @@ -19,10 +19,11 @@ #include "M17Network.h" #include "M17Defines.h" #include "M17Utils.h" -#include "Defines.h" #include "Utils.h" #include "Log.h" +#if defined(USE_M17) + #include #include #include @@ -213,3 +214,6 @@ void CM17Network::sendPing() m_socket.write(buffer, 4U, m_addr, m_addrLen); } + +#endif + diff --git a/M17Network.h b/M17Network.h index e98ec08..b50a244 100644 --- a/M17Network.h +++ b/M17Network.h @@ -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 * it under the terms of the GNU General Public License as published by @@ -22,8 +22,11 @@ #include "M17Defines.h" #include "RingBuffer.h" #include "UDPSocket.h" +#include "Defines.h" #include "Timer.h" +#if defined(USE_M17) + #include #include @@ -64,3 +67,6 @@ private: }; #endif + +#endif + diff --git a/M17Utils.cpp b/M17Utils.cpp index 4462c9b..8edd96a 100644 --- a/M17Utils.cpp +++ b/M17Utils.cpp @@ -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 * it under the terms of the GNU General Public License as published by @@ -19,6 +19,8 @@ #include "M17Utils.h" #include "M17Defines.h" +#if defined(USE_M17) + #include const std::string M17_CHARS = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-/."; @@ -224,3 +226,6 @@ void CM17Utils::combineFragmentLICHFEC(unsigned int frag1, unsigned int frag2, u WRITE_BIT1(data, offset, b); } } + +#endif + diff --git a/M17Utils.h b/M17Utils.h index c6e27ce..9498078 100644 --- a/M17Utils.h +++ b/M17Utils.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 by Jonathan Naylor G4KLX + * Copyright (C) 2020,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 @@ -19,6 +19,10 @@ #if !defined(M17Utils_H) #define M17Utils_H +#include "Defines.h" + +#if defined(USE_M17) + #include class CM17Utils { @@ -39,3 +43,6 @@ private: }; #endif + +#endif + diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index adfb595..dce6e76 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -153,7 +153,9 @@ m_dmr(NULL), m_ysf(NULL), m_p25(NULL), m_nxdn(NULL), +#if defined(USE_M17) m_m17(NULL), +#endif #if defined(USE_POCSAG) m_pocsag(NULL), #endif @@ -170,7 +172,9 @@ m_dmrNetwork(NULL), m_ysfNetwork(NULL), m_p25Network(NULL), m_nxdnNetwork(NULL), +#if defined(USE_M17) m_m17Network(NULL), +#endif #if defined(USE_POCSAG) m_pocsagNetwork(NULL), #endif @@ -188,7 +192,9 @@ m_dmrRFModeHang(10U), m_ysfRFModeHang(10U), m_p25RFModeHang(10U), m_nxdnRFModeHang(10U), +#if defined(USE_M17) m_m17RFModeHang(10U), +#endif #if defined(USE_FM) m_fmRFModeHang(10U), #endif @@ -199,7 +205,9 @@ m_dmrNetModeHang(3U), m_ysfNetModeHang(3U), m_p25NetModeHang(3U), m_nxdnNetModeHang(3U), +#if defined(USE_M17) m_m17NetModeHang(3U), +#endif #if defined(USE_POCSAG) m_pocsagNetModeHang(3U), #endif @@ -369,10 +377,12 @@ int CMMDVMHost::run() m_nxdnEnabled = false; } +#if defined(USE_M17) if (m_m17Enabled && !m_modem->hasM17()) { LogWarning("M17 enabled in the host but not in the modem firmware, disabling"); m_m17Enabled = false; } +#endif #if defined(USE_FM) if (m_fmEnabled && !m_modem->hasFM()) { @@ -430,11 +440,13 @@ int CMMDVMHost::run() return 1; } +#if defined(USE_M17) if (m_m17Enabled && m_conf.getM17NetworkEnabled()) { ret = createM17Network(); if (!ret) return 1; } +#endif #if defined(USE_POCSAG) if (m_pocsagEnabled && m_conf.getPOCSAGNetworkEnabled()) { @@ -745,6 +757,7 @@ int CMMDVMHost::run() m_nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_timeout, m_duplex, remoteGateway, m_nxdnLookup, rssi); } +#if defined(USE_M17) if (m_m17Enabled) { bool selfOnly = m_conf.getM17SelfOnly(); unsigned int can = m_conf.getM17CAN(); @@ -761,6 +774,7 @@ int CMMDVMHost::run() m_m17 = new CM17Control(m_callsign, can, selfOnly, allowEncryption, m_m17Network, m_timeout, m_duplex, rssi); } +#endif #if defined(USE_POCSAG) CTimer pocsagTimer(1000U, 30U); @@ -980,6 +994,7 @@ int CMMDVMHost::run() } } +#if defined(USE_M17) len = m_modem->readM17Data(data); if (m_m17 != NULL && len > 0U) { if (m_mode == MODE_IDLE) { @@ -996,6 +1011,7 @@ int CMMDVMHost::run() LogWarning("M17 modem data received when in mode %u", m_mode); } } +#endif #if defined(USE_FM) len = m_modem->readFMData(data); @@ -1160,6 +1176,7 @@ int CMMDVMHost::run() } } +#if defined(USE_M17) if (m_m17 != NULL) { ret = m_modem->hasM17Space(); if (ret) { @@ -1178,6 +1195,7 @@ int CMMDVMHost::run() } } } +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) { @@ -1280,8 +1298,10 @@ int CMMDVMHost::run() m_p25->clock(ms); if (m_nxdn != NULL) m_nxdn->clock(ms); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->clock(ms); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->clock(ms); @@ -1303,8 +1323,10 @@ int CMMDVMHost::run() m_p25Network->clock(ms); if (m_nxdnNetwork != NULL) m_nxdnNetwork->clock(ms); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->clock(ms); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->clock(ms); @@ -1421,10 +1443,12 @@ int CMMDVMHost::run() delete m_nxdnNetwork; } +#if defined(USE_M17) if (m_m17Network != NULL) { m_m17Network->close(); delete m_m17Network; } +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) { @@ -1464,7 +1488,9 @@ int CMMDVMHost::run() delete m_ysf; delete m_p25; delete m_nxdn; +#if defined(USE_M17) delete m_m17; +#endif #if defined(USE_POCSAG) delete m_pocsag; #endif @@ -1516,7 +1542,11 @@ bool CMMDVMHost::createModem() float ysfTXLevel = m_conf.getModemYSFTXLevel(); float p25TXLevel = m_conf.getModemP25TXLevel(); float nxdnTXLevel = m_conf.getModemNXDNTXLevel(); +#if defined(USE_M17) float m17TXLevel = m_conf.getModemM17TXLevel(); +#else + float m17TXLevel = 0.0F; +#endif #if defined(USE_POCSAG) float pocsagTXLevel = m_conf.getModemPOCSAGTXLevel(); #else @@ -1539,7 +1569,9 @@ bool CMMDVMHost::createModem() unsigned int ysfTXHang = m_conf.getFusionTXHang(); unsigned int p25TXHang = m_conf.getP25TXHang(); unsigned int nxdnTXHang = m_conf.getNXDNTXHang(); +#if defined(USE_M17) unsigned int m17TXHang = m_conf.getM17TXHang(); +#endif unsigned int rxFrequency = m_conf.getRXFrequency(); unsigned int txFrequency = m_conf.getTXFrequency(); #if defined(USE_POCSAG) @@ -1598,7 +1630,9 @@ bool CMMDVMHost::createModem() LogInfo(" YSF TX Level: %.1f%%", ysfTXLevel); LogInfo(" P25 TX Level: %.1f%%", p25TXLevel); LogInfo(" NXDN TX Level: %.1f%%", nxdnTXLevel); +#if defined(USE_M17) LogInfo(" M17 TX Level: %.1f%%", m17TXLevel); +#endif #if defined(USE_POCSAG) LogInfo(" POCSAG TX Level: %.1f%%", pocsagTXLevel); #endif @@ -1635,7 +1669,9 @@ bool CMMDVMHost::createModem() m_modem->setYSFParams(lowDeviation, ysfTXHang); m_modem->setP25Params(p25TXHang); m_modem->setNXDNParams(nxdnTXHang); +#if defined(USE_M17) m_modem->setM17Params(m17TXHang); +#endif #if defined(USE_AX25) m_modem->setAX25Params(rxTwist, ax25TXDelay, ax25SlotTime, ax25PPersist); #endif @@ -1919,6 +1955,7 @@ bool CMMDVMHost::createNXDNNetwork() return true; } +#if defined(USE_M17) bool CMMDVMHost::createM17Network() { std::string gatewayAddress = m_conf.getM17GatewayAddress(); @@ -1947,6 +1984,7 @@ bool CMMDVMHost::createM17Network() return true; } +#endif #if defined(USE_POCSAG) bool CMMDVMHost::createPOCSAGNetwork() @@ -2058,7 +2096,9 @@ void CMMDVMHost::readParams() m_ysfEnabled = m_conf.getFusionEnabled(); m_p25Enabled = m_conf.getP25Enabled(); m_nxdnEnabled = m_conf.getNXDNEnabled(); +#if defined(USE_M17) m_m17Enabled = m_conf.getM17Enabled(); +#endif #if defined(USE_POCSAG) m_pocsagEnabled = m_conf.getPOCSAGEnabled(); #endif @@ -2085,7 +2125,9 @@ void CMMDVMHost::readParams() LogInfo(" YSF: %s", m_ysfEnabled ? "enabled" : "disabled"); LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled"); LogInfo(" NXDN: %s", m_nxdnEnabled ? "enabled" : "disabled"); +#if defined(USE_M17) LogInfo(" M17: %s", m_m17Enabled ? "enabled" : "disabled"); +#endif #if defined(USE_POCSAG) LogInfo(" POCSAG: %s", m_pocsagEnabled ? "enabled" : "disabled"); #endif @@ -2115,8 +2157,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2141,8 +2185,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2176,8 +2222,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2202,8 +2250,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2241,8 +2291,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2267,8 +2319,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2302,8 +2356,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(true); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2328,8 +2384,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(true); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2363,8 +2421,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2389,8 +2449,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(true); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2424,8 +2486,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(true); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2450,8 +2514,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(true); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2485,8 +2551,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(true); @@ -2511,8 +2579,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(true); @@ -2546,8 +2616,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2572,8 +2644,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2611,8 +2685,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2637,8 +2713,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2677,8 +2755,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2703,8 +2783,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(false); if (m_nxdn != NULL) m_nxdn->enable(false); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2741,8 +2823,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25Network->enable(true); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); +#if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(true); +#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(true); @@ -2767,8 +2851,10 @@ void CMMDVMHost::setMode(unsigned char mode) m_p25->enable(true); if (m_nxdn != NULL) m_nxdn->enable(true); +#if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(true); +#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(true); @@ -2856,10 +2942,12 @@ void CMMDVMHost::remoteControl(const std::string& commandString) if (m_nxdn != NULL) processModeCommand(MODE_NXDN, m_nxdnRFModeHang); break; +#if defined(USE_M17) case RCD_MODE_M17: if (m_m17 != NULL) processModeCommand(MODE_M17, m_m17RFModeHang); break; +#endif #if defined(USE_FM) case RCD_MODE_FM: if (m_fmEnabled) @@ -2898,12 +2986,14 @@ void CMMDVMHost::remoteControl(const std::string& commandString) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); break; +#if defined(USE_M17) case RCD_ENABLE_M17: if (m_m17 != NULL && !m_m17Enabled) processEnableCommand(m_m17Enabled, true); if (m_m17Network != NULL) m_m17Network->enable(true); break; +#endif #if defined(USE_FM) case RCD_ENABLE_FM: if (!m_fmEnabled) @@ -2948,12 +3038,14 @@ void CMMDVMHost::remoteControl(const std::string& commandString) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); break; +#if defined(USE_M17) case RCD_DISABLE_M17: if (m_m17 != NULL && m_m17Enabled) processEnableCommand(m_m17Enabled, false); if (m_m17Network != NULL) m_m17Network->enable(false); break; +#endif #if defined(USE_FM) case RCD_DISABLE_FM: if (m_fmEnabled) @@ -3070,7 +3162,9 @@ void CMMDVMHost::buildNetworkStatusString(std::string &str) str += std::string(" ysf:") + (((m_ysfNetwork == NULL) || !m_ysfEnabled) ? "n/a" : (m_ysfNetwork->isConnected() ? "conn" : "disc")); str += std::string(" p25:") + (((m_p25Network == NULL) || !m_p25Enabled) ? "n/a" : (m_p25Network->isConnected() ? "conn" : "disc")); str += std::string(" nxdn:") + (((m_nxdnNetwork == NULL) || !m_nxdnEnabled) ? "n/a" : (m_nxdnNetwork->isConnected() ? "conn" : "disc")); +#if defined(USE_M17) str += std::string(" m17:") + (((m_m17Network == NULL) || !m_m17Enabled) ? "n/a" : (m_m17Network->isConnected() ? "conn" : "disc")); +#endif #if defined(USE_FM) str += std::string(" fm:") + (m_fmEnabled ? "conn" : "n/a"); #endif @@ -3109,7 +3203,9 @@ void CMMDVMHost::buildNetworkHostsString(std::string &str) str += std::string(" ysf:\"") + ((m_ysfEnabled && (m_ysfNetwork != NULL)) ? m_conf.getFusionNetworkGatewayAddress() : "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") + "\""; +#if defined(USE_M17) str += std::string(" m17:\"") + ((m_m17Enabled && (m_m17Network != NULL)) ? m_conf.getM17GatewayAddress() : "NONE") + "\""; +#endif #if defined(USE_FM) str += std::string(" fm:\"") + ((m_fmEnabled && (m_fmNetwork != NULL)) ? m_conf.getFMGatewayAddress() : "NONE") + "\""; #endif diff --git a/MMDVMHost.h b/MMDVMHost.h index f699a21..6f2f603 100644 --- a/MMDVMHost.h +++ b/MMDVMHost.h @@ -68,7 +68,9 @@ private: CYSFControl* m_ysf; CP25Control* m_p25; CNXDNControl* m_nxdn; +#if defined(USE_M17) CM17Control* m_m17; +#endif #if defined(USE_POCSAG) CPOCSAGControl* m_pocsag; #endif @@ -85,7 +87,9 @@ private: CYSFNetwork* m_ysfNetwork; CP25Network* m_p25Network; INXDNNetwork* m_nxdnNetwork; +#if defined(USE_M17) CM17Network* m_m17Network; +#endif #if defined(USE_POCSAG) CPOCSAGNetwork* m_pocsagNetwork; #endif @@ -103,7 +107,9 @@ private: unsigned int m_ysfRFModeHang; unsigned int m_p25RFModeHang; unsigned int m_nxdnRFModeHang; +#if defined(USE_M17) unsigned int m_m17RFModeHang; +#endif #if defined(USE_FM) unsigned int m_fmRFModeHang; #endif @@ -114,7 +120,9 @@ private: unsigned int m_ysfNetModeHang; unsigned int m_p25NetModeHang; unsigned int m_nxdnNetModeHang; +#if defined(USE_M17) unsigned int m_m17NetModeHang; +#endif #if defined(USE_POCSAG) unsigned int m_pocsagNetModeHang; #endif @@ -155,7 +163,9 @@ private: bool createYSFNetwork(); bool createP25Network(); bool createNXDNNetwork(); +#if defined(USE_M17) bool createM17Network(); +#endif #if defined(USE_POCSAG) bool createPOCSAGNetwork(); #endif diff --git a/Modem.cpp b/Modem.cpp index eb4d684..c784c3c 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -76,11 +76,13 @@ const unsigned char MMDVM_P25_LOST = 0x32U; const unsigned char MMDVM_NXDN_DATA = 0x40U; const unsigned char MMDVM_NXDN_LOST = 0x41U; +#if defined(USE_M17) const unsigned char MMDVM_M17_LINK_SETUP = 0x45U; const unsigned char MMDVM_M17_STREAM = 0x46U; const unsigned char MMDVM_M17_PACKET = 0x47U; const unsigned char MMDVM_M17_LOST = 0x48U; const unsigned char MMDVM_M17_EOT = 0x49U; +#endif #if defined(USE_POCSAG) const unsigned char MMDVM_POCSAG_DATA = 0x50U; @@ -126,7 +128,9 @@ const unsigned char CAP1_DMR = 0x02U; const unsigned char CAP1_YSF = 0x04U; const unsigned char CAP1_P25 = 0x08U; const unsigned char CAP1_NXDN = 0x10U; +#if defined(USE_M17) const unsigned char CAP1_M17 = 0x20U; +#endif #if defined(USE_FM) const unsigned char CAP1_FM = 0x40U; #endif @@ -144,7 +148,9 @@ m_ysfLoDev(false), m_ysfTXHang(4U), m_p25TXHang(5U), m_nxdnTXHang(5U), +#if defined(USE_M17) m_m17TXHang(5U), +#endif m_duplex(duplex), m_rxInvert(rxInvert), m_txInvert(txInvert), @@ -160,7 +166,9 @@ m_dmrTXLevel(0.0F), m_ysfTXLevel(0.0F), m_p25TXLevel(0.0F), m_nxdnTXLevel(0.0F), +#if defined(USE_M17) m_m17TXLevel(0.0F), +#endif #if defined(USE_POCSAG) m_pocsagTXLevel(0.0F), #endif @@ -186,7 +194,9 @@ m_dmrEnabled(false), m_ysfEnabled(false), m_p25Enabled(false), m_nxdnEnabled(false), +#if defined(USE_M17) m_m17Enabled(false), +#endif #if defined(USE_POCSAG) m_pocsagEnabled(false), #endif @@ -218,8 +228,10 @@ m_rxP25Data(1000U, "Modem RX P25"), m_txP25Data(1000U, "Modem TX P25"), m_rxNXDNData(1000U, "Modem RX NXDN"), m_txNXDNData(1000U, "Modem TX NXDN"), +#if defined(USE_M17) m_rxM17Data(1000U, "Modem RX M17"), m_txM17Data(1000U, "Modem TX M17"), +#endif #if defined(USE_POCSAG) m_txPOCSAGData(1000U, "Modem TX POCSAG"), #endif @@ -247,7 +259,9 @@ m_dmrSpace2(0U), m_ysfSpace(0U), m_p25Space(0U), m_nxdnSpace(0U), +#if defined(USE_M17) m_m17Space(0U), +#endif #if defined(USE_POCSAG) m_pocsagSpace(0U), #endif @@ -346,7 +360,9 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, m_ysfEnabled = ysfEnabled; m_p25Enabled = p25Enabled; m_nxdnEnabled = nxdnEnabled; +#if defined(USE_M17) m_m17Enabled = m17Enabled; +#endif #if defined(USE_POCSAG) m_pocsagEnabled = pocsagEnabled; #endif @@ -369,7 +385,9 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo m_ysfTXLevel = ysfTXLevel; m_p25TXLevel = p25TXLevel; m_nxdnTXLevel = nxdnTXLevel; +#if defined(USE_M17) m_m17TXLevel = m17TXLevel; +#endif #if defined(USE_POCSAG) m_pocsagTXLevel = pocsagTXLevel; #endif @@ -404,10 +422,12 @@ void CModem::setNXDNParams(unsigned int txHang) m_nxdnTXHang = txHang; } +#if defined(USE_M17) void CModem::setM17Params(unsigned int txHang) { m_m17TXHang = txHang; } +#endif #if defined(USE_AX25) void CModem::setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist) @@ -741,6 +761,7 @@ void CModem::clock(unsigned int ms) } break; +#if defined(USE_M17) case MMDVM_M17_LINK_SETUP: { if (m_trace) CUtils::dump(1U, "RX M17 Link Setup", m_buffer, m_length); @@ -792,7 +813,7 @@ void CModem::clock(unsigned int ms) m_rxM17Data.addData(&data, 1U); } break; - +#endif #if defined(USE_FM) case MMDVM_FM_DATA: { if (m_trace) @@ -875,7 +896,9 @@ void CModem::clock(unsigned int ms) m_p25Space = 0U; m_nxdnSpace = 0U; +#if defined(USE_M17) m_m17Space = 0U; +#endif #if defined(USE_POCSAG) m_pocsagSpace = 0U; #endif @@ -901,8 +924,10 @@ void CModem::clock(unsigned int ms) if (m_length > (m_offset + 9U)) m_pocsagSpace = m_buffer[m_offset + 9U]; #endif +#if defined(USE_M17) if (m_length > (m_offset + 10U)) m_m17Space = m_buffer[m_offset + 10U]; +#endif } break; @@ -933,7 +958,9 @@ void CModem::clock(unsigned int ms) m_ysfSpace = m_buffer[m_offset + 6U]; m_p25Space = m_buffer[m_offset + 7U]; m_nxdnSpace = m_buffer[m_offset + 8U]; +#if defined(USE_M17) m_m17Space = m_buffer[m_offset + 9U]; +#endif #if defined(USE_FM) m_fmSpace = m_buffer[m_offset + 10U]; #endif @@ -955,7 +982,9 @@ void CModem::clock(unsigned int ms) m_ysfSpace = 0U; m_p25Space = 0U; m_nxdnSpace = 0U; +#if defined(USE_M17) m_m17Space = 0U; +#endif #if defined(USE_POCSAG) m_pocsagSpace = 0U; #endif @@ -1154,6 +1183,7 @@ void CModem::clock(unsigned int ms) m_nxdnSpace--; } +#if defined(USE_M17) if (m_m17Space > 1U && !m_txM17Data.isEmpty()) { unsigned char len = 0U; m_txM17Data.getData(&len, 1U); @@ -1181,6 +1211,7 @@ void CModem::clock(unsigned int ms) m_m17Space--; } +#endif #if defined(USE_POCSAG) if (m_pocsagSpace > 1U && !m_txPOCSAGData.isEmpty()) { @@ -1365,6 +1396,7 @@ unsigned int CModem::readNXDNData(unsigned char* data) return len; } +#if defined(USE_M17) unsigned int CModem::readM17Data(unsigned char* data) { assert(data != NULL); @@ -1378,6 +1410,7 @@ unsigned int CModem::readM17Data(unsigned char* data) return len; } +#endif #if defined(USE_FM) unsigned int CModem::readFMData(unsigned char* data) @@ -1632,6 +1665,7 @@ bool CModem::writeNXDNData(const unsigned char* data, unsigned int length) return true; } +#if defined(USE_M17) bool CModem::hasM17Space() const { unsigned int space = m_txM17Data.freeSpace() / (M17_FRAME_LENGTH_BYTES + 4U); @@ -1672,6 +1706,7 @@ bool CModem::writeM17Data(const unsigned char* data, unsigned int length) return true; } +#endif #if defined(USE_POCSAG) bool CModem::hasPOCSAGSpace() const @@ -1945,6 +1980,7 @@ bool CModem::writeNXDNInfo(const char* source, bool group, unsigned int dest, co return m_port->write(buffer, 31U) != 31; } +#if defined(USE_M17) bool CModem::writeM17Info(const char* source, const char* dest, const char* type) { assert(m_port != NULL); @@ -1968,6 +2004,7 @@ bool CModem::writeM17Info(const char* source, const char* dest, const char* type return m_port->write(buffer, 23U) != 23; } +#endif #if defined(USE_POCSAG) bool CModem::writePOCSAGInfo(unsigned int ric, const std::string& message) @@ -2083,10 +2120,12 @@ bool CModem::hasNXDN() const return (m_capabilities1 & CAP1_NXDN) == CAP1_NXDN; } +#if defined(USE_M17) bool CModem::hasM17() const { return (m_capabilities1 & CAP1_M17) == CAP1_M17; } +#endif #if defined(USE_FM) bool CModem::hasFM() const @@ -2176,7 +2215,10 @@ bool CModem::readVersion() #if defined(USE_DSTAR) m_capabilities1 |= CAP1_DSTAR; #endif - m_capabilities1 |= CAP1_DMR | CAP1_YSF | CAP1_P25 | CAP1_NXDN | CAP1_M17; + m_capabilities1 |= CAP1_DMR | CAP1_YSF | CAP1_P25 | CAP1_NXDN; +#if defined(USE_M17) + m_capabilities1 |= CAP1_M17; +#endif #if defined(USE_POCSAG) m_capabilities2 |= CAP2_POCSAG; #endif @@ -2214,8 +2256,10 @@ bool CModem::readVersion() ::strcat(modeText, " P25"); if (hasNXDN()) ::strcat(modeText, " NXDN"); +#if defined(USE_M17) if (hasM17()) ::strcat(modeText, " M17"); +#endif #if defined(USE_FM) if (hasFM()) ::strcat(modeText, " FM"); @@ -2320,8 +2364,10 @@ bool CModem::setConfig1() if (m_pocsagEnabled) buffer[4U] |= 0x20U; #endif +#if defined(USE_M17) if (m_m17Enabled) buffer[4U] |= 0x40U; +#endif buffer[5U] = m_txDelay / 10U; // In 10ms units @@ -2366,9 +2412,13 @@ bool CModem::setConfig1() buffer[23U] = (unsigned char)m_nxdnTXHang; +#if defined(USE_M17) buffer[24U] = (unsigned char)(m_m17TXLevel * 2.55F + 0.5F); - buffer[25U] = (unsigned char)m_m17TXHang; +#else + buffer[24U] = 0U; + buffer[25U] = 0U; +#endif // CUtils::dump(1U, "Written", buffer, 26U); @@ -2448,8 +2498,10 @@ bool CModem::setConfig2() if (m_fmEnabled) buffer[4U] |= 0x20U; #endif +#if defined(USE_M17) if (m_m17Enabled) buffer[4U] |= 0x40U; +#endif buffer[5U] = 0x00U; #if defined(USE_POCSAG) @@ -2479,7 +2531,11 @@ bool CModem::setConfig2() buffer[14U] = (unsigned char)(m_ysfTXLevel * 2.55F + 0.5F); buffer[15U] = (unsigned char)(m_p25TXLevel * 2.55F + 0.5F); buffer[16U] = (unsigned char)(m_nxdnTXLevel * 2.55F + 0.5F); +#if defined(USE_M17) buffer[17U] = (unsigned char)(m_m17TXLevel * 2.55F + 0.5F); +#else + buffer[17U] = 0U; +#endif #if defined(USE_POCSAG) buffer[18U] = (unsigned char)(m_pocsagTXLevel * 2.55F + 0.5F); #else @@ -2501,7 +2557,11 @@ bool CModem::setConfig2() buffer[23U] = (unsigned char)m_ysfTXHang; buffer[24U] = (unsigned char)m_p25TXHang; buffer[25U] = (unsigned char)m_nxdnTXHang; +#if defined(USE_M17) buffer[26U] = (unsigned char)m_m17TXHang; +#else + buffer[26U] = 0U; +#endif buffer[27U] = 0x00U; buffer[28U] = 0x00U; diff --git a/Modem.h b/Modem.h index 1645303..8b87507 100644 --- a/Modem.h +++ b/Modem.h @@ -53,7 +53,9 @@ public: void setYSFParams(bool loDev, unsigned int txHang); void setP25Params(unsigned int txHang); void setNXDNParams(unsigned int txHang); +#if defined(USE_M17) void setM17Params(unsigned int txHang); +#endif #if defined(USE_AX25) void setAX25Params(int rxTwist, unsigned int txDelay, unsigned int slotTime, unsigned int pPersist); #endif @@ -75,7 +77,9 @@ public: bool hasYSF() const; bool hasP25() const; bool hasNXDN() const; +#if defined(USE_M17) bool hasM17() const; +#endif #if defined(USE_POCSAG) bool hasPOCSAG() const; #endif @@ -95,7 +99,9 @@ public: unsigned int readYSFData(unsigned char* data); unsigned int readP25Data(unsigned char* data); unsigned int readNXDNData(unsigned char* data); +#if defined(USE_M17) unsigned int readM17Data(unsigned char* data); +#endif #if defined(USE_FM) unsigned int readFMData(unsigned char* data); #endif @@ -111,7 +117,9 @@ public: bool hasYSFSpace() const; bool hasP25Space() const; bool hasNXDNSpace() const; +#if defined(USE_M17) bool hasM17Space() const; +#endif #if defined(USE_POCSAG) bool hasPOCSAGSpace() const; #endif @@ -138,7 +146,9 @@ public: bool writeYSFData(const unsigned char* data, unsigned int length); bool writeP25Data(const unsigned char* data, unsigned int length); bool writeNXDNData(const unsigned char* data, unsigned int length); +#if defined(USE_M17) bool writeM17Data(const unsigned char* data, unsigned int length); +#endif #if defined(USE_POCSAG) bool writePOCSAGData(const unsigned char* data, unsigned int length); #endif @@ -156,7 +166,9 @@ public: bool writeYSFInfo(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); bool writeP25Info(const char* source, bool group, unsigned int dest, const char* type); bool writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type); +#if defined(USE_M17) bool writeM17Info(const char* source, const char* dest, const char* type); +#endif #if defined(USE_POCSAG) bool writePOCSAGInfo(unsigned int ric, const std::string& message); #endif @@ -190,7 +202,9 @@ private: unsigned int m_ysfTXHang; unsigned int m_p25TXHang; unsigned int m_nxdnTXHang; +#if defined(USE_M17) unsigned int m_m17TXHang; +#endif bool m_duplex; bool m_rxInvert; bool m_txInvert; @@ -206,7 +220,9 @@ private: float m_ysfTXLevel; float m_p25TXLevel; float m_nxdnTXLevel; +#if defined(USE_M17) float m_m17TXLevel; +#endif #if defined(USE_POCSAG) float m_pocsagTXLevel; #endif @@ -232,7 +248,9 @@ private: bool m_ysfEnabled; bool m_p25Enabled; bool m_nxdnEnabled; +#if defined(USE_M17) bool m_m17Enabled; +#endif #if defined(USE_POCSAG) bool m_pocsagEnabled; #endif @@ -265,8 +283,10 @@ private: CRingBuffer m_txP25Data; CRingBuffer m_rxNXDNData; CRingBuffer m_txNXDNData; +#if defined(USE_M17) CRingBuffer m_rxM17Data; CRingBuffer m_txM17Data; +#endif #if defined(USE_POCSAG) CRingBuffer m_txPOCSAGData; #endif @@ -294,7 +314,9 @@ private: unsigned int m_ysfSpace; unsigned int m_p25Space; unsigned int m_nxdnSpace; +#if defined(USE_M17) unsigned int m_m17Space; +#endif #if defined(USE_POCSAG) unsigned int m_pocsagSpace; #endif diff --git a/RemoteControl.cpp b/RemoteControl.cpp index 76e8bf4..92ea21c 100644 --- a/RemoteControl.cpp +++ b/RemoteControl.cpp @@ -77,8 +77,10 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command) m_command = RCD_MODE_P25; else if (m_args.at(1U) == "nxdn") m_command = RCD_MODE_NXDN; +#if defined(USE_M17) else if (m_args.at(1U) == "m17") m_command = RCD_MODE_M17; +#endif else reply = "KO"; } else if (m_args.at(0U) == "enable" && m_args.size() >= ENABLE_ARGS) { @@ -99,8 +101,11 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command) if (m_args.at(1U) == "nxdn") m_command = RCD_ENABLE_NXDN; else +#if defined(USE_M17) if (m_args.at(1U) == "m17") m_command = RCD_ENABLE_M17; + else +#endif #if defined(USE_FM) if (m_args.at(1U) == "fm") m_command = RCD_ENABLE_FM; @@ -130,9 +135,11 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command) if (m_args.at(1U) == "nxdn") m_command = RCD_DISABLE_NXDN; else +#if defined(USE_M17) if (m_args.at(1U) == "m17") m_command = RCD_DISABLE_M17; else +#endif #if defined(USE_FM) if (m_args.at(1U) == "fm") m_command = RCD_DISABLE_FM; @@ -211,7 +218,9 @@ unsigned int CRemoteControl::getArgCount() const case RCD_MODE_YSF: case RCD_MODE_P25: case RCD_MODE_NXDN: +#if defined(USE_M17) case RCD_MODE_M17: +#endif return m_args.size() - SET_MODE_ARGS; #if defined(USE_POCSAG) case RCD_PAGE: @@ -239,7 +248,9 @@ std::string CRemoteControl::getArgString(unsigned int n) const case RCD_MODE_YSF: case RCD_MODE_P25: case RCD_MODE_NXDN: +#if defined(USE_M17) case RCD_MODE_M17: +#endif n += SET_MODE_ARGS; break; #if defined(USE_POCSAG) diff --git a/RemoteControl.h b/RemoteControl.h index 0d36a73..c8b6fbd 100644 --- a/RemoteControl.h +++ b/RemoteControl.h @@ -39,7 +39,9 @@ enum REMOTE_COMMAND { RCD_MODE_YSF, RCD_MODE_P25, RCD_MODE_NXDN, +#if defined(USE_M17) RCD_MODE_M17, +#endif #if defined(USE_FM) RCD_MODE_FM, #endif @@ -50,7 +52,9 @@ enum REMOTE_COMMAND { RCD_ENABLE_YSF, RCD_ENABLE_P25, RCD_ENABLE_NXDN, +#if defined(USE_M17) RCD_ENABLE_M17, +#endif #if defined(USE_FM) RCD_ENABLE_FM, #endif @@ -64,7 +68,9 @@ enum REMOTE_COMMAND { RCD_DISABLE_YSF, RCD_DISABLE_P25, RCD_DISABLE_NXDN, +#if defined(USE_M17) RCD_DISABLE_M17, +#endif #if defined(USE_FM) RCD_DISABLE_FM, #endif diff --git a/Sync.cpp b/Sync.cpp index 1fcb2c4..6af0896 100644 --- a/Sync.cpp +++ b/Sync.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018,2020,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,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 @@ -29,13 +29,14 @@ #include #include - +#if defined(USE_DSTAR) void CSync::addDStarSync(unsigned char* data) { assert(data != NULL); ::memcpy(data + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); } +#endif void CSync::addDMRDataSync(unsigned char* data, bool duplex) { @@ -85,6 +86,7 @@ void CSync::addNXDNSync(unsigned char* data) data[i] = (data[i] & ~NXDN_FSW_BYTES_MASK[i]) | NXDN_FSW_BYTES[i]; } +#if defined(USE_M17) void CSync::addM17LinkSetupSync(unsigned char* data) { assert(data != NULL); @@ -105,4 +107,5 @@ void CSync::addM17EOTSync(unsigned char* data) ::memcpy(data, M17_EOT_SYNC_BYTES, M17_SYNC_LENGTH_BYTES); } +#endif diff --git a/Sync.h b/Sync.h index 7f75711..7afc043 100644 --- a/Sync.h +++ b/Sync.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018,2020,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,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 @@ -19,11 +19,14 @@ #if !defined(SYNC_H) #define SYNC_H +#include "Defines.h" + class CSync { public: +#if defined(USE_DSTAR) static void addDStarSync(unsigned char* data); - +#endif static void addDMRDataSync(unsigned char* data, bool duplex); static void addDMRAudioSync(unsigned char* data, bool duplex); @@ -33,9 +36,11 @@ public: static void addNXDNSync(unsigned char* data); +#if defined(USE_M17) static void addM17LinkSetupSync(unsigned char* data); static void addM17StreamSync(unsigned char* data); static void addM17EOTSync(unsigned char* data); +#endif private: };