From ebc539b205fdce514b0fb50707e7d7b5d379d0f0 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 30 Jun 2023 16:40:54 +0100 Subject: [PATCH] Add conditional compilation to the common classes for all of the modes. --- AMBEFEC.cpp | 16 +- AMBEFEC.h | 11 +- Conf.cpp | 132 ++++++++++++++ Conf.h | 62 ++++++- MMDVMHost.cpp | 444 +++++++++++++++++++++++++++++++++++++++++++--- MMDVMHost.h | 47 ++++- Modem.cpp | 276 +++++++++++++++++++++++++++- Modem.h | 94 +++++++++- RemoteControl.cpp | 40 +++++ RemoteControl.h | 24 +++ Sync.cpp | 8 + Sync.h | 9 + 12 files changed, 1123 insertions(+), 40 deletions(-) diff --git a/AMBEFEC.cpp b/AMBEFEC.cpp index 5b293c5..96ac73f 100644 --- a/AMBEFEC.cpp +++ b/AMBEFEC.cpp @@ -442,20 +442,24 @@ const unsigned int PRNG_TABLE[] = { 0xECDB0FU, 0xB542DAU, 0x9E5131U, 0xC7ABA5U, 0x8C38FEU, 0x97010BU, 0xDED290U, 0xA4CC7DU, 0xAD3D2EU, 0xF6B6B3U, 0xF9A540U, 0x205ED9U, 0x634EB6U, 0x5A9567U, 0x11A6D8U, 0x0B3F09U}; +#if defined(USE_DMR) || defined(USE_YSF) || defined(USE_NXDN) const unsigned int DMR_A_TABLE[] = { 0U, 4U, 8U, 12U, 16U, 20U, 24U, 28U, 32U, 36U, 40U, 44U, 48U, 52U, 56U, 60U, 64U, 68U, 1U, 5U, 9U, 13U, 17U, 21U}; const unsigned int DMR_B_TABLE[] = {25U, 29U, 33U, 37U, 41U, 45U, 49U, 53U, 57U, 61U, 65U, 69U, 2U, 6U, 10U, 14U, 18U, 22U, 26U, 30U, 34U, 38U, 42U}; const unsigned int DMR_C_TABLE[] = {46U, 50U, 54U, 58U, 62U, 66U, 70U, 3U, 7U, 11U, 15U, 19U, 23U, 27U, 31U, 35U, 39U, 43U, 47U, 51U, 55U, 59U, 63U, 67U, 71U}; - +#endif +#if defined(USE_DSTAR) const unsigned int DSTAR_A_TABLE[] = {0U, 6U, 12U, 18U, 24U, 30U, 36U, 42U, 48U, 54U, 60U, 66U, 1U, 7U, 13U, 19U, 25U, 31U, 37U, 43U, 49U, 55U, 61U, 67U}; const unsigned int DSTAR_B_TABLE[] = {2U, 8U, 14U, 20U, 26U, 32U, 38U, 44U, 50U, 56U, 62U, 68U, 3U, 9U, 15U, 21U, 27U, 33U, 39U, 45U, 51U, 57U, 63U, 69U}; const unsigned int DSTAR_C_TABLE[] = {4U, 10U, 16U, 22U, 28U, 34U, 40U, 46U, 52U, 58U, 64U, 70U, 5U, 11U, 17U, 23U, 29U, 35U, 41U, 47U, 53U, 59U, 65U, 71U}; +#endif +#if defined(USE_YSF) || defined(USE_P25) const unsigned int IMBE_INTERLEAVE[] = { 0, 7, 12, 19, 24, 31, 36, 43, 48, 55, 60, 67, 72, 79, 84, 91, 96, 103, 108, 115, 120, 127, 132, 139, 1, 6, 13, 18, 25, 30, 37, 42, 49, 54, 61, 66, 73, 78, 85, 90, 97, 102, 109, 114, 121, 126, 133, 138, @@ -464,6 +468,7 @@ const unsigned int IMBE_INTERLEAVE[] = { 4, 11, 16, 23, 28, 35, 40, 47, 52, 59, 64, 71, 76, 83, 88, 95, 100, 107, 112, 119, 124, 131, 136, 143, 5, 10, 17, 22, 29, 34, 41, 46, 53, 58, 65, 70, 77, 82, 89, 94, 101, 106, 113, 118, 125, 130, 137, 142 }; +#endif CAMBEFEC::CAMBEFEC() { @@ -473,6 +478,7 @@ CAMBEFEC::~CAMBEFEC() { } +#if defined(USE_DMR) || defined(USE_YSF) || defined(USE_NXDN) unsigned int CAMBEFEC::regenerateDMR(unsigned char* bytes) const { assert(bytes != NULL); @@ -573,6 +579,7 @@ unsigned int CAMBEFEC::regenerateDMR(unsigned char* bytes) const return errors; } +#endif #if defined(USE_DSTAR) unsigned int CAMBEFEC::regenerateDStar(unsigned char* bytes) const @@ -608,6 +615,7 @@ unsigned int CAMBEFEC::regenerateDStar(unsigned char* bytes) const } #endif +#if defined(USE_YSF) unsigned int CAMBEFEC::regenerateYSFDN(unsigned char* bytes) const { assert(bytes != NULL); @@ -658,7 +666,9 @@ unsigned int CAMBEFEC::regenerateYSFDN(unsigned char* bytes) const return errors; } +#endif +#if defined(USE_YSF) || defined(USE_P25) unsigned int CAMBEFEC::regenerateIMBE(unsigned char* bytes) const { assert(bytes != NULL); @@ -792,6 +802,7 @@ unsigned int CAMBEFEC::regenerateIMBE(unsigned char* bytes) const return errors; } +#endif #if defined(USE_DSTAR) unsigned int CAMBEFEC::regenerateDStar(unsigned int& a, unsigned int& b) const @@ -829,6 +840,7 @@ unsigned int CAMBEFEC::regenerateDStar(unsigned int& a, unsigned int& b) const } #endif +#if defined(USE_DMR) || defined(USE_YSF) || defined(USE_NXDN) unsigned int CAMBEFEC::regenerateDMR(unsigned int& a, unsigned int& b, unsigned int& c) const { unsigned int orig_a = a; @@ -870,3 +882,5 @@ unsigned int CAMBEFEC::regenerateDMR(unsigned int& a, unsigned int& b, unsigned return errsA + errsB; } +#endif + diff --git a/AMBEFEC.h b/AMBEFEC.h index ebe5322..a013076 100644 --- a/AMBEFEC.h +++ b/AMBEFEC.h @@ -26,20 +26,29 @@ public: CAMBEFEC(); ~CAMBEFEC(); +#if defined(USE_DMR) || defined(USE_YSF) || defined(USE_NXDN) unsigned int regenerateDMR(unsigned char* bytes) const; +#endif #if defined(USE_DSTAR) unsigned int regenerateDStar(unsigned char* bytes) const; #endif - unsigned int regenerateYSFDN(unsigned char* bytes) const; +#if defined(USE_YSF) + unsigned int regenerateYSFDN(unsigned char* bytes) const; +#endif + +#if defined(USE_YSF) || defined(USE_P25) unsigned int regenerateIMBE(unsigned char* bytes) const; +#endif private: #if defined(USE_DSTAR) unsigned int regenerateDStar(unsigned int& a, unsigned int& b) const; #endif +#if defined(USE_DMR) || defined(USE_YSF) || defined(USE_NXDN) unsigned int regenerateDMR(unsigned int& a, unsigned int& b,unsigned int& c) const; +#endif }; #endif diff --git a/Conf.cpp b/Conf.cpp index 1d688dc..53e9785 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -34,17 +34,29 @@ enum SECTION { SECTION_LOG, SECTION_MQTT, SECTION_CWID, +#if defined(USE_DMR) || defined(USE_P25) SECTION_DMRID_LOOKUP, +#endif +#if defined(USE_NXDN) SECTION_NXDNID_LOOKUP, +#endif SECTION_MODEM, SECTION_TRANSPARENT, #if defined(USE_DSTAR) SECTION_DSTAR, #endif +#if defined(USE_DMR) SECTION_DMR, +#endif +#if defined(USE_YSF) SECTION_FUSION, +#endif +#if defined(USE_P25) SECTION_P25, +#endif +#if defined(USE_NXDN) SECTION_NXDN, +#endif #if defined(USE_M17) SECTION_M17, #endif @@ -60,10 +72,18 @@ enum SECTION { #if defined(USE_DSTAR) SECTION_DSTAR_NETWORK, #endif +#if defined(USE_DMR) SECTION_DMR_NETWORK, +#endif +#if defined(USE_YSF) SECTION_FUSION_NETWORK, +#endif +#if defined(USE_P25) SECTION_P25_NETWORK, +#endif +#if defined(USE_NXDN) SECTION_NXDN_NETWORK, +#endif #if defined(USE_M17) SECTION_M17_NETWORK, #endif @@ -105,10 +125,14 @@ m_mqttName("mmdvm"), m_cwIdEnabled(false), m_cwIdTime(10U), m_cwIdCallsign(), +#if defined(USE_DMR) || defined(USE_P25) m_dmrIdLookupFile(), m_dmrIdLookupTime(0U), +#endif +#if defined(USE_NXDN) m_nxdnIdLookupFile(), m_nxdnIdLookupTime(0U), +#endif m_modemProtocol("uart"), m_modemUARTPort(), m_modemUARTSpeed(115200U), @@ -122,7 +146,9 @@ m_modemRXInvert(false), m_modemTXInvert(false), m_modemPTTInvert(false), m_modemTXDelay(100U), +#if defined(USE_DMR) m_modemDMRDelay(0U), +#endif m_modemTXOffset(0), m_modemRXOffset(0), m_modemRXDCOffset(0), @@ -161,6 +187,7 @@ m_dstarErrorReply(true), m_dstarRemoteGateway(false), #endif m_dstarModeHang(10U), +#if defined(USE_DMR) m_dmrEnabled(false), m_dmrBeacons(DMR_BEACONS_OFF), m_dmrBeaconInterval(60U), @@ -177,14 +204,20 @@ m_dmrSlot1TGWhiteList(), m_dmrSlot2TGWhiteList(), m_dmrCallHang(10U), m_dmrTXHang(4U), +#endif m_dmrModeHang(10U), +#if defined(USE_DMR) m_dmrOVCM(DMR_OVCM_OFF), +#endif +#if defined(USE_YSF) m_fusionEnabled(false), m_fusionLowDeviation(false), m_fusionRemoteGateway(false), m_fusionSelfOnly(false), m_fusionTXHang(4U), +#endif m_fusionModeHang(10U), +#if defined(USE_P25) m_p25Enabled(false), m_p25Id(0U), m_p25NAC(0x293U), @@ -192,13 +225,16 @@ m_p25SelfOnly(false), m_p25OverrideUID(false), m_p25RemoteGateway(false), m_p25TXHang(5U), +#endif m_p25ModeHang(10U), +#if defined(USE_NXDN) m_nxdnEnabled(false), m_nxdnId(0U), m_nxdnRAN(1U), m_nxdnSelfOnly(false), m_nxdnRemoteGateway(false), m_nxdnTXHang(5U), +#endif m_nxdnModeHang(10U), #if defined(USE_M17) m_m17Enabled(false), @@ -275,6 +311,7 @@ m_dstarNetworkModeHang(3U), #if defined(USE_DSTAR) m_dstarNetworkDebug(false), #endif +#if defined(USE_DMR) m_dmrNetworkEnabled(false), m_dmrNetworkGatewayAddress(), m_dmrNetworkGatewayPort(0U), @@ -284,29 +321,42 @@ m_dmrNetworkDebug(false), m_dmrNetworkJitter(360U), m_dmrNetworkSlot1(true), m_dmrNetworkSlot2(true), +#endif m_dmrNetworkModeHang(3U), +#if defined(USE_YSF) m_fusionNetworkEnabled(false), m_fusionNetworkLocalAddress(), m_fusionNetworkLocalPort(0U), m_fusionNetworkGatewayAddress(), m_fusionNetworkGatewayPort(0U), +#endif m_fusionNetworkModeHang(3U), +#if defined(USE_YSF) m_fusionNetworkDebug(false), +#endif +#if defined(USE_P25) m_p25NetworkEnabled(false), m_p25GatewayAddress(), m_p25GatewayPort(0U), m_p25LocalAddress(), m_p25LocalPort(0U), +#endif m_p25NetworkModeHang(3U), +#if defined(USE_P25) m_p25NetworkDebug(false), +#endif +#if defined(USE_NXDN) m_nxdnNetworkEnabled(false), m_nxdnNetworkProtocol("Icom"), m_nxdnGatewayAddress(), m_nxdnGatewayPort(0U), m_nxdnLocalAddress(), m_nxdnLocalPort(0U), +#endif m_nxdnNetworkModeHang(3U), +#if defined(USE_NXDN) m_nxdnNetworkDebug(false), +#endif #if defined(USE_M17) m_m17NetworkEnabled(false), m_m17GatewayAddress(), @@ -385,10 +435,14 @@ bool CConf::read() section = SECTION_MQTT; else if (::strncmp(buffer, "[CW Id]", 7U) == 0) section = SECTION_CWID; +#if defined(USE_DMR) || defined(USE_P25) else if (::strncmp(buffer, "[DMR Id Lookup]", 15U) == 0) section = SECTION_DMRID_LOOKUP; +#endif +#if defined(USE_NXDN) else if (::strncmp(buffer, "[NXDN Id Lookup]", 16U) == 0) section = SECTION_NXDNID_LOOKUP; +#endif else if (::strncmp(buffer, "[Modem]", 7U) == 0) section = SECTION_MODEM; else if (::strncmp(buffer, "[Transparent Data]", 18U) == 0) @@ -397,14 +451,22 @@ bool CConf::read() else if (::strncmp(buffer, "[D-Star]", 8U) == 0) section = SECTION_DSTAR; #endif +#if defined(USE_DMR) else if (::strncmp(buffer, "[DMR]", 5U) == 0) section = SECTION_DMR; +#endif +#if defined(USE_YSF) else if (::strncmp(buffer, "[System Fusion]", 15U) == 0) section = SECTION_FUSION; +#endif +#if defined(USE_P25) else if (::strncmp(buffer, "[P25]", 5U) == 0) section = SECTION_P25; +#endif +#if defined(USE_NXDN) else if (::strncmp(buffer, "[NXDN]", 6U) == 0) section = SECTION_NXDN; +#endif #if defined(USE_M17) else if (::strncmp(buffer, "[M17]", 5U) == 0) section = SECTION_M17; @@ -425,14 +487,22 @@ bool CConf::read() else if (::strncmp(buffer, "[D-Star Network]", 16U) == 0) section = SECTION_DSTAR_NETWORK; #endif +#if defined(USE_DMR) else if (::strncmp(buffer, "[DMR Network]", 13U) == 0) section = SECTION_DMR_NETWORK; +#endif +#if defined(USE_YSF) else if (::strncmp(buffer, "[System Fusion Network]", 23U) == 0) section = SECTION_FUSION_NETWORK; +#endif +#if defined(USE_P25) else if (::strncmp(buffer, "[P25 Network]", 13U) == 0) section = SECTION_P25_NETWORK; +#endif +#if defined(USE_NXDN) else if (::strncmp(buffer, "[NXDN Network]", 14U) == 0) section = SECTION_NXDN_NETWORK; +#endif #if defined(USE_M17) else if (::strncmp(buffer, "[M17 Network]", 13U) == 0) section = SECTION_M17_NETWORK; @@ -549,16 +619,20 @@ bool CConf::read() value[i] = ::toupper(value[i]); m_cwIdCallsign = value; } +#if defined(USE_DMR) || defined(USE_P25) } else if (section == SECTION_DMRID_LOOKUP) { if (::strcmp(key, "File") == 0) m_dmrIdLookupFile = value; else if (::strcmp(key, "Time") == 0) m_dmrIdLookupTime = (unsigned int)::atoi(value); +#endif +#if defined(USE_NXDN) } else if (section == SECTION_NXDNID_LOOKUP) { if (::strcmp(key, "File") == 0) m_nxdnIdLookupFile = value; else if (::strcmp(key, "Time") == 0) m_nxdnIdLookupTime = (unsigned int)::atoi(value); +#endif } else if (section == SECTION_MODEM) { if (::strcmp(key, "Protocol") == 0) m_modemProtocol = value; @@ -586,8 +660,10 @@ bool CConf::read() m_modemPTTInvert = ::atoi(value) == 1; else if (::strcmp(key, "TXDelay") == 0) m_ax25TXDelay = m_modemTXDelay = (unsigned int)::atoi(value); +#if defined(USE_DMR) else if (::strcmp(key, "DMRDelay") == 0) m_modemDMRDelay = (unsigned int)::atoi(value); +#endif else if (::strcmp(key, "RXOffset") == 0) m_modemRXOffset = ::atoi(value); else if (::strcmp(key, "TXOffset") == 0) @@ -604,16 +680,26 @@ bool CConf::read() m_modemAX25TXLevel = m_modemFMTXLevel = m_modemCWIdTXLevel = m_modemDStarTXLevel = m_modemDMRTXLevel = m_modemYSFTXLevel = m_modemP25TXLevel = m_modemNXDNTXLevel = m_modemM17TXLevel = m_modemPOCSAGTXLevel = float(::atof(value)); else if (::strcmp(key, "CWIdTXLevel") == 0) m_modemCWIdTXLevel = float(::atof(value)); +#if defined(USE_DSTAR) else if (::strcmp(key, "D-StarTXLevel") == 0) m_modemDStarTXLevel = float(::atof(value)); +#endif +#if defined(USE_DMR) else if (::strcmp(key, "DMRTXLevel") == 0) m_modemDMRTXLevel = float(::atof(value)); +#endif +#if defined(USE_YSF) else if (::strcmp(key, "YSFTXLevel") == 0) m_modemYSFTXLevel = float(::atof(value)); +#endif +#if defined(USE_P25) else if (::strcmp(key, "P25TXLevel") == 0) m_modemP25TXLevel = float(::atof(value)); +#endif +#if defined(USE_NXDN) else if (::strcmp(key, "NXDNTXLevel") == 0) m_modemNXDNTXLevel = float(::atof(value)); +#endif #if defined(USE_M17) else if (::strcmp(key, "M17TXLevel") == 0) m_modemM17TXLevel = float(::atof(value)); @@ -699,6 +785,7 @@ bool CConf::read() else if (::strcmp(key, "ModeHang") == 0) m_dstarModeHang = (unsigned int)::atoi(value); #endif +#if defined(USE_DMR) } else if (section == SECTION_DMR) { if (::strcmp(key, "Enable") == 0) m_dmrEnabled = ::atoi(value) == 1; @@ -784,6 +871,8 @@ bool CConf::read() break; } } +#endif +#if defined(USE_YSF) } else if (section == SECTION_FUSION) { if (::strcmp(key, "Enable") == 0) m_fusionEnabled = ::atoi(value) == 1; @@ -797,6 +886,8 @@ bool CConf::read() m_fusionTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_fusionModeHang = (unsigned int)::atoi(value); +#endif +#if defined(USE_P25) } else if (section == SECTION_P25) { if (::strcmp(key, "Enable") == 0) m_p25Enabled = ::atoi(value) == 1; @@ -814,6 +905,8 @@ bool CConf::read() m_p25TXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_p25ModeHang = (unsigned int)::atoi(value); +#endif +#if defined(USE_NXDN) } else if (section == SECTION_NXDN) { if (::strcmp(key, "Enable") == 0) m_nxdnEnabled = ::atoi(value) == 1; @@ -829,6 +922,7 @@ bool CConf::read() m_nxdnTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_nxdnModeHang = (unsigned int)::atoi(value); +#endif #if defined(USE_M17) } else if (section == SECTION_M17) { if (::strcmp(key, "Enable") == 0) @@ -971,6 +1065,7 @@ bool CConf::read() else if (::strcmp(key, "Debug") == 0) m_dstarNetworkDebug = ::atoi(value) == 1; #endif +#if defined(USE_DMR) } else if (section == SECTION_DMR_NETWORK) { if (::strcmp(key, "Enable") == 0) m_dmrNetworkEnabled = ::atoi(value) == 1; @@ -992,6 +1087,8 @@ bool CConf::read() m_dmrNetworkSlot2 = ::atoi(value) == 1; else if (::strcmp(key, "ModeHang") == 0) m_dmrNetworkModeHang = (unsigned int)::atoi(value); +#endif +#if defined(USE_YSF) } else if (section == SECTION_FUSION_NETWORK) { if (::strcmp(key, "Enable") == 0) m_fusionNetworkEnabled = ::atoi(value) == 1; @@ -1007,6 +1104,8 @@ bool CConf::read() m_fusionNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_fusionNetworkDebug = ::atoi(value) == 1; +#endif +#if defined(USE_P25) } else if (section == SECTION_P25_NETWORK) { if (::strcmp(key, "Enable") == 0) m_p25NetworkEnabled = ::atoi(value) == 1; @@ -1022,6 +1121,8 @@ bool CConf::read() m_p25NetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_p25NetworkDebug = ::atoi(value) == 1; +#endif +#if defined(USE_NXDN) } else if (section == SECTION_NXDN_NETWORK) { if (::strcmp(key, "Enable") == 0) m_nxdnNetworkEnabled = ::atoi(value) == 1; @@ -1037,6 +1138,7 @@ bool CConf::read() m_nxdnNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_nxdnNetworkDebug = ::atoi(value) == 1; +#endif #if defined(USE_M17) } else if (section == SECTION_M17_NETWORK) { if (::strcmp(key, "Enable") == 0) @@ -1240,6 +1342,7 @@ std::string CConf::getCWIdCallsign() const return m_cwIdCallsign; } +#if defined(USE_DMR) || defined(USE_P25) std::string CConf::getDMRIdLookupFile() const { return m_dmrIdLookupFile; @@ -1249,7 +1352,9 @@ unsigned int CConf::getDMRIdLookupTime() const { return m_dmrIdLookupTime; } +#endif +#if defined(USE_NXDN) std::string CConf::getNXDNIdLookupFile() const { return m_nxdnIdLookupFile; @@ -1259,6 +1364,7 @@ unsigned int CConf::getNXDNIdLookupTime() const { return m_nxdnIdLookupTime; } +#endif std::string CConf::getModemProtocol() const { @@ -1325,10 +1431,12 @@ unsigned int CConf::getModemTXDelay() const return m_modemTXDelay; } +#if defined(USE_DMR) unsigned int CConf::getModemDMRDelay() const { return m_modemDMRDelay; } +#endif int CConf::getModemRXOffset() const { @@ -1372,25 +1480,33 @@ float CConf::getModemDStarTXLevel() const } #endif +#if defined(USE_DMR) float CConf::getModemDMRTXLevel() const { return m_modemDMRTXLevel; } +#endif +#if defined(USE_YSF) float CConf::getModemYSFTXLevel() const { return m_modemYSFTXLevel; } +#endif +#if defined(USE_P25) float CConf::getModemP25TXLevel() const { return m_modemP25TXLevel; } +#endif +#if defined(USE_NXDN) float CConf::getModemNXDNTXLevel() const { return m_modemNXDNTXLevel; } +#endif #if defined(USE_M17) float CConf::getModemM17TXLevel() const @@ -1522,6 +1638,7 @@ unsigned int CConf::getDStarModeHang() const } #endif +#if defined(USE_DMR) bool CConf::getDMREnabled() const { return m_dmrEnabled; @@ -1611,7 +1728,9 @@ DMR_OVCM_TYPES CConf::getDMROVCM() const { return m_dmrOVCM; } +#endif +#if defined(USE_YSF) bool CConf::getFusionEnabled() const { return m_fusionEnabled; @@ -1641,7 +1760,9 @@ unsigned int CConf::getFusionModeHang() const { return m_fusionModeHang; } +#endif +#if defined(USE_P25) bool CConf::getP25Enabled() const { return m_p25Enabled; @@ -1681,7 +1802,9 @@ unsigned int CConf::getP25ModeHang() const { return m_p25ModeHang; } +#endif +#if defined(USE_NXDN) bool CConf::getNXDNEnabled() const { return m_nxdnEnabled; @@ -1716,6 +1839,7 @@ unsigned int CConf::getNXDNModeHang() const { return m_nxdnModeHang; } +#endif #if defined(USE_M17) bool CConf::getM17Enabled() const @@ -2012,6 +2136,7 @@ bool CConf::getDStarNetworkDebug() const } #endif +#if defined(USE_DMR) bool CConf::getDMRNetworkEnabled() const { return m_dmrNetworkEnabled; @@ -2061,7 +2186,9 @@ bool CConf::getDMRNetworkSlot2() const { return m_dmrNetworkSlot2; } +#endif +#if defined(USE_YSF) bool CConf::getFusionNetworkEnabled() const { return m_fusionNetworkEnabled; @@ -2096,7 +2223,9 @@ bool CConf::getFusionNetworkDebug() const { return m_fusionNetworkDebug; } +#endif +#if defined(USE_P25) bool CConf::getP25NetworkEnabled() const { return m_p25NetworkEnabled; @@ -2131,7 +2260,9 @@ bool CConf::getP25NetworkDebug() const { return m_p25NetworkDebug; } +#endif +#if defined(USE_NXDN) bool CConf::getNXDNNetworkEnabled() const { return m_nxdnNetworkEnabled; @@ -2171,6 +2302,7 @@ bool CConf::getNXDNNetworkDebug() const { return m_nxdnNetworkDebug; } +#endif #if defined(USE_M17) bool CConf::getM17NetworkEnabled() const diff --git a/Conf.h b/Conf.h index 7ba8a51..23ddccb 100644 --- a/Conf.h +++ b/Conf.h @@ -63,13 +63,17 @@ public: unsigned int getCWIdTime() const; std::string getCWIdCallsign() const; +#if defined(USE_DMR) || defined(USE_P25) // The DMR Id section std::string getDMRIdLookupFile() const; unsigned int getDMRIdLookupTime() const; +#endif +#if defined(USE_NXDN) // The NXDN Id section std::string getNXDNIdLookupFile() const; unsigned int getNXDNIdLookupTime() const; +#endif // The Modem section std::string getModemProtocol() const; @@ -85,7 +89,9 @@ public: bool getModemTXInvert() const; bool getModemPTTInvert() const; unsigned int getModemTXDelay() const; +#if defined(USE_DMR) unsigned int getModemDMRDelay() const; +#endif int getModemTXOffset() const; int getModemRXOffset() const; int getModemRXDCOffset() const; @@ -96,10 +102,18 @@ public: #if defined(USE_DSTAR) float getModemDStarTXLevel() const; #endif +#if defined(USE_DMR) float getModemDMRTXLevel() const; +#endif +#if defined(USE_YSF) float getModemYSFTXLevel() const; +#endif +#if defined(USE_P25) float getModemP25TXLevel() const; +#endif +#if defined(USE_NXDN) float getModemNXDNTXLevel() const; +#endif #if defined(USE_M17) float getModemM17TXLevel() const; #endif @@ -124,8 +138,8 @@ public: unsigned short getTransparentLocalPort() const; unsigned int getTransparentSendFrameType() const; - // The D-Star section #if defined(USE_DSTAR) + // The D-Star section bool getDStarEnabled() const; std::string getDStarModule() const; bool getDStarSelfOnly() const; @@ -139,6 +153,7 @@ public: unsigned int getDStarModeHang() const; #endif +#if defined(USE_DMR) // The DMR section bool getDMREnabled() const; DMR_BEACONS getDMRBeacons() const; @@ -158,7 +173,9 @@ public: unsigned int getDMRTXHang() const; unsigned int getDMRModeHang() const; DMR_OVCM_TYPES getDMROVCM() const; +#endif +#if defined(USE_YSF) // The System Fusion section bool getFusionEnabled() const; bool getFusionLowDeviation() const; @@ -166,7 +183,9 @@ public: bool getFusionSelfOnly() const; unsigned int getFusionTXHang() const; unsigned int getFusionModeHang() const; +#endif +#if defined(USE_P25) // The P25 section bool getP25Enabled() const; unsigned int getP25Id() const; @@ -176,7 +195,9 @@ public: bool getP25RemoteGateway() const; unsigned int getP25TXHang() const; unsigned int getP25ModeHang() const; +#endif +#if defined(USE_NXDN) // The NXDN section bool getNXDNEnabled() const; unsigned int getNXDNId() const; @@ -185,6 +206,7 @@ public: bool getNXDNRemoteGateway() const; unsigned int getNXDNTXHang() const; unsigned int getNXDNModeHang() const; +#endif #if defined(USE_M17) // The M17 section @@ -263,6 +285,7 @@ public: bool getDStarNetworkDebug() const; #endif +#if defined(USE_DMR) // The DMR Network section bool getDMRNetworkEnabled() const; std::string getDMRNetworkGatewayAddress() const; @@ -274,7 +297,9 @@ public: bool getDMRNetworkSlot1() const; bool getDMRNetworkSlot2() const; unsigned int getDMRNetworkModeHang() const; +#endif +#if defined(USE_YSF) // The System Fusion Network section bool getFusionNetworkEnabled() const; std::string getFusionNetworkLocalAddress() const; @@ -283,7 +308,9 @@ public: unsigned short getFusionNetworkGatewayPort() const; unsigned int getFusionNetworkModeHang() const; bool getFusionNetworkDebug() const; +#endif +#if defined(USE_P25) // The P25 Network section bool getP25NetworkEnabled() const; std::string getP25GatewayAddress() const; @@ -292,7 +319,9 @@ public: unsigned short getP25LocalPort() const; unsigned int getP25NetworkModeHang() const; bool getP25NetworkDebug() const; +#endif +#if defined(USE_NXDN) // The NXDN Network section bool getNXDNNetworkEnabled() const; std::string getNXDNNetworkProtocol() const; @@ -302,6 +331,7 @@ public: unsigned short getNXDNLocalPort() const; unsigned int getNXDNNetworkModeHang() const; bool getNXDNNetworkDebug() const; +#endif #if defined(USE_M17) // The M17 Network section @@ -386,11 +416,15 @@ private: unsigned int m_cwIdTime; std::string m_cwIdCallsign; +#if defined(USE_DMR) || defined(USE_P25) std::string m_dmrIdLookupFile; unsigned int m_dmrIdLookupTime; +#endif +#if defined(USE_NXDN) std::string m_nxdnIdLookupFile; unsigned int m_nxdnIdLookupTime; +#endif std::string m_modemProtocol; std::string m_modemUARTPort; @@ -405,7 +439,9 @@ private: bool m_modemTXInvert; bool m_modemPTTInvert; unsigned int m_modemTXDelay; +#if defined(USE_DMR) unsigned int m_modemDMRDelay; +#endif int m_modemTXOffset; int m_modemRXOffset; int m_modemRXDCOffset; @@ -447,6 +483,7 @@ private: #endif unsigned int m_dstarModeHang; +#if defined(USE_DMR) bool m_dmrEnabled; DMR_BEACONS m_dmrBeacons; unsigned int m_dmrBeaconInterval; @@ -463,16 +500,22 @@ private: std::vector m_dmrSlot2TGWhiteList; unsigned int m_dmrCallHang; unsigned int m_dmrTXHang; +#endif unsigned int m_dmrModeHang; +#if defined(USE_DMR) DMR_OVCM_TYPES m_dmrOVCM; +#endif +#if defined(USE_YSF) bool m_fusionEnabled; bool m_fusionLowDeviation; bool m_fusionRemoteGateway; bool m_fusionSelfOnly; unsigned int m_fusionTXHang; +#endif unsigned int m_fusionModeHang; +#if defined(USE_P25) bool m_p25Enabled; unsigned int m_p25Id; unsigned int m_p25NAC; @@ -480,14 +523,17 @@ private: bool m_p25OverrideUID; bool m_p25RemoteGateway; unsigned int m_p25TXHang; +#endif unsigned int m_p25ModeHang; +#if defined(USE_NXDN) bool m_nxdnEnabled; unsigned int m_nxdnId; unsigned int m_nxdnRAN; bool m_nxdnSelfOnly; bool m_nxdnRemoteGateway; unsigned int m_nxdnTXHang; +#endif unsigned int m_nxdnModeHang; #if defined(USE_M17) @@ -570,6 +616,7 @@ private: bool m_dstarNetworkDebug; #endif +#if defined(USE_DMR) bool m_dmrNetworkEnabled; std::string m_dmrNetworkGatewayAddress; unsigned short m_dmrNetworkGatewayPort; @@ -579,32 +626,45 @@ private: unsigned int m_dmrNetworkJitter; bool m_dmrNetworkSlot1; bool m_dmrNetworkSlot2; +#endif unsigned int m_dmrNetworkModeHang; +#if defined(USE_YSF) bool m_fusionNetworkEnabled; std::string m_fusionNetworkLocalAddress; unsigned short m_fusionNetworkLocalPort; std::string m_fusionNetworkGatewayAddress; unsigned short m_fusionNetworkGatewayPort; +#endif unsigned int m_fusionNetworkModeHang; +#if defined(USE_YSF) bool m_fusionNetworkDebug; +#endif +#if defined(USE_P25) bool m_p25NetworkEnabled; std::string m_p25GatewayAddress; unsigned short m_p25GatewayPort; std::string m_p25LocalAddress; unsigned short m_p25LocalPort; +#endif unsigned int m_p25NetworkModeHang; +#if defined(USE_P25) bool m_p25NetworkDebug; +#endif +#if defined(USE_NXDN) bool m_nxdnNetworkEnabled; std::string m_nxdnNetworkProtocol; std::string m_nxdnGatewayAddress; unsigned short m_nxdnGatewayPort; std::string m_nxdnLocalAddress; unsigned short m_nxdnLocalPort; +#endif unsigned int m_nxdnNetworkModeHang; +#if defined(USE_NXDN) bool m_nxdnNetworkDebug; +#endif #if defined(USE_M17) bool m_m17NetworkEnabled; diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index dce6e76..be688bb 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -149,10 +149,18 @@ m_modem(NULL), #if defined(USE_DSTAR) m_dstar(NULL), #endif +#if defined(USE_DMR) m_dmr(NULL), +#endif +#if defined(USE_YSF) m_ysf(NULL), +#endif +#if defined(USE_P25) m_p25(NULL), +#endif +#if defined(USE_NXDN) m_nxdn(NULL), +#endif #if defined(USE_M17) m_m17(NULL), #endif @@ -168,10 +176,18 @@ m_ax25(NULL), #if defined(USE_DSTAR) m_dstarNetwork(NULL), #endif +#if defined(USE_DMR) m_dmrNetwork(NULL), +#endif +#if defined(USE_YSF) m_ysfNetwork(NULL), +#endif +#if defined(USE_P25) m_p25Network(NULL), +#endif +#if defined(USE_NXDN) m_nxdnNetwork(NULL), +#endif #if defined(USE_M17) m_m17Network(NULL), #endif @@ -188,10 +204,18 @@ m_mode(MODE_IDLE), #if defined(USE_DSTAR) m_dstarRFModeHang(10U), #endif +#if defined(USE_DMR) m_dmrRFModeHang(10U), +#endif +#if defined(USE_YSF) m_ysfRFModeHang(10U), +#endif +#if defined(USE_P25) m_p25RFModeHang(10U), +#endif +#if defined(USE_NXDN) m_nxdnRFModeHang(10U), +#endif #if defined(USE_M17) m_m17RFModeHang(10U), #endif @@ -201,10 +225,18 @@ m_fmRFModeHang(10U), #if defined(USE_DSTAR) m_dstarNetModeHang(3U), #endif +#if defined(USE_DMR) m_dmrNetModeHang(3U), +#endif +#if defined(USE_YSF) m_ysfNetModeHang(3U), +#endif +#if defined(USE_P25) m_p25NetModeHang(3U), +#endif +#if defined(USE_NXDN) m_nxdnNetModeHang(3U), +#endif #if defined(USE_M17) m_m17NetModeHang(3U), #endif @@ -215,7 +247,9 @@ m_pocsagNetModeHang(3U), m_fmNetModeHang(3U), #endif m_modeTimer(1000U), +#if defined(USE_DMR) m_dmrTXTimer(1000U), +#endif m_cwIdTimer(1000U), m_duplex(false), m_timeout(180U), @@ -229,8 +263,12 @@ m_pocsagEnabled(false), m_fmEnabled(false), m_ax25Enabled(false), m_cwIdTime(0U), +#if defined(USE_DMR) || defined(USE_P25) m_dmrLookup(NULL), +#endif +#if defined(USE_NXDN) m_nxdnLookup(NULL), +#endif m_callsign(), m_id(0U), m_cwCallsign(), @@ -357,25 +395,33 @@ int CMMDVMHost::run() } #endif +#if defined(USE_DMR) if (m_dmrEnabled && !m_modem->hasDMR()) { LogWarning("DMR enabled in the host but not in the modem firmware, disabling"); m_dmrEnabled = false; } +#endif +#if defined(USE_YSF) if (m_ysfEnabled && !m_modem->hasYSF()) { LogWarning("YSF enabled in the host but not in the modem firmware, disabling"); m_ysfEnabled = false; } +#endif +#if defined(USE_P25) if (m_p25Enabled && !m_modem->hasP25()) { LogWarning("P25 enabled in the host but not in the modem firmware, disabling"); m_p25Enabled = false; } +#endif +#if defined(USE_NXDN) if (m_nxdnEnabled && !m_modem->hasNXDN()) { LogWarning("NXDN enabled in the host but not in the modem firmware, disabling"); m_nxdnEnabled = false; } +#endif #if defined(USE_M17) if (m_m17Enabled && !m_modem->hasM17()) { @@ -416,29 +462,37 @@ int CMMDVMHost::run() } #endif +#if defined(USE_DMR) if (m_dmrEnabled && m_conf.getDMRNetworkEnabled()) { ret = createDMRNetwork(); if (!ret) return 1; } +#endif +#if defined(USE_YSF) if (m_ysfEnabled && m_conf.getFusionNetworkEnabled()) { ret = createYSFNetwork(); if (!ret) return 1; } +#endif +#if defined(USE_P25) if (m_p25Enabled && m_conf.getP25NetworkEnabled()) { ret = createP25Network(); if (!ret) return 1; } +#endif +#if defined(USE_NXDN) if (m_nxdnEnabled && m_conf.getNXDNNetworkEnabled()) { ret = createNXDNNetwork(); if (!ret) return 1; } +#endif #if defined(USE_M17) if (m_m17Enabled && m_conf.getM17NetworkEnabled()) { @@ -539,6 +593,7 @@ int CMMDVMHost::run() rssi->load(rssiMappingFile); } +#if defined(USE_DMR) || defined(USE_P25) // For DMR and P25 we try to map IDs to callsigns if (m_dmrEnabled || m_p25Enabled) { std::string lookupFile = m_conf.getDMRIdLookupFile(); @@ -552,6 +607,7 @@ int CMMDVMHost::run() m_dmrLookup = new CDMRLookup(lookupFile, reloadTime); m_dmrLookup->read(); } +#endif LogInfo("Starting protocol handlers"); writeJSONMessage("Starting protocol handlers"); @@ -591,6 +647,7 @@ int CMMDVMHost::run() } #endif +#if defined(USE_DMR) DMR_BEACONS dmrBeacons = DMR_BEACONS_OFF; CTimer dmrBeaconIntervalTimer(1000U); CTimer dmrBeaconDurationTimer(1000U); @@ -688,7 +745,9 @@ int CMMDVMHost::run() m_dmrTXTimer.setTimeout(txHang); } +#endif +#if defined(USE_YSF) if (m_ysfEnabled) { bool lowDeviation = m_conf.getFusionLowDeviation(); bool remoteGateway = m_conf.getFusionRemoteGateway(); @@ -705,7 +764,9 @@ int CMMDVMHost::run() m_ysf = new CYSFControl(m_callsign, selfOnly, m_ysfNetwork, m_timeout, m_duplex, lowDeviation, remoteGateway, rssi); } +#endif +#if defined(USE_P25) if (m_p25Enabled) { unsigned int id = m_conf.getP25Id(); unsigned int nac = m_conf.getP25NAC(); @@ -726,7 +787,9 @@ int CMMDVMHost::run() m_p25 = new CP25Control(nac, id, selfOnly, uidOverride, m_p25Network, m_timeout, m_duplex, m_dmrLookup, remoteGateway, rssi); } +#endif +#if defined(USE_NXDN) if (m_nxdnEnabled) { std::string lookupFile = m_conf.getNXDNIdLookupFile(); unsigned int reloadTime = m_conf.getNXDNIdLookupTime(); @@ -756,6 +819,7 @@ int CMMDVMHost::run() m_nxdn = new CNXDNControl(ran, id, selfOnly, m_nxdnNetwork, m_timeout, m_duplex, remoteGateway, m_nxdnLookup, rssi); } +#endif #if defined(USE_M17) if (m_m17Enabled) { @@ -869,6 +933,7 @@ int CMMDVMHost::run() } #endif +#if defined(USE_DMR) len = m_modem->readDMRData1(data); if (m_dmr != NULL && len > 0U) { if (m_mode == MODE_IDLE) { @@ -942,7 +1007,9 @@ int CMMDVMHost::run() LogWarning("DMR modem data received when in mode %u", m_mode); } } +#endif +#if defined(USE_YSF) len = m_modem->readYSFData(data); if (m_ysf != NULL && len > 0U) { if (m_mode == MODE_IDLE) { @@ -959,7 +1026,9 @@ int CMMDVMHost::run() LogWarning("System Fusion modem data received when in mode %u", m_mode); } } +#endif +#if defined(USE_P25) len = m_modem->readP25Data(data); if (m_p25 != NULL && len > 0U) { if (m_mode == MODE_IDLE) { @@ -976,7 +1045,9 @@ int CMMDVMHost::run() LogWarning("P25 modem data received when in mode %u", m_mode); } } +#endif +#if defined(USE_NXDN) len = m_modem->readNXDNData(data); if (m_nxdn != NULL && len > 0U) { if (m_mode == MODE_IDLE) { @@ -993,6 +1064,7 @@ int CMMDVMHost::run() LogWarning("NXDN modem data received when in mode %u", m_mode); } } +#endif #if defined(USE_M17) len = m_modem->readM17Data(data); @@ -1073,6 +1145,7 @@ int CMMDVMHost::run() } #endif +#if defined(USE_DMR) if (m_dmr != NULL) { ret = m_modem->hasDMRSpace1(); if (ret) { @@ -1118,7 +1191,9 @@ int CMMDVMHost::run() } } } +#endif +#if defined(USE_YSF) if (m_ysf != NULL) { ret = m_modem->hasYSFSpace(); if (ret) { @@ -1137,7 +1212,9 @@ int CMMDVMHost::run() } } } +#endif +#if defined(USE_P25) if (m_p25 != NULL) { ret = m_modem->hasP25Space(); if (ret) { @@ -1156,7 +1233,9 @@ int CMMDVMHost::run() } } } +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) { ret = m_modem->hasNXDNSpace(); if (ret) { @@ -1175,6 +1254,7 @@ int CMMDVMHost::run() } } } +#endif #if defined(USE_M17) if (m_m17 != NULL) { @@ -1277,12 +1357,14 @@ int CMMDVMHost::run() m_modeTimer.clock(ms); if (m_reload) { +#if defined(USE_DMR) || defined(USE_P25) if (m_dmrLookup != NULL) m_dmrLookup->reload(); - +#endif +#if defined(USE_NXDN) if (m_nxdnLookup != NULL) m_nxdnLookup->reload(); - +#endif m_reload = false; } @@ -1290,14 +1372,22 @@ int CMMDVMHost::run() if (m_dstar != NULL) m_dstar->clock(); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->clock(); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->clock(ms); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->clock(ms); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->clock(ms); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->clock(ms); @@ -1315,14 +1405,22 @@ int CMMDVMHost::run() if (m_dstarNetwork != NULL) m_dstarNetwork->clock(ms); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->clock(ms); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->clock(ms); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->clock(ms); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->clock(ms); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->clock(ms); @@ -1335,7 +1433,6 @@ int CMMDVMHost::run() if (m_fmNetwork != NULL) m_fmNetwork->clock(ms); #endif - m_cwIdTimer.clock(ms); if (m_cwIdTimer.isRunning() && m_cwIdTimer.hasExpired()) { if (!m_modem->hasTX()){ @@ -1347,6 +1444,7 @@ int CMMDVMHost::run() } } +#if defined(USE_DMR) switch (dmrBeacons) { case DMR_BEACONS_TIMED: dmrBeaconIntervalTimer.clock(ms); @@ -1391,6 +1489,7 @@ int CMMDVMHost::run() m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } +#endif #if defined(USE_POCSAG) pocsagTimer.clock(ms); @@ -1407,11 +1506,14 @@ int CMMDVMHost::run() setMode(MODE_QUIT); +#if defined(USE_DMR) || defined(USE_P25) if (m_dmrLookup != NULL) m_dmrLookup->stop(); - +#endif +#if defined(USE_NXDN) if (m_nxdnLookup != NULL) m_nxdnLookup->stop(); +#endif LogInfo("Closing network connections"); writeJSONMessage("Closing network connections"); @@ -1423,25 +1525,33 @@ int CMMDVMHost::run() } #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) { m_dmrNetwork->close(true); delete m_dmrNetwork; } +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) { m_ysfNetwork->close(); delete m_ysfNetwork; } +#endif +#if defined(USE_P25) if (m_p25Network != NULL) { m_p25Network->close(); delete m_p25Network; } +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) { m_nxdnNetwork->close(); delete m_nxdnNetwork; } +#endif #if defined(USE_M17) if (m_m17Network != NULL) { @@ -1484,10 +1594,18 @@ int CMMDVMHost::run() #if defined(USE_DSTAR) delete m_dstar; #endif +#if defined(USE_DMR) delete m_dmr; +#endif +#if defined(USE_YSF) delete m_ysf; +#endif +#if defined(USE_P25) delete m_p25; +#endif +#if defined(USE_NXDN) delete m_nxdn; +#endif #if defined(USE_M17) delete m_m17; #endif @@ -1530,7 +1648,9 @@ bool CMMDVMHost::createModem() bool txInvert = m_conf.getModemTXInvert(); bool pttInvert = m_conf.getModemPTTInvert(); unsigned int txDelay = m_conf.getModemTXDelay(); +#if defined(USE_DMR) unsigned int dmrDelay = m_conf.getModemDMRDelay(); +#endif float rxLevel = m_conf.getModemRXLevel(); float cwIdTXLevel = m_conf.getModemCWIdTXLevel(); #if defined(USE_DSTAR) @@ -1538,10 +1658,26 @@ bool CMMDVMHost::createModem() #else float dstarTXLevel = 0.0F; #endif +#if defined(USE_DMR) float dmrTXLevel = m_conf.getModemDMRTXLevel(); +#else + float dmrTXLevel = 0.0F; +#endif +#if defined(USE_YSF) float ysfTXLevel = m_conf.getModemYSFTXLevel(); +#else + float ysfTXLevel = 0.0F; +#endif +#if defined(USE_P25) float p25TXLevel = m_conf.getModemP25TXLevel(); +#else + float p25TXLevel = 0.0F; +#endif +#if defined(USE_NXDN) float nxdnTXLevel = m_conf.getModemNXDNTXLevel(); +#else + float nxdnTXLevel = 0.0F; +#endif #if defined(USE_M17) float m17TXLevel = m_conf.getModemM17TXLevel(); #else @@ -1564,11 +1700,19 @@ bool CMMDVMHost::createModem() #endif bool trace = m_conf.getModemTrace(); bool debug = m_conf.getModemDebug(); +#if defined(USE_DMR) unsigned int colorCode = m_conf.getDMRColorCode(); +#endif +#if defined(USE_YSF) bool lowDeviation = m_conf.getFusionLowDeviation(); unsigned int ysfTXHang = m_conf.getFusionTXHang(); +#endif +#if defined(USE_P25) unsigned int p25TXHang = m_conf.getP25TXHang(); +#endif +#if defined(USE_NXDN) unsigned int nxdnTXHang = m_conf.getNXDNTXHang(); +#endif #if defined(USE_M17) unsigned int m17TXHang = m_conf.getM17TXHang(); #endif @@ -1620,16 +1764,26 @@ bool CMMDVMHost::createModem() LogInfo(" RX DC Offset: %d", rxDCOffset); LogInfo(" TX DC Offset: %d", txDCOffset); LogInfo(" RF Level: %.1f%%", rfLevel); +#if defined(USE_DMR) LogInfo(" DMR Delay: %u (%.1fms)", dmrDelay, float(dmrDelay) * 0.0416666F); +#endif LogInfo(" RX Level: %.1f%%", rxLevel); LogInfo(" CW Id TX Level: %.1f%%", cwIdTXLevel); #if defined(USE_DSTAR) LogInfo(" D-Star TX Level: %.1f%%", dstarTXLevel); #endif +#if defined(USE_DMR) LogInfo(" DMR TX Level: %.1f%%", dmrTXLevel); +#endif +#if defined(USE_YSF) LogInfo(" YSF TX Level: %.1f%%", ysfTXLevel); +#endif +#if defined(USE_P25) LogInfo(" P25 TX Level: %.1f%%", p25TXLevel); +#endif +#if defined(USE_NXDN) LogInfo(" NXDN TX Level: %.1f%%", nxdnTXLevel); +#endif #if defined(USE_M17) LogInfo(" M17 TX Level: %.1f%%", m17TXLevel); #endif @@ -1665,10 +1819,18 @@ bool CMMDVMHost::createModem() m_modem->setModeParams(m_dstarEnabled, m_dmrEnabled, m_ysfEnabled, m_p25Enabled, m_nxdnEnabled, m_m17Enabled, m_pocsagEnabled, m_fmEnabled, m_ax25Enabled); m_modem->setLevels(rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel, nxdnTXLevel, m17TXLevel, pocsagTXLevel, fmTXLevel, ax25TXLevel); m_modem->setRFParams(rxFrequency, rxOffset, txFrequency, txOffset, txDCOffset, rxDCOffset, rfLevel, pocsagFrequency); +#if defined(USE_DMR) m_modem->setDMRParams(colorCode); +#endif +#if defined(USE_YSF) m_modem->setYSFParams(lowDeviation, ysfTXHang); +#endif +#if defined(USE_P25) m_modem->setP25Params(p25TXHang); +#endif +#if defined(USE_NXDN) m_modem->setNXDNParams(nxdnTXHang); +#endif #if defined(USE_M17) m_modem->setM17Params(m17TXHang); #endif @@ -1766,7 +1928,6 @@ bool CMMDVMHost::createModem() } } #endif - bool ret = m_modem->open(); if (!ret) { delete m_modem; @@ -1809,6 +1970,7 @@ bool CMMDVMHost::createDStarNetwork() } #endif +#if defined(USE_DMR) bool CMMDVMHost::createDMRNetwork() { std::string gatewayAddress = m_conf.getDMRNetworkGatewayAddress(); @@ -1859,7 +2021,9 @@ bool CMMDVMHost::createDMRNetwork() return true; } +#endif +#if defined(USE_YSF) bool CMMDVMHost::createYSFNetwork() { std::string localAddress = m_conf.getFusionNetworkLocalAddress(); @@ -1889,7 +2053,9 @@ bool CMMDVMHost::createYSFNetwork() return true; } +#endif +#if defined(USE_P25) bool CMMDVMHost::createP25Network() { std::string gatewayAddress = m_conf.getP25GatewayAddress(); @@ -1919,7 +2085,9 @@ bool CMMDVMHost::createP25Network() return true; } +#endif +#if defined(USE_NXDN) bool CMMDVMHost::createNXDNNetwork() { std::string protocol = m_conf.getNXDNNetworkProtocol(); @@ -1954,6 +2122,7 @@ bool CMMDVMHost::createNXDNNetwork() return true; } +#endif #if defined(USE_M17) bool CMMDVMHost::createM17Network() @@ -2092,10 +2261,18 @@ void CMMDVMHost::readParams() #if defined(USE_DSTAR) m_dstarEnabled = m_conf.getDStarEnabled(); #endif +#if defined(USE_DMR) m_dmrEnabled = m_conf.getDMREnabled(); +#endif +#if defined(USE_YSF) m_ysfEnabled = m_conf.getFusionEnabled(); +#endif +#if defined(USE_P25) m_p25Enabled = m_conf.getP25Enabled(); +#endif +#if defined(USE_NXDN) m_nxdnEnabled = m_conf.getNXDNEnabled(); +#endif #if defined(USE_M17) m_m17Enabled = m_conf.getM17Enabled(); #endif @@ -2115,16 +2292,26 @@ void CMMDVMHost::readParams() LogInfo("General Parameters"); LogInfo(" Callsign: %s", m_callsign.c_str()); +#if defined(USE_DMR) || defined(USE_P25) LogInfo(" Id: %u", m_id); +#endif LogInfo(" Duplex: %s", m_duplex ? "yes" : "no"); LogInfo(" Timeout: %us", m_timeout); #if defined(USE_DSTAR) LogInfo(" D-Star: %s", m_dstarEnabled ? "enabled" : "disabled"); #endif +#if defined(USE_DMR) LogInfo(" DMR: %s", m_dmrEnabled ? "enabled" : "disabled"); +#endif +#if defined(USE_YSF) LogInfo(" YSF: %s", m_ysfEnabled ? "enabled" : "disabled"); +#endif +#if defined(USE_P25) LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled"); +#endif +#if defined(USE_NXDN) LogInfo(" NXDN: %s", m_nxdnEnabled ? "enabled" : "disabled"); +#endif #if defined(USE_M17) LogInfo(" M17: %s", m_m17Enabled ? "enabled" : "disabled"); #endif @@ -2144,19 +2331,26 @@ void CMMDVMHost::setMode(unsigned char mode) assert(m_modem != NULL); switch (mode) { - case MODE_DSTAR: #if defined(USE_DSTAR) + case MODE_DSTAR: if (m_dstarNetwork != NULL) m_dstarNetwork->enable(true); -#endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); @@ -2173,18 +2367,24 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_ax25Network != NULL) m_ax25Network->enable(false); #endif -#if defined(USE_DSTAR) if (m_dstar != NULL) m_dstar->enable(true); -#endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); @@ -2208,7 +2408,8 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("D-Star"); writeJSONMode("D-Star"); break; - +#endif +#if defined(USE_DMR) case MODE_DMR: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) @@ -2216,12 +2417,18 @@ void CMMDVMHost::setMode(unsigned char mode) #endif if (m_dmrNetwork != NULL) m_dmrNetwork->enable(true); +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); @@ -2244,12 +2451,18 @@ void CMMDVMHost::setMode(unsigned char mode) #endif if (m_dmr != NULL) m_dmr->enable(true); +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); @@ -2277,20 +2490,27 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("DMR"); writeJSONMode("DMR"); break; - +#endif +#if defined(USE_YSF) case MODE_YSF: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif if (m_ysfNetwork != NULL) m_ysfNetwork->enable(true); +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); @@ -2311,14 +2531,20 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif if (m_ysf != NULL) m_ysf->enable(true); +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); @@ -2342,20 +2568,27 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("System Fusion"); writeJSONMode("YSF"); break; - +#endif +#if defined(USE_P25) case MODE_P25: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif if (m_p25Network != NULL) m_p25Network->enable(true); +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); @@ -2376,14 +2609,20 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif if (m_p25 != NULL) m_p25->enable(true); +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); @@ -2407,18 +2646,25 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("P25"); writeJSONMode("P25"); break; - +#endif +#if defined(USE_NXDN) case MODE_NXDN: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); #if defined(USE_M17) @@ -2441,12 +2687,18 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif if (m_nxdn != NULL) m_nxdn->enable(true); #if defined(USE_M17) @@ -2472,24 +2724,31 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("NXDN"); writeJSONMode("NXDN"); break; - +#endif +#if defined(USE_M17) case MODE_M17: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); -#if defined(USE_M17) +#endif if (m_m17Network != NULL) m_m17Network->enable(true); -#endif #if defined(USE_POCSAG) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); @@ -2506,18 +2765,24 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); -#if defined(USE_M17) +#endif if (m_m17 != NULL) m_m17->enable(true); -#endif #if defined(USE_POCSAG) if (m_pocsag != NULL) m_pocsag->enable(false); @@ -2537,28 +2802,35 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("M17"); writeJSONMode("M17"); break; - +#endif +#if defined(USE_POCSAG) case MODE_POCSAG: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #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); -#endif #if defined(USE_FM) if (m_fmNetwork != NULL) m_fmNetwork->enable(false); @@ -2571,22 +2843,28 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #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); -#endif #if defined(USE_FM) if (m_fm != NULL) m_fm->enable(false); @@ -2602,20 +2880,29 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("POCSAG"); writeJSONMode("POCSAG"); break; - +#endif +#if defined(USE_FM) case MODE_FM: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); @@ -2624,10 +2911,8 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_pocsagNetwork != NULL) m_pocsagNetwork->enable(false); #endif -#if defined(USE_FM) if (m_fmNetwork != NULL) m_fmNetwork->enable(true); -#endif #if defined(USE_AX25) if (m_ax25Network != NULL) m_ax25Network->enable(true); @@ -2636,14 +2921,22 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); @@ -2652,18 +2945,18 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_pocsag != NULL) m_pocsag->enable(false); #endif -#if defined(USE_FM) if (m_fm != NULL) m_fm->enable(true); -#endif #if defined(USE_AX25) if (m_ax25 != NULL) m_ax25->enable(true); #endif +#if defined(USE_DMR) if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } +#endif m_modem->setMode(MODE_FM); m_mode = MODE_FM; m_modeTimer.start(); @@ -2671,20 +2964,29 @@ void CMMDVMHost::setMode(unsigned char mode) createLockFile("FM"); writeJSONMode("FM"); break; +#endif case MODE_LOCKOUT: #if defined(USE_DSTAR) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); @@ -2705,14 +3007,22 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); @@ -2729,10 +3039,12 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_ax25 != NULL) m_ax25->enable(false); #endif +#if defined(USE_DMR) if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } +#endif m_modem->setMode(MODE_IDLE); m_mode = MODE_LOCKOUT; m_modeTimer.stop(); @@ -2747,14 +3059,22 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(false); @@ -2775,14 +3095,22 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(false); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(false); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(false); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(false); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(false); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(false); @@ -2799,10 +3127,12 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_ax25 != NULL) m_ax25->enable(false); #endif +#if defined(USE_DMR) if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } +#endif m_mode = MODE_ERROR; m_modeTimer.stop(); m_cwIdTimer.stop(); @@ -2815,14 +3145,22 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstarNetwork != NULL) m_dstarNetwork->enable(true); #endif +#if defined(USE_DMR) if (m_dmrNetwork != NULL) m_dmrNetwork->enable(true); +#endif +#if defined(USE_YSF) if (m_ysfNetwork != NULL) m_ysfNetwork->enable(true); +#endif +#if defined(USE_P25) if (m_p25Network != NULL) m_p25Network->enable(true); +#endif +#if defined(USE_NXDN) if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); +#endif #if defined(USE_M17) if (m_m17Network != NULL) m_m17Network->enable(true); @@ -2843,14 +3181,22 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_dstar != NULL) m_dstar->enable(true); #endif +#if defined(USE_DMR) if (m_dmr != NULL) m_dmr->enable(true); +#endif +#if defined(USE_YSF) if (m_ysf != NULL) m_ysf->enable(true); +#endif +#if defined(USE_P25) if (m_p25 != NULL) m_p25->enable(true); +#endif +#if defined(USE_NXDN) if (m_nxdn != NULL) m_nxdn->enable(true); +#endif #if defined(USE_M17) if (m_m17 != NULL) m_m17->enable(true); @@ -2867,10 +3213,12 @@ void CMMDVMHost::setMode(unsigned char mode) if (m_ax25 != NULL) m_ax25->enable(true); #endif +#if defined(USE_DMR) if (m_mode == MODE_DMR && m_duplex && m_modem->hasTX()) { m_modem->writeDMRStart(false); m_dmrTXTimer.stop(); } +#endif m_modem->setMode(MODE_IDLE); if (m_mode == MODE_ERROR) { m_modem->sendCWId(m_callsign); @@ -2926,22 +3274,30 @@ void CMMDVMHost::remoteControl(const std::string& commandString) processModeCommand(MODE_DSTAR, m_dstarRFModeHang); break; #endif +#if defined(USE_DMR) case RCD_MODE_DMR: if (m_dmr != NULL) processModeCommand(MODE_DMR, m_dmrRFModeHang); break; +#endif +#if defined(USE_YSF) case RCD_MODE_YSF: if (m_ysf != NULL) processModeCommand(MODE_YSF, m_ysfRFModeHang); break; +#endif +#if defined(USE_P25) case RCD_MODE_P25: if (m_p25 != NULL) processModeCommand(MODE_P25, m_p25RFModeHang); break; +#endif +#if defined(USE_NXDN) case RCD_MODE_NXDN: if (m_nxdn != NULL) processModeCommand(MODE_NXDN, m_nxdnRFModeHang); break; +#endif #if defined(USE_M17) case RCD_MODE_M17: if (m_m17 != NULL) @@ -2962,30 +3318,38 @@ void CMMDVMHost::remoteControl(const std::string& commandString) m_dstarNetwork->enable(true); break; #endif +#if defined(USE_DMR) case RCD_ENABLE_DMR: if (m_dmr != NULL && !m_dmrEnabled) processEnableCommand(m_dmrEnabled, true); if (m_dmrNetwork != NULL) m_dmrNetwork->enable(true); break; +#endif +#if defined(USE_YSF) case RCD_ENABLE_YSF: if (m_ysf != NULL && !m_ysfEnabled) processEnableCommand(m_ysfEnabled, true); if (m_ysfNetwork != NULL) m_ysfNetwork->enable(true); break; +#endif +#if defined(USE_P25) case RCD_ENABLE_P25: if (m_p25 != NULL && !m_p25Enabled) processEnableCommand(m_p25Enabled, true); if (m_p25Network != NULL) m_p25Network->enable(true); break; +#endif +#if defined(USE_NXDN) case RCD_ENABLE_NXDN: if (m_nxdn != NULL && !m_nxdnEnabled) processEnableCommand(m_nxdnEnabled, true); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); break; +#endif #if defined(USE_M17) case RCD_ENABLE_M17: if (m_m17 != NULL && !m_m17Enabled) @@ -3014,30 +3378,38 @@ void CMMDVMHost::remoteControl(const std::string& commandString) m_dstarNetwork->enable(false); break; #endif +#if defined(USE_DMR) case RCD_DISABLE_DMR: if (m_dmr != NULL && m_dmrEnabled) processEnableCommand(m_dmrEnabled, false); if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); break; +#endif +#if defined(USE_YSF) case RCD_DISABLE_YSF: if (m_ysf != NULL && m_ysfEnabled) processEnableCommand(m_ysfEnabled, false); if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); break; +#endif +#if defined(USE_P25) case RCD_DISABLE_P25: if (m_p25 != NULL && m_p25Enabled) processEnableCommand(m_p25Enabled, false); if (m_p25Network != NULL) m_p25Network->enable(false); break; +#endif +#if defined(USE_NXDN) case RCD_DISABLE_NXDN: if (m_nxdn != NULL && m_nxdnEnabled) processEnableCommand(m_nxdnEnabled, false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); break; +#endif #if defined(USE_M17) case RCD_DISABLE_M17: if (m_m17 != NULL && m_m17Enabled) @@ -3158,10 +3530,18 @@ void CMMDVMHost::buildNetworkStatusString(std::string &str) #if defined(USE_DSTAR) str += std::string("dstar:") + (((m_dstarNetwork == NULL) || !m_dstarEnabled) ? "n/a" : (m_dstarNetwork->isConnected() ? "conn" : "disc")); #endif +#if defined(USE_DMR) str += std::string(" dmr:") + (((m_dmrNetwork == NULL) || !m_dmrEnabled) ? "n/a" : (m_dmrNetwork->isConnected() ? "conn" : "disc")); +#endif +#if defined(USE_YSF) str += std::string(" ysf:") + (((m_ysfNetwork == NULL) || !m_ysfEnabled) ? "n/a" : (m_ysfNetwork->isConnected() ? "conn" : "disc")); +#endif +#if defined(USE_P25) str += std::string(" p25:") + (((m_p25Network == NULL) || !m_p25Enabled) ? "n/a" : (m_p25Network->isConnected() ? "conn" : "disc")); +#endif +#if defined(USE_NXDN) str += std::string(" nxdn:") + (((m_nxdnNetwork == NULL) || !m_nxdnEnabled) ? "n/a" : (m_nxdnNetwork->isConnected() ? "conn" : "disc")); +#endif #if defined(USE_M17) str += std::string(" m17:") + (((m_m17Network == NULL) || !m_m17Enabled) ? "n/a" : (m_m17Network->isConnected() ? "conn" : "disc")); #endif @@ -3199,10 +3579,18 @@ void CMMDVMHost::buildNetworkHostsString(std::string &str) str += std::string("dstar:\"") + ((dstarReflector.length() == 0) ? "NONE" : dstarReflector) + "\""; #endif +#if defined(USE_DMR) str += std::string(" dmr:\"") + ((m_dmrEnabled && (m_dmrNetwork != NULL)) ? m_conf.getDMRNetworkGatewayAddress() : "NONE") + "\""; +#endif +#if defined(USE_YSF) str += std::string(" ysf:\"") + ((m_ysfEnabled && (m_ysfNetwork != NULL)) ? m_conf.getFusionNetworkGatewayAddress() : "NONE") + "\""; +#endif +#if defined(USE_P25) str += std::string(" p25:\"") + ((m_p25Enabled && (m_p25Network != NULL)) ? m_conf.getP25GatewayAddress() : "NONE") + "\""; +#endif +#if defined(USE_NXDN) str += std::string(" nxdn:\"") + ((m_nxdnEnabled && (m_nxdnNetwork != NULL)) ? m_conf.getNXDNGatewayAddress() : "NONE") + "\""; +#endif #if defined(USE_M17) str += std::string(" m17:\"") + ((m_m17Enabled && (m_m17Network != NULL)) ? m_conf.getM17GatewayAddress() : "NONE") + "\""; #endif diff --git a/MMDVMHost.h b/MMDVMHost.h index 6f2f603..fdb8b47 100644 --- a/MMDVMHost.h +++ b/MMDVMHost.h @@ -64,10 +64,18 @@ private: #if defined(USE_DSTAR) CDStarControl* m_dstar; #endif +#if defined(USE_DMR) CDMRControl* m_dmr; +#endif +#if defined(USE_YSF) CYSFControl* m_ysf; +#endif +#if defined(USE_P25) CP25Control* m_p25; +#endif +#if defined(USE_NXDN) CNXDNControl* m_nxdn; +#endif #if defined(USE_M17) CM17Control* m_m17; #endif @@ -83,10 +91,18 @@ private: #if defined(USE_DSTAR) CDStarNetwork* m_dstarNetwork; #endif +#if defined(USE_DMR) CDMRNetwork* m_dmrNetwork; +#endif +#if defined(USE_YSF) CYSFNetwork* m_ysfNetwork; +#endif +#if defined(USE_P25) CP25Network* m_p25Network; +#endif +#if defined(USE_NXDN) INXDNNetwork* m_nxdnNetwork; +#endif #if defined(USE_M17) CM17Network* m_m17Network; #endif @@ -103,10 +119,18 @@ private: #if defined(USE_DSTAR) unsigned int m_dstarRFModeHang; #endif +#if defined(USE_DMR) unsigned int m_dmrRFModeHang; +#endif +#if defined(USE_YSF) unsigned int m_ysfRFModeHang; +#endif +#if defined(USE_P25) unsigned int m_p25RFModeHang; +#endif +#if defined(USE_NXDN) unsigned int m_nxdnRFModeHang; +#endif #if defined(USE_M17) unsigned int m_m17RFModeHang; #endif @@ -116,10 +140,18 @@ private: #if defined(USE_DSTAR) unsigned int m_dstarNetModeHang; #endif +#if defined(USE_DMR) unsigned int m_dmrNetModeHang; +#endif +#if defined(USE_YSF) unsigned int m_ysfNetModeHang; +#endif +#if defined(USE_P25) unsigned int m_p25NetModeHang; +#endif +#if defined(USE_NXDN) unsigned int m_nxdnNetModeHang; +#endif #if defined(USE_M17) unsigned int m_m17NetModeHang; #endif @@ -130,7 +162,9 @@ private: unsigned int m_fmNetModeHang; #endif CTimer m_modeTimer; +#if defined(USE_DMR) CTimer m_dmrTXTimer; +#endif CTimer m_cwIdTimer; bool m_duplex; unsigned int m_timeout; @@ -144,8 +178,12 @@ private: bool m_fmEnabled; bool m_ax25Enabled; unsigned int m_cwIdTime; +#if defined(USE_DMR) || defined(USE_P25) CDMRLookup* m_dmrLookup; +#endif +#if defined(USE_NXDN) CNXDNLookup* m_nxdnLookup; +#endif std::string m_callsign; unsigned int m_id; std::string m_cwCallsign; @@ -159,10 +197,18 @@ private: #if defined(USE_DSTAR) bool createDStarNetwork(); #endif +#if defined(USE_DMR) bool createDMRNetwork(); +#endif +#if defined(USE_YSF) bool createYSFNetwork(); +#endif +#if defined(USE_P25) bool createP25Network(); +#endif +#if defined(USE_NXDN) bool createNXDNNetwork(); +#endif #if defined(USE_M17) bool createM17Network(); #endif @@ -175,7 +221,6 @@ private: #if defined(USE_AX25) bool createAX25Network(); #endif - void writeSerial(const std::string& message); void remoteControl(const std::string& commandString); diff --git a/Modem.cpp b/Modem.cpp index c784c3c..fb032ee 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -58,6 +58,7 @@ const unsigned char MMDVM_DSTAR_LOST = 0x12U; const unsigned char MMDVM_DSTAR_EOT = 0x13U; #endif +#if defined(USE_DMR) const unsigned char MMDVM_DMR_DATA1 = 0x18U; const unsigned char MMDVM_DMR_LOST1 = 0x19U; const unsigned char MMDVM_DMR_DATA2 = 0x1AU; @@ -65,16 +66,23 @@ const unsigned char MMDVM_DMR_LOST2 = 0x1BU; const unsigned char MMDVM_DMR_SHORTLC = 0x1CU; const unsigned char MMDVM_DMR_START = 0x1DU; const unsigned char MMDVM_DMR_ABORT = 0x1EU; +#endif +#if defined(USE_YSF) const unsigned char MMDVM_YSF_DATA = 0x20U; const unsigned char MMDVM_YSF_LOST = 0x21U; +#endif +#if defined(USE_P25) const unsigned char MMDVM_P25_HDR = 0x30U; const unsigned char MMDVM_P25_LDU = 0x31U; const unsigned char MMDVM_P25_LOST = 0x32U; +#endif +#if defined(USE_NXDN) const unsigned char MMDVM_NXDN_DATA = 0x40U; const unsigned char MMDVM_NXDN_LOST = 0x41U; +#endif #if defined(USE_M17) const unsigned char MMDVM_M17_LINK_SETUP = 0x45U; @@ -124,10 +132,18 @@ const unsigned int BUFFER_LENGTH = 2000U; #if defined(USE_DSTAR) const unsigned char CAP1_DSTAR = 0x01U; #endif +#if defined(USE_DMR) const unsigned char CAP1_DMR = 0x02U; +#endif +#if defined(USE_YSF) const unsigned char CAP1_YSF = 0x04U; +#endif +#if defined(USE_P25) const unsigned char CAP1_P25 = 0x08U; +#endif +#if defined(USE_NXDN) const unsigned char CAP1_NXDN = 0x10U; +#endif #if defined(USE_M17) const unsigned char CAP1_M17 = 0x20U; #endif @@ -143,11 +159,19 @@ const unsigned char CAP2_AX25 = 0x02U; CModem::CModem(bool duplex, bool rxInvert, bool txInvert, bool pttInvert, unsigned int txDelay, unsigned int dmrDelay, bool useCOSAsLockout, bool trace, bool debug) : m_protocolVersion(0U), +#if defined(USE_DMR) m_dmrColorCode(0U), +#endif +#if defined(USE_YSF) m_ysfLoDev(false), m_ysfTXHang(4U), +#endif +#if defined(USE_P25) m_p25TXHang(5U), +#endif +#if defined(USE_NXDN) m_nxdnTXHang(5U), +#endif #if defined(USE_M17) m_m17TXHang(5U), #endif @@ -156,16 +180,26 @@ m_rxInvert(rxInvert), m_txInvert(txInvert), m_pttInvert(pttInvert), m_txDelay(txDelay), +#if defined(USE_DMR) m_dmrDelay(dmrDelay), +#endif m_rxLevel(0.0F), m_cwIdTXLevel(0.0F), #if defined(USE_DSTAR) m_dstarTXLevel(0.0F), #endif +#if defined(USE_DMR) m_dmrTXLevel(0.0F), +#endif +#if defined(USE_YSF) m_ysfTXLevel(0.0F), +#endif +#if defined(USE_P25) m_p25TXLevel(0.0F), +#endif +#if defined(USE_NXDN) m_nxdnTXLevel(0.0F), +#endif #if defined(USE_M17) m_m17TXLevel(0.0F), #endif @@ -190,10 +224,18 @@ m_pocsagFrequency(0U), #if defined(USE_DSTAR) m_dstarEnabled(false), #endif +#if defined(USE_DMR) m_dmrEnabled(false), +#endif +#if defined(USE_YSF) m_ysfEnabled(false), +#endif +#if defined(USE_P25) m_p25Enabled(false), +#endif +#if defined(USE_NXDN) m_nxdnEnabled(false), +#endif #if defined(USE_M17) m_m17Enabled(false), #endif @@ -218,16 +260,24 @@ m_type(0U), m_rxDStarData(1000U, "Modem RX D-Star"), m_txDStarData(1000U, "Modem TX D-Star"), #endif +#if defined(USE_DMR) m_rxDMRData1(1000U, "Modem RX DMR1"), m_rxDMRData2(1000U, "Modem RX DMR2"), m_txDMRData1(1000U, "Modem TX DMR1"), m_txDMRData2(1000U, "Modem TX DMR2"), +#endif +#if defined(USE_YSF) m_rxYSFData(1000U, "Modem RX YSF"), m_txYSFData(1000U, "Modem TX YSF"), +#endif +#if defined(USE_P25) m_rxP25Data(1000U, "Modem RX P25"), m_txP25Data(1000U, "Modem TX P25"), +#endif +#if defined(USE_NXDN) m_rxNXDNData(1000U, "Modem RX NXDN"), m_txNXDNData(1000U, "Modem TX NXDN"), +#endif #if defined(USE_M17) m_rxM17Data(1000U, "Modem RX M17"), m_txM17Data(1000U, "Modem TX M17"), @@ -254,11 +304,19 @@ m_playoutTimer(1000U, 0U, 10U), #if defined(USE_DSTAR) m_dstarSpace(0U), #endif +#if defined(USE_DMR) m_dmrSpace1(0U), m_dmrSpace2(0U), +#endif +#if defined(USE_YSF) m_ysfSpace(0U), +#endif +#if defined(USE_P25) m_p25Space(0U), +#endif +#if defined(USE_NXDN) m_nxdnSpace(0U), +#endif #if defined(USE_M17) m_m17Space(0U), #endif @@ -356,10 +414,18 @@ void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, #if defined(USE_DSTAR) m_dstarEnabled = dstarEnabled; #endif +#if defined(USE_DMR) m_dmrEnabled = dmrEnabled; +#endif +#if defined(USE_YSF) m_ysfEnabled = ysfEnabled; +#endif +#if defined(USE_P25) m_p25Enabled = p25Enabled; +#endif +#if defined(USE_NXDN) m_nxdnEnabled = nxdnEnabled; +#endif #if defined(USE_M17) m_m17Enabled = m17Enabled; #endif @@ -381,10 +447,18 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo #if defined(USE_DSTAR) m_dstarTXLevel = dstarTXLevel; #endif +#if defined(USE_DMR) m_dmrTXLevel = dmrTXLevel; +#endif +#if defined(USE_YSF) m_ysfTXLevel = ysfTXLevel; +#endif +#if defined(USE_P25) m_p25TXLevel = p25TXLevel; +#endif +#if defined(USE_NXDN) m_nxdnTXLevel = nxdnTXLevel; +#endif #if defined(USE_M17) m_m17TXLevel = m17TXLevel; #endif @@ -399,28 +473,36 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo #endif } +#if defined(USE_DMR) void CModem::setDMRParams(unsigned int colorCode) { assert(colorCode < 16U); m_dmrColorCode = colorCode; } +#endif +#if defined(USE_YSF) void CModem::setYSFParams(bool loDev, unsigned int txHang) { m_ysfLoDev = loDev; m_ysfTXHang = txHang; } +#endif +#if defined(USE_P25) void CModem::setP25Params(unsigned int txHang) { m_p25TXHang = txHang; } +#endif +#if defined(USE_NXDN) void CModem::setNXDNParams(unsigned int txHang) { m_nxdnTXHang = txHang; } +#endif #if defined(USE_M17) void CModem::setM17Params(unsigned int txHang) @@ -611,6 +693,7 @@ void CModem::clock(unsigned int ms) break; #endif +#if defined(USE_DMR) case MMDVM_DMR_DATA1: { if (m_trace) CUtils::dump(1U, "RX DMR Data 1", m_buffer, m_length); @@ -668,7 +751,9 @@ void CModem::clock(unsigned int ms) m_rxDMRData2.addData(&data, 1U); } break; +#endif +#if defined(USE_YSF) case MMDVM_YSF_DATA: { if (m_trace) CUtils::dump(1U, "RX YSF Data", m_buffer, m_length); @@ -694,7 +779,9 @@ void CModem::clock(unsigned int ms) m_rxYSFData.addData(&data, 1U); } break; +#endif +#if defined(USE_P25) case MMDVM_P25_HDR: { if (m_trace) CUtils::dump(1U, "RX P25 Header", m_buffer, m_length); @@ -734,7 +821,9 @@ void CModem::clock(unsigned int ms) m_rxP25Data.addData(&data, 1U); } break; +#endif +#if defined(USE_NXDN) case MMDVM_NXDN_DATA: { if (m_trace) CUtils::dump(1U, "RX NXDN Data", m_buffer, m_length); @@ -760,6 +849,7 @@ void CModem::clock(unsigned int ms) m_rxNXDNData.addData(&data, 1U); } break; +#endif #if defined(USE_M17) case MMDVM_M17_LINK_SETUP: { @@ -814,6 +904,7 @@ void CModem::clock(unsigned int ms) } break; #endif + #if defined(USE_FM) case MMDVM_FM_DATA: { if (m_trace) @@ -857,6 +948,7 @@ void CModem::clock(unsigned int ms) } break; #endif + #if defined(USE_AX25) case MMDVM_AX25_DATA: { if (m_trace) @@ -894,8 +986,12 @@ void CModem::clock(unsigned int ms) LogError("MMDVM DAC levels have overflowed"); m_cd = (m_buffer[m_offset + 2U] & 0x40U) == 0x40U; +#if defined(USE_P25) m_p25Space = 0U; +#endif +#if defined(USE_NXDN) m_nxdnSpace = 0U; +#endif #if defined(USE_M17) m_m17Space = 0U; #endif @@ -911,15 +1007,22 @@ void CModem::clock(unsigned int ms) #if defined(USE_DSTAR) m_dstarSpace = m_buffer[m_offset + 3U]; #endif +#if defined(USE_DMR) m_dmrSpace1 = m_buffer[m_offset + 4U]; m_dmrSpace2 = m_buffer[m_offset + 5U]; +#endif +#if defined(USE_YSF) m_ysfSpace = m_buffer[m_offset + 6U]; - +#endif // The following depend on the version of the firmware +#if defined(USE_P25) if (m_length > (m_offset + 7U)) m_p25Space = m_buffer[m_offset + 7U]; +#endif +#if defined(USE_NXDN) if (m_length > (m_offset + 8U)) m_nxdnSpace = m_buffer[m_offset + 8U]; +#endif #if defined(USE_POCSAG) if (m_length > (m_offset + 9U)) m_pocsagSpace = m_buffer[m_offset + 9U]; @@ -953,11 +1056,19 @@ void CModem::clock(unsigned int ms) #if defined(USE_DSTAR) m_dstarSpace = m_buffer[m_offset + 3U]; #endif +#if defined(USE_DMR) m_dmrSpace1 = m_buffer[m_offset + 4U]; m_dmrSpace2 = m_buffer[m_offset + 5U]; +#endif +#if defined(USE_YSF) m_ysfSpace = m_buffer[m_offset + 6U]; +#endif +#if defined(USE_P25) m_p25Space = m_buffer[m_offset + 7U]; +#endif +#if defined(USE_NXDN) m_nxdnSpace = m_buffer[m_offset + 8U]; +#endif #if defined(USE_M17) m_m17Space = m_buffer[m_offset + 9U]; #endif @@ -977,11 +1088,19 @@ void CModem::clock(unsigned int ms) #if defined(USE_DSTAR) m_dstarSpace = 0U; #endif +#if defined(USE_DMR) m_dmrSpace1 = 0U; m_dmrSpace2 = 0U; +#endif +#if defined(USE_YSF) m_ysfSpace = 0U; +#endif +#if defined(USE_P25) m_p25Space = 0U; +#endif +#if defined(USE_NXDN) m_nxdnSpace = 0U; +#endif #if defined(USE_M17) m_m17Space = 0U; #endif @@ -1094,6 +1213,7 @@ void CModem::clock(unsigned int ms) } #endif +#if defined(USE_DMR) if (m_dmrSpace1 > 1U && !m_txDMRData1.isEmpty()) { unsigned char len = 0U; m_txDMRData1.getData(&len, 1U); @@ -1127,7 +1247,9 @@ void CModem::clock(unsigned int ms) m_dmrSpace2--; } +#endif +#if defined(USE_YSF) if (m_ysfSpace > 1U && !m_txYSFData.isEmpty()) { unsigned char len = 0U; m_txYSFData.getData(&len, 1U); @@ -1144,7 +1266,9 @@ void CModem::clock(unsigned int ms) m_ysfSpace--; } +#endif +#if defined(USE_P25) if (m_p25Space > 1U && !m_txP25Data.isEmpty()) { unsigned char len = 0U; m_txP25Data.getData(&len, 1U); @@ -1165,7 +1289,9 @@ void CModem::clock(unsigned int ms) m_p25Space--; } +#endif +#if defined(USE_NXDN) if (m_nxdnSpace > 1U && !m_txNXDNData.isEmpty()) { unsigned char len = 0U; m_txNXDNData.getData(&len, 1U); @@ -1182,6 +1308,7 @@ void CModem::clock(unsigned int ms) m_nxdnSpace--; } +#endif #if defined(USE_M17) if (m_m17Space > 1U && !m_txM17Data.isEmpty()) { @@ -1326,6 +1453,7 @@ unsigned int CModem::readDStarData(unsigned char* data) } #endif +#if defined(USE_DMR) unsigned int CModem::readDMRData1(unsigned char* data) { assert(data != NULL); @@ -1353,7 +1481,9 @@ unsigned int CModem::readDMRData2(unsigned char* data) return len; } +#endif +#if defined(USE_YSF) unsigned int CModem::readYSFData(unsigned char* data) { assert(data != NULL); @@ -1367,7 +1497,9 @@ unsigned int CModem::readYSFData(unsigned char* data) return len; } +#endif +#if defined(USE_P25) unsigned int CModem::readP25Data(unsigned char* data) { assert(data != NULL); @@ -1381,7 +1513,9 @@ unsigned int CModem::readP25Data(unsigned char* data) return len; } +#endif +#if defined(USE_NXDN) unsigned int CModem::readNXDNData(unsigned char* data) { assert(data != NULL); @@ -1395,6 +1529,7 @@ unsigned int CModem::readNXDNData(unsigned char* data) return len; } +#endif #if defined(USE_M17) unsigned int CModem::readM17Data(unsigned char* data) @@ -1515,6 +1650,7 @@ bool CModem::writeDStarData(const unsigned char* data, unsigned int length) } #endif +#if defined(USE_DMR) bool CModem::hasDMRSpace1() const { unsigned int space = m_txDMRData1.freeSpace() / (DMR_FRAME_LENGTH_BYTES + 4U); @@ -1574,7 +1710,9 @@ bool CModem::writeDMRData2(const unsigned char* data, unsigned int length) return true; } +#endif +#if defined(USE_YSF) bool CModem::hasYSFSpace() const { unsigned int space = m_txYSFData.freeSpace() / (YSF_FRAME_LENGTH_BYTES + 4U); @@ -1604,7 +1742,9 @@ bool CModem::writeYSFData(const unsigned char* data, unsigned int length) return true; } +#endif +#if defined(USE_P25) bool CModem::hasP25Space() const { unsigned int space = m_txP25Data.freeSpace() / (P25_LDU_FRAME_LENGTH_BYTES + 4U); @@ -1634,7 +1774,9 @@ bool CModem::writeP25Data(const unsigned char* data, unsigned int length) return true; } +#endif +#if defined(USE_NXDN) bool CModem::hasNXDNSpace() const { unsigned int space = m_txNXDNData.freeSpace() / (NXDN_FRAME_LENGTH_BYTES + 4U); @@ -1664,6 +1806,7 @@ bool CModem::writeNXDNData(const unsigned char* data, unsigned int length) return true; } +#endif #if defined(USE_M17) bool CModem::hasM17Space() const @@ -1876,6 +2019,7 @@ bool CModem::writeDStarInfo(const char* my1, const char* my2, const char* your, } #endif +#if defined(USE_DMR) bool CModem::writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dest, const char* type) { assert(m_port != NULL); @@ -1901,7 +2045,9 @@ bool CModem::writeDMRInfo(unsigned int slotNo, const std::string& src, bool grou return m_port->write(buffer, 47U) != 47; } +#endif +#if defined(USE_YSF) bool CModem::writeYSFInfo(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin) { assert(m_port != NULL); @@ -1929,7 +2075,9 @@ bool CModem::writeYSFInfo(const char* source, const char* dest, unsigned char dg return m_port->write(buffer, 36U) != 36; } +#endif +#if defined(USE_P25) bool CModem::writeP25Info(const char* source, bool group, unsigned int dest, const char* type) { assert(m_port != NULL); @@ -1954,7 +2102,9 @@ bool CModem::writeP25Info(const char* source, bool group, unsigned int dest, con return m_port->write(buffer, 31U) != 31; } +#endif +#if defined(USE_NXDN) bool CModem::writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type) { assert(m_port != NULL); @@ -1979,6 +2129,7 @@ bool CModem::writeNXDNInfo(const char* source, bool group, unsigned int dest, co return m_port->write(buffer, 31U) != 31; } +#endif #if defined(USE_M17) bool CModem::writeM17Info(const char* source, const char* dest, const char* type) @@ -2100,25 +2251,33 @@ bool CModem::hasDStar() const } #endif +#if defined(USE_DMR) bool CModem::hasDMR() const { return (m_capabilities1 & CAP1_DMR) == CAP1_DMR; } +#endif +#if defined(USE_YSF) bool CModem::hasYSF() const { return (m_capabilities1 & CAP1_YSF) == CAP1_YSF; } +#endif +#if defined(USE_P25) bool CModem::hasP25() const { return (m_capabilities1 & CAP1_P25) == CAP1_P25; } +#endif +#if defined(USE_NXDN) bool CModem::hasNXDN() const { return (m_capabilities1 & CAP1_NXDN) == CAP1_NXDN; } +#endif #if defined(USE_M17) bool CModem::hasM17() const @@ -2215,7 +2374,18 @@ bool CModem::readVersion() #if defined(USE_DSTAR) m_capabilities1 |= CAP1_DSTAR; #endif - m_capabilities1 |= CAP1_DMR | CAP1_YSF | CAP1_P25 | CAP1_NXDN; +#if defined(USE_DMR) + m_capabilities1 |= CAP1_DMR; +#endif +#if defined(USE_YSF) + m_capabilities1 |= CAP1_YSF; +#endif +#if defined(USE_P25) + m_capabilities1 |= CAP1_P25; +#endif +#if defined(USE_NXDN) + m_capabilities1 |= CAP1_NXDN; +#endif #if defined(USE_M17) m_capabilities1 |= CAP1_M17; #endif @@ -2248,14 +2418,22 @@ bool CModem::readVersion() if (hasDStar()) ::strcat(modeText, " D-Star"); #endif +#if defined(USE_DMR) if (hasDMR()) ::strcat(modeText, " DMR"); +#endif +#if defined(USE_YSF) if (hasYSF()) ::strcat(modeText, " YSF"); +#endif +#if defined(USE_P25) if (hasP25()) ::strcat(modeText, " P25"); +#endif +#if defined(USE_NXDN) if (hasNXDN()) ::strcat(modeText, " NXDN"); +#endif #if defined(USE_M17) if (hasM17()) ::strcat(modeText, " M17"); @@ -2352,14 +2530,22 @@ bool CModem::setConfig1() if (m_dstarEnabled) buffer[4U] |= 0x01U; #endif +#if defined(USE_DMR) if (m_dmrEnabled) buffer[4U] |= 0x02U; +#endif +#if defined(USE_YSF) if (m_ysfEnabled) buffer[4U] |= 0x04U; +#endif +#if defined(USE_P25) if (m_p25Enabled) buffer[4U] |= 0x08U; +#endif +#if defined(USE_NXDN) if (m_nxdnEnabled) buffer[4U] |= 0x10U; +#endif #if defined(USE_POCSAG) if (m_pocsagEnabled) buffer[4U] |= 0x20U; @@ -2377,9 +2563,13 @@ bool CModem::setConfig1() buffer[8U] = (unsigned char)(m_cwIdTXLevel * 2.55F + 0.5F); - buffer[9U] = m_dmrColorCode; - +#if defined(USE_DMR) + buffer[9U] = m_dmrColorCode; buffer[10U] = m_dmrDelay; +#else + buffer[9U] = 0U; + buffer[10U] = 0U; +#endif buffer[11U] = 128U; // Was OscOffset @@ -2388,16 +2578,35 @@ bool CModem::setConfig1() #else buffer[12U] = 0U; #endif +#if defined(USE_DMR) buffer[13U] = (unsigned char)(m_dmrTXLevel * 2.55F + 0.5F); +#else + buffer[13U] = 0U; +#endif +#if defined(USE_YSF) buffer[14U] = (unsigned char)(m_ysfTXLevel * 2.55F + 0.5F); +#else + buffer[14U] = 0U; +#endif +#if defined(USE_P25) buffer[15U] = (unsigned char)(m_p25TXLevel * 2.55F + 0.5F); +#else + buffer[15U] = 0U; +#endif buffer[16U] = (unsigned char)(m_txDCOffset + 128); buffer[17U] = (unsigned char)(m_rxDCOffset + 128); +#if defined(USE_NXDN) buffer[18U] = (unsigned char)(m_nxdnTXLevel * 2.55F + 0.5F); - +#else + buffer[18U] = 0U; +#endif +#if defined(USE_YSF) buffer[19U] = (unsigned char)m_ysfTXHang; +#else + buffer[19U] = 0U; +#endif #if defined(USE_POCSAG) buffer[20U] = (unsigned char)(m_pocsagTXLevel * 2.55F + 0.5F); #else @@ -2408,10 +2617,16 @@ bool CModem::setConfig1() #else buffer[21U] = 0U; #endif +#if defined(USE_P25) buffer[22U] = (unsigned char)m_p25TXHang; - +#else + buffer[22U] = 0U; +#endif +#if defined(USE_NXDN) buffer[23U] = (unsigned char)m_nxdnTXHang; - +#else + buffer[23U] = 0U; +#endif #if defined(USE_M17) buffer[24U] = (unsigned char)(m_m17TXLevel * 2.55F + 0.5F); buffer[25U] = (unsigned char)m_m17TXHang; @@ -2486,14 +2701,22 @@ bool CModem::setConfig2() if (m_dstarEnabled) buffer[4U] |= 0x01U; #endif +#if defined(USE_DMR) if (m_dmrEnabled) buffer[4U] |= 0x02U; +#endif +#if defined(USE_YSF) if (m_ysfEnabled) buffer[4U] |= 0x04U; +#endif +#if defined(USE_P25) if (m_p25Enabled) buffer[4U] |= 0x08U; +#endif +#if defined(USE_NXDN) if (m_nxdnEnabled) buffer[4U] |= 0x10U; +#endif #if defined(USE_FM) if (m_fmEnabled) buffer[4U] |= 0x20U; @@ -2522,15 +2745,32 @@ bool CModem::setConfig2() buffer[10U] = (unsigned char)(m_rxLevel * 2.55F + 0.5F); buffer[11U] = (unsigned char)(m_cwIdTXLevel * 2.55F + 0.5F); + #if defined(USE_DSTAR) buffer[12U] = (unsigned char)(m_dstarTXLevel * 2.55F + 0.5F); #else buffer[12U] = 0U; #endif +#if defined(USE_DMR) buffer[13U] = (unsigned char)(m_dmrTXLevel * 2.55F + 0.5F); +#else + buffer[13U] = 0U; +#endif +#if defined(USE_YSF) buffer[14U] = (unsigned char)(m_ysfTXLevel * 2.55F + 0.5F); +#else + buffer[14U] = 0U; +#endif +#if defined(USE_P25) buffer[15U] = (unsigned char)(m_p25TXLevel * 2.55F + 0.5F); +#else + buffer[15U] = 0U; +#endif +#if defined(USE_NXDN) buffer[16U] = (unsigned char)(m_nxdnTXLevel * 2.55F + 0.5F); +#else + buffer[16U] = 0U; +#endif #if defined(USE_M17) buffer[17U] = (unsigned char)(m_m17TXLevel * 2.55F + 0.5F); #else @@ -2551,22 +2791,41 @@ bool CModem::setConfig2() #else buffer[20U] = 0U; #endif + buffer[21U] = 0x00U; buffer[22U] = 0x00U; +#if defined(USE_YSF) buffer[23U] = (unsigned char)m_ysfTXHang; +#else + buffer[23U] = 0U; +#endif +#if defined(USE_P25) buffer[24U] = (unsigned char)m_p25TXHang; +#else + buffer[24U] = 0U; +#endif +#if defined(USE_NXDN) buffer[25U] = (unsigned char)m_nxdnTXHang; +#else + buffer[25U] = 0U; +#endif #if defined(USE_M17) buffer[26U] = (unsigned char)m_m17TXHang; #else buffer[26U] = 0U; #endif + buffer[27U] = 0x00U; buffer[28U] = 0x00U; +#if defined(USE_DMR) buffer[29U] = m_dmrColorCode; buffer[30U] = m_dmrDelay; +#else + buffer[29U] = 0U; + buffer[30U] = 0U; +#endif #if defined(USE_AX25) buffer[31U] = (unsigned char)(m_ax25RXTwist + 128); @@ -2579,6 +2838,7 @@ bool CModem::setConfig2() buffer[33U] = 0U; buffer[34U] = 0U; #endif + buffer[35U] = 0x00U; buffer[36U] = 0x00U; buffer[37U] = 0x00U; @@ -2850,6 +3110,7 @@ bool CModem::sendCWId(const std::string& callsign) return m_port->write(buffer, length + 3U) == int(length + 3U); } +#if defined(USE_DMR) bool CModem::writeDMRStart(bool tx) { assert(m_port != NULL); @@ -2916,6 +3177,7 @@ bool CModem::writeDMRShortLC(const unsigned char* lc) return m_port->write(buffer, 12U) == 12; } +#endif #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) diff --git a/Modem.h b/Modem.h index 8b87507..3681b6b 100644 --- a/Modem.h +++ b/Modem.h @@ -49,10 +49,19 @@ public: void setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency); void setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool m17Enabled, bool pocsagEnabled, bool fmEnabled, bool ax25Enabled); void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float m17TXLevel, float pocsagLevel, float fmTXLevel, float ax25TXLevel); + +#if defined(USE_DMR) void setDMRParams(unsigned int colorCode); +#endif +#if defined(USE_YSF) void setYSFParams(bool loDev, unsigned int txHang); +#endif +#if defined(USE_P25) void setP25Params(unsigned int txHang); +#endif +#if defined(USE_NXDN) void setNXDNParams(unsigned int txHang); +#endif #if defined(USE_M17) void setM17Params(unsigned int txHang); #endif @@ -73,10 +82,18 @@ public: #if defined(USE_DSTAR) bool hasDStar() const; #endif +#if defined(USE_DMR) bool hasDMR() const; +#endif +#if defined(USE_YSF) bool hasYSF() const; +#endif +#if defined(USE_P25) bool hasP25() const; +#endif +#if defined(USE_NXDN) bool hasNXDN() const; +#endif #if defined(USE_M17) bool hasM17() const; #endif @@ -94,11 +111,19 @@ public: #if defined(USE_DSTAR) unsigned int readDStarData(unsigned char* data); #endif +#if defined(USE_DMR) unsigned int readDMRData1(unsigned char* data); unsigned int readDMRData2(unsigned char* data); +#endif +#if defined(USE_YSF) unsigned int readYSFData(unsigned char* data); +#endif +#if defined(USE_P25) unsigned int readP25Data(unsigned char* data); +#endif +#if defined(USE_NXDN) unsigned int readNXDNData(unsigned char* data); +#endif #if defined(USE_M17) unsigned int readM17Data(unsigned char* data); #endif @@ -112,11 +137,19 @@ public: #if defined(USE_DSTAR) bool hasDStarSpace() const; #endif +#if defined(USE_DMR) bool hasDMRSpace1() const; bool hasDMRSpace2() const; +#endif +#if defined(USE_YSF) bool hasYSFSpace() const; +#endif +#if defined(USE_P25) bool hasP25Space() const; +#endif +#if defined(USE_NXDN) bool hasNXDNSpace() const; +#endif #if defined(USE_M17) bool hasM17Space() const; #endif @@ -141,11 +174,19 @@ public: #if defined(USE_DSTAR) bool writeDStarData(const unsigned char* data, unsigned int length); #endif +#if defined(USE_DMR) bool writeDMRData1(const unsigned char* data, unsigned int length); bool writeDMRData2(const unsigned char* data, unsigned int length); +#endif +#if defined(USE_YSF) bool writeYSFData(const unsigned char* data, unsigned int length); +#endif +#if defined(USE_P25) bool writeP25Data(const unsigned char* data, unsigned int length); +#endif +#if defined(USE_NXDN) bool writeNXDNData(const unsigned char* data, unsigned int length); +#endif #if defined(USE_M17) bool writeM17Data(const unsigned char* data, unsigned int length); #endif @@ -162,10 +203,18 @@ public: #if defined(USE_DSTAR) bool writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector); #endif +#if defined(USE_DMR) bool writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); +#endif +#if defined(USE_YSF) bool writeYSFInfo(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin); +#endif +#if defined(USE_P25) bool writeP25Info(const char* source, bool group, unsigned int dest, const char* type); +#endif +#if defined(USE_NXDN) bool writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type); +#endif #if defined(USE_M17) bool writeM17Info(const char* source, const char* dest, const char* type); #endif @@ -174,10 +223,11 @@ public: #endif bool writeIPInfo(const std::string& address); +#if defined(USE_DMR) bool writeDMRStart(bool tx); bool writeDMRShortLC(const unsigned char* lc); bool writeDMRAbort(unsigned int slotNo); - +#endif bool writeTransparentData(const unsigned char* data, unsigned int length); unsigned int readTransparentData(unsigned char* data); @@ -197,11 +247,19 @@ public: private: unsigned int m_protocolVersion; +#if defined(USE_DMR) unsigned int m_dmrColorCode; +#endif +#if defined(USE_YSF) bool m_ysfLoDev; unsigned int m_ysfTXHang; +#endif +#if defined(USE_P25) unsigned int m_p25TXHang; +#endif +#if defined(USE_NXDN) unsigned int m_nxdnTXHang; +#endif #if defined(USE_M17) unsigned int m_m17TXHang; #endif @@ -210,16 +268,26 @@ private: bool m_txInvert; bool m_pttInvert; unsigned int m_txDelay; +#if defined(USE_DMR) unsigned int m_dmrDelay; +#endif float m_rxLevel; float m_cwIdTXLevel; #if defined(USE_DSTAR) float m_dstarTXLevel; #endif +#if defined(USE_DMR) float m_dmrTXLevel; +#endif +#if defined(USE_YSF) float m_ysfTXLevel; +#endif +#if defined(USE_P25) float m_p25TXLevel; +#endif +#if defined(USE_NXDN) float m_nxdnTXLevel; +#endif #if defined(USE_M17) float m_m17TXLevel; #endif @@ -244,10 +312,18 @@ private: #if defined(USE_DSTAR) bool m_dstarEnabled; #endif +#if defined(USE_DMR) bool m_dmrEnabled; +#endif +#if defined(USE_YSF) bool m_ysfEnabled; +#endif +#if defined(USE_P25) bool m_p25Enabled; +#endif +#if defined(USE_NXDN) bool m_nxdnEnabled; +#endif #if defined(USE_M17) bool m_m17Enabled; #endif @@ -273,16 +349,24 @@ private: CRingBuffer m_rxDStarData; CRingBuffer m_txDStarData; #endif +#if defined(USE_DMR) CRingBuffer m_rxDMRData1; CRingBuffer m_rxDMRData2; CRingBuffer m_txDMRData1; CRingBuffer m_txDMRData2; +#endif +#if defined(USE_YSF) CRingBuffer m_rxYSFData; CRingBuffer m_txYSFData; +#endif +#if defined(USE_P25) CRingBuffer m_rxP25Data; CRingBuffer m_txP25Data; +#endif +#if defined(USE_NXDN) CRingBuffer m_rxNXDNData; CRingBuffer m_txNXDNData; +#endif #if defined(USE_M17) CRingBuffer m_rxM17Data; CRingBuffer m_txM17Data; @@ -309,11 +393,19 @@ private: #if defined(USE_DSTAR) unsigned int m_dstarSpace; #endif +#if defined(USE_DMR) unsigned int m_dmrSpace1; unsigned int m_dmrSpace2; +#endif +#if defined(USE_YSF) unsigned int m_ysfSpace; +#endif +#if defined(USE_P25) unsigned int m_p25Space; +#endif +#if defined(USE_NXDN) unsigned int m_nxdnSpace; +#endif #if defined(USE_M17) unsigned int m_m17Space; #endif diff --git a/RemoteControl.cpp b/RemoteControl.cpp index 92ea21c..cc916de 100644 --- a/RemoteControl.cpp +++ b/RemoteControl.cpp @@ -69,14 +69,22 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command) else if (m_args.at(1U) == "d-star") m_command = RCD_MODE_DSTAR; #endif +#if defined(USE_DMR) else if (m_args.at(1U) == "dmr") m_command = RCD_MODE_DMR; +#endif +#if defined(USE_YSF) else if (m_args.at(1U) == "ysf") m_command = RCD_MODE_YSF; +#endif +#if defined(USE_P25) else if (m_args.at(1U) == "p25") m_command = RCD_MODE_P25; +#endif +#if defined(USE_NXDN) else if (m_args.at(1U) == "nxdn") m_command = RCD_MODE_NXDN; +#endif #if defined(USE_M17) else if (m_args.at(1U) == "m17") m_command = RCD_MODE_M17; @@ -89,18 +97,26 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command) m_command = RCD_ENABLE_DSTAR; else #endif +#if defined(USE_DMR) if (m_args.at(1U) == "dmr") m_command = RCD_ENABLE_DMR; else +#endif +#if defined(USE_YSF) if (m_args.at(1U) == "ysf") m_command = RCD_ENABLE_YSF; else +#endif +#if defined(USE_P25) if (m_args.at(1U) == "p25") m_command = RCD_ENABLE_P25; else +#endif +#if defined(USE_NXDN) if (m_args.at(1U) == "nxdn") m_command = RCD_ENABLE_NXDN; else +#endif #if defined(USE_M17) if (m_args.at(1U) == "m17") m_command = RCD_ENABLE_M17; @@ -123,18 +139,26 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command) m_command = RCD_DISABLE_DSTAR; else #endif +#if defined(USE_DMR) if (m_args.at(1U) == "dmr") m_command = RCD_DISABLE_DMR; else +#endif +#if defined(USE_YSF) if (m_args.at(1U) == "ysf") m_command = RCD_DISABLE_YSF; else +#endif +#if defined(USE_P25) if (m_args.at(1U) == "p25") m_command = RCD_DISABLE_P25; else +#endif +#if defined(USE_NXDN) if (m_args.at(1U) == "nxdn") m_command = RCD_DISABLE_NXDN; else +#endif #if defined(USE_M17) if (m_args.at(1U) == "m17") m_command = RCD_DISABLE_M17; @@ -214,10 +238,18 @@ unsigned int CRemoteControl::getArgCount() const #if defined(USE_DSTAR) case RCD_MODE_DSTAR: #endif +#if defined(USE_DMR) case RCD_MODE_DMR: +#endif +#if defined(USE_YSF) case RCD_MODE_YSF: +#endif +#if defined(USE_P25) case RCD_MODE_P25: +#endif +#if defined(USE_NXDN) case RCD_MODE_NXDN: +#endif #if defined(USE_M17) case RCD_MODE_M17: #endif @@ -244,10 +276,18 @@ std::string CRemoteControl::getArgString(unsigned int n) const #if defined(USE_DSTAR) case RCD_MODE_DSTAR: #endif +#if defined(USE_DMR) case RCD_MODE_DMR: +#endif +#if defined(USE_YSF) case RCD_MODE_YSF: +#endif +#if defined(USE_P25) case RCD_MODE_P25: +#endif +#if defined(USE_NXDN) case RCD_MODE_NXDN: +#endif #if defined(USE_M17) case RCD_MODE_M17: #endif diff --git a/RemoteControl.h b/RemoteControl.h index c8b6fbd..d29e493 100644 --- a/RemoteControl.h +++ b/RemoteControl.h @@ -35,10 +35,18 @@ enum REMOTE_COMMAND { #if defined(USE_DSTAR) RCD_MODE_DSTAR, #endif +#if defined(USE_DMR) RCD_MODE_DMR, +#endif +#if defined(USE_YSF) RCD_MODE_YSF, +#endif +#if defined(USE_P25) RCD_MODE_P25, +#endif +#if defined(USE_NXDN) RCD_MODE_NXDN, +#endif #if defined(USE_M17) RCD_MODE_M17, #endif @@ -48,10 +56,18 @@ enum REMOTE_COMMAND { #if defined(USE_DSTAR) RCD_ENABLE_DSTAR, #endif +#if defined(USE_DMR) RCD_ENABLE_DMR, +#endif +#if defined(USE_YSF) RCD_ENABLE_YSF, +#endif +#if defined(USE_P25) RCD_ENABLE_P25, +#endif +#if defined(USE_NXDN) RCD_ENABLE_NXDN, +#endif #if defined(USE_M17) RCD_ENABLE_M17, #endif @@ -64,10 +80,18 @@ enum REMOTE_COMMAND { #if defined(USE_DSTAR) RCD_DISABLE_DSTAR, #endif +#if defined(USE_DMR) RCD_DISABLE_DMR, +#endif +#if defined(USE_YSF) RCD_DISABLE_YSF, +#endif +#if defined(USE_P25) RCD_DISABLE_P25, +#endif +#if defined(USE_NXDN) RCD_DISABLE_NXDN, +#endif #if defined(USE_M17) RCD_DISABLE_M17, #endif diff --git a/Sync.cpp b/Sync.cpp index 6af0896..f437f61 100644 --- a/Sync.cpp +++ b/Sync.cpp @@ -38,6 +38,7 @@ void CSync::addDStarSync(unsigned char* data) } #endif +#if defined(USE_DMR) void CSync::addDMRDataSync(unsigned char* data, bool duplex) { assert(data != NULL); @@ -63,21 +64,27 @@ void CSync::addDMRAudioSync(unsigned char* data, bool duplex) data[i + 13U] = (data[i + 13U] & ~SYNC_MASK[i]) | MS_SOURCED_AUDIO_SYNC[i]; } } +#endif +#if defined(USE_YSF) void CSync::addYSFSync(unsigned char* data) { assert(data != NULL); ::memcpy(data, YSF_SYNC_BYTES, YSF_SYNC_LENGTH_BYTES); } +#endif +#if defined(USE_P25) void CSync::addP25Sync(unsigned char* data) { assert(data != NULL); ::memcpy(data, P25_SYNC_BYTES, P25_SYNC_LENGTH_BYTES); } +#endif +#if defined(USE_NXDN) void CSync::addNXDNSync(unsigned char* data) { assert(data != NULL); @@ -85,6 +92,7 @@ void CSync::addNXDNSync(unsigned char* data) for (unsigned int i = 0U; i < NXDN_FSW_BYTES_LENGTH; i++) data[i] = (data[i] & ~NXDN_FSW_BYTES_MASK[i]) | NXDN_FSW_BYTES[i]; } +#endif #if defined(USE_M17) void CSync::addM17LinkSetupSync(unsigned char* data) diff --git a/Sync.h b/Sync.h index 7afc043..be182f6 100644 --- a/Sync.h +++ b/Sync.h @@ -27,14 +27,23 @@ public: #if defined(USE_DSTAR) static void addDStarSync(unsigned char* data); #endif + +#if defined(USE_DMR) static void addDMRDataSync(unsigned char* data, bool duplex); static void addDMRAudioSync(unsigned char* data, bool duplex); +#endif +#if defined(USE_YSF) static void addYSFSync(unsigned char* data); +#endif +#if defined(USE_P25) static void addP25Sync(unsigned char* data); +#endif +#if defined(USE_NXDN) static void addNXDNSync(unsigned char* data); +#endif #if defined(USE_M17) static void addM17LinkSetupSync(unsigned char* data);