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