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