mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2026-04-01 19:04:38 +02:00
Make compiling D-Star conditional.
This commit is contained in:
parent
5a12f49a6e
commit
37420dc93c
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2010,2014,2016,2018,2021 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2010,2014,2016,2018,2021,2023 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2016 Mathias Weyland, HB9FRV
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -574,6 +574,7 @@ unsigned int CAMBEFEC::regenerateDMR(unsigned char* bytes) const
|
|||
return errors;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int CAMBEFEC::regenerateDStar(unsigned char* bytes) const
|
||||
{
|
||||
assert(bytes != NULL);
|
||||
|
|
@ -605,6 +606,7 @@ unsigned int CAMBEFEC::regenerateDStar(unsigned char* bytes) const
|
|||
|
||||
return errors;
|
||||
}
|
||||
#endif
|
||||
|
||||
unsigned int CAMBEFEC::regenerateYSFDN(unsigned char* bytes) const
|
||||
{
|
||||
|
|
@ -791,6 +793,7 @@ unsigned int CAMBEFEC::regenerateIMBE(unsigned char* bytes) const
|
|||
return errors;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int CAMBEFEC::regenerateDStar(unsigned int& a, unsigned int& b) const
|
||||
{
|
||||
unsigned int orig_a = a;
|
||||
|
|
@ -824,6 +827,7 @@ unsigned int CAMBEFEC::regenerateDStar(unsigned int& a, unsigned int& b) const
|
|||
|
||||
return errsA + errsB;
|
||||
}
|
||||
#endif
|
||||
|
||||
unsigned int CAMBEFEC::regenerateDMR(unsigned int& a, unsigned int& b, unsigned int& c) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2010,2014,2016,2018 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2010,2014,2016,2018,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 @@
|
|||
#if !defined(AMBEFEC_H)
|
||||
#define AMBEFEC_H
|
||||
|
||||
#include "Defines.h"
|
||||
|
||||
class CAMBEFEC {
|
||||
public:
|
||||
CAMBEFEC();
|
||||
|
|
@ -26,14 +28,17 @@ public:
|
|||
|
||||
unsigned int regenerateDMR(unsigned char* bytes) const;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int regenerateDStar(unsigned char* bytes) const;
|
||||
|
||||
#endif
|
||||
unsigned int regenerateYSFDN(unsigned char* bytes) const;
|
||||
|
||||
unsigned int regenerateIMBE(unsigned char* bytes) const;
|
||||
|
||||
private:
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int regenerateDStar(unsigned int& a, unsigned int& b) const;
|
||||
#endif
|
||||
unsigned int regenerateDMR(unsigned int& a, unsigned int& b,unsigned int& c) const;
|
||||
};
|
||||
|
||||
|
|
|
|||
6
CRC.cpp
6
CRC.cpp
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2015,2016,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
|
||||
|
|
@ -50,6 +50,7 @@ const uint8_t CRC8_TABLE[] = {
|
|||
0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, 0xE6, 0xE1, 0xE8, 0xEF,
|
||||
0xFA, 0xFD, 0xF4, 0xF3, 0x01 };
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
const uint16_t CCITT16_TABLE1[] = {
|
||||
0x0000U, 0x1189U, 0x2312U, 0x329bU, 0x4624U, 0x57adU, 0x6536U, 0x74bfU,
|
||||
0x8c48U, 0x9dc1U, 0xaf5aU, 0xbed3U, 0xca6cU, 0xdbe5U, 0xe97eU, 0xf8f7U,
|
||||
|
|
@ -83,6 +84,7 @@ const uint16_t CCITT16_TABLE1[] = {
|
|||
0x6b46U, 0x7acfU, 0x4854U, 0x59ddU, 0x2d62U, 0x3cebU, 0x0e70U, 0x1ff9U,
|
||||
0xf78fU, 0xe606U, 0xd49dU, 0xc514U, 0xb1abU, 0xa022U, 0x92b9U, 0x8330U,
|
||||
0x7bc7U, 0x6a4eU, 0x58d5U, 0x495cU, 0x3de3U, 0x2c6aU, 0x1ef1U, 0x0f78U };
|
||||
#endif
|
||||
|
||||
const uint16_t CCITT16_TABLE2[] = {
|
||||
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
|
||||
|
|
@ -186,6 +188,7 @@ bool CCRC::checkCCITT162(const unsigned char *in, unsigned int length)
|
|||
return crc8[0U] == in[length - 1U] && crc8[1U] == in[length - 2U];
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
void CCRC::addCCITT161(unsigned char *in, unsigned int length)
|
||||
{
|
||||
assert(in != NULL);
|
||||
|
|
@ -226,6 +229,7 @@ bool CCRC::checkCCITT161(const unsigned char *in, unsigned int length)
|
|||
|
||||
return crc8[0U] == in[length - 2U] && crc8[1U] == in[length - 1U];
|
||||
}
|
||||
#endif
|
||||
|
||||
unsigned char CCRC::crc8(const unsigned char *in, unsigned int length)
|
||||
{
|
||||
|
|
|
|||
8
CRC.h
8
CRC.h
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2015,2016,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,16 +19,22 @@
|
|||
#if !defined(CRC_H)
|
||||
#define CRC_H
|
||||
|
||||
#include "Defines.h"
|
||||
|
||||
class CCRC
|
||||
{
|
||||
public:
|
||||
static bool checkFiveBit(bool* in, unsigned int tcrc);
|
||||
static void encodeFiveBit(const bool* in, unsigned int& tcrc);
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
static void addCCITT161(unsigned char* in, unsigned int length);
|
||||
#endif
|
||||
static void addCCITT162(unsigned char* in, unsigned int length);
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
static bool checkCCITT161(const unsigned char* in, unsigned int length);
|
||||
#endif
|
||||
static bool checkCCITT162(const unsigned char* in, unsigned int length);
|
||||
|
||||
static unsigned char crc8(const unsigned char* in, unsigned int length);
|
||||
|
|
|
|||
24
Conf.cpp
24
Conf.cpp
|
|
@ -38,7 +38,9 @@ enum SECTION {
|
|||
SECTION_NXDNID_LOOKUP,
|
||||
SECTION_MODEM,
|
||||
SECTION_TRANSPARENT,
|
||||
#if defined(USE_DSTAR)
|
||||
SECTION_DSTAR,
|
||||
#endif
|
||||
SECTION_DMR,
|
||||
SECTION_FUSION,
|
||||
SECTION_P25,
|
||||
|
|
@ -53,7 +55,9 @@ enum SECTION {
|
|||
#if defined(USE_AX25)
|
||||
SECTION_AX25,
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
SECTION_DSTAR_NETWORK,
|
||||
#endif
|
||||
SECTION_DMR_NETWORK,
|
||||
SECTION_FUSION_NETWORK,
|
||||
SECTION_P25_NETWORK,
|
||||
|
|
@ -140,6 +144,7 @@ m_transparentRemoteAddress(),
|
|||
m_transparentRemotePort(0U),
|
||||
m_transparentLocalPort(0U),
|
||||
m_transparentSendFrameType(0U),
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarEnabled(false),
|
||||
m_dstarModule("C"),
|
||||
m_dstarSelfOnly(false),
|
||||
|
|
@ -150,6 +155,7 @@ m_dstarAckTime(750U),
|
|||
m_dstarAckMessage(DSTAR_ACK_BER),
|
||||
m_dstarErrorReply(true),
|
||||
m_dstarRemoteGateway(false),
|
||||
#endif
|
||||
m_dstarModeHang(10U),
|
||||
m_dmrEnabled(false),
|
||||
m_dmrBeacons(DMR_BEACONS_OFF),
|
||||
|
|
@ -252,13 +258,17 @@ m_ax25SlotTime(30U),
|
|||
m_ax25PPersist(128U),
|
||||
m_ax25Trace(false),
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarNetworkEnabled(false),
|
||||
m_dstarGatewayAddress(),
|
||||
m_dstarGatewayPort(0U),
|
||||
m_dstarLocalAddress(),
|
||||
m_dstarLocalPort(0U),
|
||||
#endif
|
||||
m_dstarNetworkModeHang(3U),
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarNetworkDebug(false),
|
||||
#endif
|
||||
m_dmrNetworkEnabled(false),
|
||||
m_dmrNetworkGatewayAddress(),
|
||||
m_dmrNetworkGatewayPort(0U),
|
||||
|
|
@ -373,8 +383,10 @@ bool CConf::read()
|
|||
section = SECTION_MODEM;
|
||||
else if (::strncmp(buffer, "[Transparent Data]", 18U) == 0)
|
||||
section = SECTION_TRANSPARENT;
|
||||
#if defined(USE_DSTAR)
|
||||
else if (::strncmp(buffer, "[D-Star]", 8U) == 0)
|
||||
section = SECTION_DSTAR;
|
||||
#endif
|
||||
else if (::strncmp(buffer, "[DMR]", 5U) == 0)
|
||||
section = SECTION_DMR;
|
||||
else if (::strncmp(buffer, "[System Fusion]", 15U) == 0)
|
||||
|
|
@ -397,8 +409,10 @@ bool CConf::read()
|
|||
else if (::strncmp(buffer, "[AX.25]", 7U) == 0)
|
||||
section = SECTION_AX25;
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
else if (::strncmp(buffer, "[D-Star Network]", 16U) == 0)
|
||||
section = SECTION_DSTAR_NETWORK;
|
||||
#endif
|
||||
else if (::strncmp(buffer, "[DMR Network]", 13U) == 0)
|
||||
section = SECTION_DMR_NETWORK;
|
||||
else if (::strncmp(buffer, "[System Fusion Network]", 23U) == 0)
|
||||
|
|
@ -619,6 +633,7 @@ bool CConf::read()
|
|||
m_transparentLocalPort = (unsigned short)::atoi(value);
|
||||
else if (::strcmp(key, "SendFrameType") == 0)
|
||||
m_transparentSendFrameType = (unsigned int)::atoi(value);
|
||||
#if defined(USE_DSTAR)
|
||||
} else if (section == SECTION_DSTAR) {
|
||||
if (::strcmp(key, "Enable") == 0)
|
||||
m_dstarEnabled = ::atoi(value) == 1;
|
||||
|
|
@ -667,6 +682,7 @@ bool CConf::read()
|
|||
m_dstarRemoteGateway = ::atoi(value) == 1;
|
||||
else if (::strcmp(key, "ModeHang") == 0)
|
||||
m_dstarModeHang = (unsigned int)::atoi(value);
|
||||
#endif
|
||||
} else if (section == SECTION_DMR) {
|
||||
if (::strcmp(key, "Enable") == 0)
|
||||
m_dmrEnabled = ::atoi(value) == 1;
|
||||
|
|
@ -920,6 +936,7 @@ bool CConf::read()
|
|||
else if (::strcmp(key, "Trace") == 0)
|
||||
m_ax25Trace = ::atoi(value) == 1;
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
} else if (section == SECTION_DSTAR_NETWORK) {
|
||||
if (::strcmp(key, "Enable") == 0)
|
||||
m_dstarNetworkEnabled = ::atoi(value) == 1;
|
||||
|
|
@ -935,6 +952,7 @@ bool CConf::read()
|
|||
m_dstarNetworkModeHang = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Debug") == 0)
|
||||
m_dstarNetworkDebug = ::atoi(value) == 1;
|
||||
#endif
|
||||
} else if (section == SECTION_DMR_NETWORK) {
|
||||
if (::strcmp(key, "Enable") == 0)
|
||||
m_dmrNetworkEnabled = ::atoi(value) == 1;
|
||||
|
|
@ -1327,10 +1345,12 @@ float CConf::getModemCWIdTXLevel() const
|
|||
return m_modemCWIdTXLevel;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
float CConf::getModemDStarTXLevel() const
|
||||
{
|
||||
return m_modemDStarTXLevel;
|
||||
}
|
||||
#endif
|
||||
|
||||
float CConf::getModemDMRTXLevel() const
|
||||
{
|
||||
|
|
@ -1423,6 +1443,7 @@ unsigned int CConf::getTransparentSendFrameType() const
|
|||
return m_transparentSendFrameType;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool CConf::getDStarEnabled() const
|
||||
{
|
||||
return m_dstarEnabled;
|
||||
|
|
@ -1477,6 +1498,7 @@ unsigned int CConf::getDStarModeHang() const
|
|||
{
|
||||
return m_dstarModeHang;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CConf::getDMREnabled() const
|
||||
{
|
||||
|
|
@ -1929,6 +1951,7 @@ bool CConf::getAX25Trace() const
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool CConf::getDStarNetworkEnabled() const
|
||||
{
|
||||
return m_dstarNetworkEnabled;
|
||||
|
|
@ -1963,6 +1986,7 @@ bool CConf::getDStarNetworkDebug() const
|
|||
{
|
||||
return m_dstarNetworkDebug;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CConf::getDMRNetworkEnabled() const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
#include "Sync.h"
|
||||
#include "Log.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <ctime>
|
||||
|
|
@ -38,8 +40,6 @@ bool CallsignCompare(const std::string& arg, const unsigned char* my)
|
|||
return true;
|
||||
}
|
||||
|
||||
// #define DUMP_DSTAR
|
||||
|
||||
CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, DSTAR_ACK_MESSAGE ackMessage, bool errorReply, const std::vector<std::string>& blackList, const std::vector<std::string>& whiteList, CDStarNetwork* network, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper) :
|
||||
m_callsign(NULL),
|
||||
m_gateway(NULL),
|
||||
|
|
@ -703,10 +703,6 @@ void CDStarControl::writeEndNet()
|
|||
|
||||
if (m_network != NULL)
|
||||
m_network->reset();
|
||||
|
||||
#if defined(DUMP_DSTAR)
|
||||
closeFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
void CDStarControl::writeNetwork()
|
||||
|
|
@ -768,10 +764,6 @@ void CDStarControl::writeNetwork()
|
|||
|
||||
writeQueueHeaderNet(data);
|
||||
|
||||
#if defined(DUMP_DSTAR)
|
||||
openFile();
|
||||
writeFile(data + 1U, length - 1U);
|
||||
#endif
|
||||
m_netState = RS_NET_AUDIO;
|
||||
|
||||
LINK_STATUS status = LS_NONE;
|
||||
|
|
@ -797,10 +789,6 @@ void CDStarControl::writeNetwork()
|
|||
|
||||
data[1U] = TAG_EOT;
|
||||
|
||||
#if defined(DUMP_DSTAR)
|
||||
writeFile(data + 1U, length - 1U);
|
||||
closeFile();
|
||||
#endif
|
||||
m_netNextFrameIsFastData = false;
|
||||
m_netSkipDTMFBlankingFrames = 0U;
|
||||
|
||||
|
|
@ -852,12 +840,6 @@ void CDStarControl::writeNetwork()
|
|||
m_packetTimer.start();
|
||||
m_netFrames++;
|
||||
|
||||
#if defined(DUMP_DSTAR)
|
||||
if (n == 1U)
|
||||
writeFile(m_netVoiceSyncData + 1U, m_netVoiceSyncDataLen - 1U);
|
||||
if (n >= 1U)
|
||||
writeFile(data + 1U, length - 1U);
|
||||
#endif
|
||||
if (n == 1U)
|
||||
writeQueueDataNet(m_netVoiceSyncData + 1U);
|
||||
if (n >= 1U)
|
||||
|
|
@ -906,9 +888,6 @@ void CDStarControl::clock()
|
|||
LogMessage("D-Star, network watchdog has expired, %.1f seconds, %u%% packet loss", float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames);
|
||||
writeJSONNet("lost", float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames);
|
||||
writeEndNet();
|
||||
#if defined(DUMP_DSTAR)
|
||||
closeFile();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1088,46 +1067,6 @@ void CDStarControl::writeNetworkDataRF(const unsigned char* data, unsigned int e
|
|||
m_network->writeData(data + 1U, DSTAR_FRAME_LENGTH_BYTES, errors, end, m_netState != RS_NET_IDLE);
|
||||
}
|
||||
|
||||
bool CDStarControl::openFile()
|
||||
{
|
||||
if (m_fp != NULL)
|
||||
return true;
|
||||
|
||||
time_t t;
|
||||
::time(&t);
|
||||
|
||||
struct tm* tm = ::localtime(&t);
|
||||
|
||||
char name[100U];
|
||||
::sprintf(name, "DStar_%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("DSTAR", 1U, 4U, m_fp);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CDStarControl::writeFile(const unsigned char* data, unsigned int length)
|
||||
{
|
||||
if (m_fp == NULL)
|
||||
return false;
|
||||
|
||||
::fwrite(data, 1U, length, m_fp);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CDStarControl::closeFile()
|
||||
{
|
||||
if (m_fp != NULL) {
|
||||
::fclose(m_fp);
|
||||
m_fp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool CDStarControl::insertSilence(const unsigned char* data, unsigned char seqNo)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
|
@ -1559,3 +1498,5 @@ std::string CDStarControl::convertBuffer(const unsigned char* buffer, unsigned i
|
|||
return callsign;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@
|
|||
#include "Timer.h"
|
||||
#include "Modem.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
|
@ -152,10 +154,6 @@ private:
|
|||
|
||||
std::string convertBuffer(const unsigned char* buffer, unsigned int length) const;
|
||||
|
||||
bool openFile();
|
||||
bool writeFile(const unsigned char* data, unsigned int length);
|
||||
void closeFile();
|
||||
|
||||
bool insertSilence(const unsigned char* data, unsigned char seqNo);
|
||||
void insertSilence(unsigned int count);
|
||||
|
||||
|
|
@ -166,3 +164,6 @@ private:
|
|||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2016,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
|
||||
|
|
@ -20,6 +20,8 @@
|
|||
#include "DStarHeader.h"
|
||||
#include "CRC.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
|
@ -163,3 +165,6 @@ void CDStarHeader::get(unsigned char* header) const
|
|||
|
||||
CCRC::addCCITT161(header, DSTAR_HEADER_LENGTH_BYTES);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2016,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 @@
|
|||
#ifndef DStarHeader_H
|
||||
#define DStarHeader_H
|
||||
|
||||
#include "Defines.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
class CDStarHeader {
|
||||
public:
|
||||
CDStarHeader(const unsigned char* header);
|
||||
|
|
@ -56,3 +60,6 @@ private:
|
|||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014,2016,2019,2020,2021 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2009-2014,2016,2019,2020,2021,2023 by Jonathan Naylor G4KLX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -23,6 +23,8 @@
|
|||
#include "Utils.h"
|
||||
#include "Log.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
|
@ -345,3 +347,6 @@ void CDStarNetwork::getStatus(LINK_STATUS& status, unsigned char* reflector)
|
|||
|
||||
::memcpy(reflector, m_linkReflector, DSTAR_LONG_CALLSIGN_LENGTH);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2014,2016,2020,2021 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2009-2014,2016,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 "DStarDefines.h"
|
||||
#include "RingBuffer.h"
|
||||
#include "UDPSocket.h"
|
||||
#include "Defines.h"
|
||||
#include "Timer.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <random>
|
||||
|
|
@ -73,3 +76,6 @@ private:
|
|||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
#include "CRC.h"
|
||||
#include "Log.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
|
@ -233,3 +235,6 @@ void CDStarSlowData::getSlowData(unsigned char* data)
|
|||
data[2U] = 'f' ^ DSTAR_SCRAMBLER_BYTES[2U];
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@
|
|||
#define DStarSlowData_H
|
||||
|
||||
#include "DStarHeader.h"
|
||||
#include "Defines.h"
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
class CDStarSlowData {
|
||||
public:
|
||||
|
|
@ -53,3 +56,6 @@ private:
|
|||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
108
MMDVMHost.cpp
108
MMDVMHost.cpp
|
|
@ -146,7 +146,9 @@ int main(int argc, char** argv)
|
|||
CMMDVMHost::CMMDVMHost(const std::string& confFile) :
|
||||
m_conf(confFile),
|
||||
m_modem(NULL),
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstar(NULL),
|
||||
#endif
|
||||
m_dmr(NULL),
|
||||
m_ysf(NULL),
|
||||
m_p25(NULL),
|
||||
|
|
@ -161,7 +163,9 @@ m_fm(NULL),
|
|||
#if defined(USE_AX25)
|
||||
m_ax25(NULL),
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarNetwork(NULL),
|
||||
#endif
|
||||
m_dmrNetwork(NULL),
|
||||
m_ysfNetwork(NULL),
|
||||
m_p25Network(NULL),
|
||||
|
|
@ -177,7 +181,9 @@ m_fmNetwork(NULL),
|
|||
m_ax25Network(NULL),
|
||||
#endif
|
||||
m_mode(MODE_IDLE),
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarRFModeHang(10U),
|
||||
#endif
|
||||
m_dmrRFModeHang(10U),
|
||||
m_ysfRFModeHang(10U),
|
||||
m_p25RFModeHang(10U),
|
||||
|
|
@ -186,7 +192,9 @@ m_m17RFModeHang(10U),
|
|||
#if defined(USE_FM)
|
||||
m_fmRFModeHang(10U),
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarNetModeHang(3U),
|
||||
#endif
|
||||
m_dmrNetModeHang(3U),
|
||||
m_ysfNetModeHang(3U),
|
||||
m_p25NetModeHang(3U),
|
||||
|
|
@ -334,10 +342,12 @@ int CMMDVMHost::run()
|
|||
if (!ret)
|
||||
return 1;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarEnabled && !m_modem->hasDStar()) {
|
||||
LogWarning("D-Star enabled in the host but not in the modem firmware, disabling");
|
||||
m_dstarEnabled = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_dmrEnabled && !m_modem->hasDMR()) {
|
||||
LogWarning("DMR enabled in the host but not in the modem firmware, disabling");
|
||||
|
|
@ -388,11 +398,13 @@ int CMMDVMHost::run()
|
|||
LogInfo("Opening network connections");
|
||||
writeJSONMessage("Opening network connections");
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarEnabled && m_conf.getDStarNetworkEnabled()) {
|
||||
ret = createDStarNetwork();
|
||||
if (!ret)
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_dmrEnabled && m_conf.getDMRNetworkEnabled()) {
|
||||
ret = createDMRNetwork();
|
||||
|
|
@ -535,6 +547,7 @@ int CMMDVMHost::run()
|
|||
CStopWatch stopWatch;
|
||||
stopWatch.start();
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarEnabled) {
|
||||
std::string module = m_conf.getDStarModule();
|
||||
bool selfOnly = m_conf.getDStarSelfOnly();
|
||||
|
|
@ -564,6 +577,7 @@ int CMMDVMHost::run()
|
|||
|
||||
m_dstar = new CDStarControl(m_callsign, module, selfOnly, ackReply, ackTime, ackMessage, errorReply, blackList, whiteList, m_dstarNetwork, m_timeout, m_duplex, remoteGateway, rssi);
|
||||
}
|
||||
#endif
|
||||
|
||||
DMR_BEACONS dmrBeacons = DMR_BEACONS_OFF;
|
||||
CTimer dmrBeaconIntervalTimer(1000U);
|
||||
|
|
@ -822,6 +836,7 @@ int CMMDVMHost::run()
|
|||
unsigned int len;
|
||||
bool ret;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
len = m_modem->readDStarData(data);
|
||||
if (m_dstar != NULL && len > 0U) {
|
||||
if (m_mode == MODE_IDLE) {
|
||||
|
|
@ -838,6 +853,7 @@ int CMMDVMHost::run()
|
|||
LogWarning("D-Star modem data received when in mode %u", m_mode);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
len = m_modem->readDMRData1(data);
|
||||
if (m_dmr != NULL && len > 0U) {
|
||||
|
|
@ -1020,6 +1036,7 @@ int CMMDVMHost::run()
|
|||
setMode(MODE_IDLE);
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL) {
|
||||
ret = m_modem->hasDStarSpace();
|
||||
if (ret) {
|
||||
|
|
@ -1038,6 +1055,7 @@ int CMMDVMHost::run()
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_dmr != NULL) {
|
||||
ret = m_modem->hasDMRSpace1();
|
||||
|
|
@ -1249,9 +1267,11 @@ int CMMDVMHost::run()
|
|||
|
||||
m_reload = false;
|
||||
}
|
||||
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->clock();
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->clock();
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -1271,8 +1291,10 @@ int CMMDVMHost::run()
|
|||
m_fm->clock(ms);
|
||||
#endif
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->clock(ms);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->clock(ms);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -1372,10 +1394,12 @@ int CMMDVMHost::run()
|
|||
LogInfo("Closing network connections");
|
||||
writeJSONMessage("Closing network connections");
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL) {
|
||||
m_dstarNetwork->close();
|
||||
delete m_dstarNetwork;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_dmrNetwork != NULL) {
|
||||
m_dmrNetwork->close(true);
|
||||
|
|
@ -1433,7 +1457,9 @@ int CMMDVMHost::run()
|
|||
LogInfo("Stopping protocol handlers");
|
||||
writeJSONMessage("Stopping protocol handlers");
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
delete m_dstar;
|
||||
#endif
|
||||
delete m_dmr;
|
||||
delete m_ysf;
|
||||
delete m_p25;
|
||||
|
|
@ -1481,7 +1507,11 @@ bool CMMDVMHost::createModem()
|
|||
unsigned int dmrDelay = m_conf.getModemDMRDelay();
|
||||
float rxLevel = m_conf.getModemRXLevel();
|
||||
float cwIdTXLevel = m_conf.getModemCWIdTXLevel();
|
||||
#if defined(USE_DSTAR)
|
||||
float dstarTXLevel = m_conf.getModemDStarTXLevel();
|
||||
#else
|
||||
float dstarTXLevel = 0.0F;
|
||||
#endif
|
||||
float dmrTXLevel = m_conf.getModemDMRTXLevel();
|
||||
float ysfTXLevel = m_conf.getModemYSFTXLevel();
|
||||
float p25TXLevel = m_conf.getModemP25TXLevel();
|
||||
|
|
@ -1561,7 +1591,9 @@ bool CMMDVMHost::createModem()
|
|||
LogInfo(" DMR Delay: %u (%.1fms)", dmrDelay, float(dmrDelay) * 0.0416666F);
|
||||
LogInfo(" RX Level: %.1f%%", rxLevel);
|
||||
LogInfo(" CW Id TX Level: %.1f%%", cwIdTXLevel);
|
||||
#if defined(USE_DSTAR)
|
||||
LogInfo(" D-Star TX Level: %.1f%%", dstarTXLevel);
|
||||
#endif
|
||||
LogInfo(" DMR TX Level: %.1f%%", dmrTXLevel);
|
||||
LogInfo(" YSF TX Level: %.1f%%", ysfTXLevel);
|
||||
LogInfo(" P25 TX Level: %.1f%%", p25TXLevel);
|
||||
|
|
@ -1709,6 +1741,7 @@ bool CMMDVMHost::createModem()
|
|||
return true;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool CMMDVMHost::createDStarNetwork()
|
||||
{
|
||||
std::string gatewayAddress = m_conf.getDStarGatewayAddress();
|
||||
|
|
@ -1738,6 +1771,7 @@ bool CMMDVMHost::createDStarNetwork()
|
|||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CMMDVMHost::createDMRNetwork()
|
||||
{
|
||||
|
|
@ -2017,7 +2051,9 @@ bool CMMDVMHost::createAX25Network()
|
|||
|
||||
void CMMDVMHost::readParams()
|
||||
{
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarEnabled = m_conf.getDStarEnabled();
|
||||
#endif
|
||||
m_dmrEnabled = m_conf.getDMREnabled();
|
||||
m_ysfEnabled = m_conf.getFusionEnabled();
|
||||
m_p25Enabled = m_conf.getP25Enabled();
|
||||
|
|
@ -2042,7 +2078,9 @@ void CMMDVMHost::readParams()
|
|||
LogInfo(" Id: %u", m_id);
|
||||
LogInfo(" Duplex: %s", m_duplex ? "yes" : "no");
|
||||
LogInfo(" Timeout: %us", m_timeout);
|
||||
#if defined(USE_DSTAR)
|
||||
LogInfo(" D-Star: %s", m_dstarEnabled ? "enabled" : "disabled");
|
||||
#endif
|
||||
LogInfo(" DMR: %s", m_dmrEnabled ? "enabled" : "disabled");
|
||||
LogInfo(" YSF: %s", m_ysfEnabled ? "enabled" : "disabled");
|
||||
LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled");
|
||||
|
|
@ -2065,8 +2103,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
|
||||
switch (mode) {
|
||||
case MODE_DSTAR:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(true);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2089,8 +2129,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(true);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2122,8 +2164,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_DMR:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(true);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2146,8 +2190,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(true);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2183,8 +2229,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_YSF:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2207,8 +2255,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2240,8 +2290,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_P25:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2264,8 +2316,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2297,8 +2351,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_NXDN:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2321,8 +2377,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2354,8 +2412,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_M17:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2378,8 +2438,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2411,8 +2473,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_POCSAG:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2435,8 +2499,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2468,8 +2534,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_FM:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2492,8 +2560,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(true);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2529,8 +2599,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
case MODE_LOCKOUT:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2553,8 +2625,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2591,8 +2665,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
|
||||
case MODE_ERROR:
|
||||
LogMessage("Mode set to Error");
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(false);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2615,8 +2691,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(false);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(false);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(false);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2651,8 +2729,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
break;
|
||||
|
||||
default:
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(true);
|
||||
#endif
|
||||
if (m_dmrNetwork != NULL)
|
||||
m_dmrNetwork->enable(true);
|
||||
if (m_ysfNetwork != NULL)
|
||||
|
|
@ -2675,8 +2755,10 @@ void CMMDVMHost::setMode(unsigned char mode)
|
|||
if (m_ax25Network != NULL)
|
||||
m_ax25Network->enable(true);
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstar != NULL)
|
||||
m_dstar->enable(true);
|
||||
#endif
|
||||
if (m_dmr != NULL)
|
||||
m_dmr->enable(true);
|
||||
if (m_ysf != NULL)
|
||||
|
|
@ -2752,10 +2834,12 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
|
|||
m_fixedMode = false;
|
||||
setMode(MODE_LOCKOUT);
|
||||
break;
|
||||
#if defined(USE_DSTAR)
|
||||
case RCD_MODE_DSTAR:
|
||||
if (m_dstar != NULL)
|
||||
processModeCommand(MODE_DSTAR, m_dstarRFModeHang);
|
||||
break;
|
||||
#endif
|
||||
case RCD_MODE_DMR:
|
||||
if (m_dmr != NULL)
|
||||
processModeCommand(MODE_DMR, m_dmrRFModeHang);
|
||||
|
|
@ -2782,12 +2866,14 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
|
|||
processModeCommand(MODE_FM, 0);
|
||||
break;
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
case RCD_ENABLE_DSTAR:
|
||||
if (m_dstar != NULL && !m_dstarEnabled)
|
||||
processEnableCommand(m_dstarEnabled, true);
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(true);
|
||||
break;
|
||||
#endif
|
||||
case RCD_ENABLE_DMR:
|
||||
if (m_dmr != NULL && !m_dmrEnabled)
|
||||
processEnableCommand(m_dmrEnabled, true);
|
||||
|
|
@ -2830,12 +2916,14 @@ void CMMDVMHost::remoteControl(const std::string& commandString)
|
|||
processEnableCommand(m_ax25Enabled, true);
|
||||
break;
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
case RCD_DISABLE_DSTAR:
|
||||
if (m_dstar != NULL && m_dstarEnabled)
|
||||
processEnableCommand(m_dstarEnabled, false);
|
||||
if (m_dstarNetwork != NULL)
|
||||
m_dstarNetwork->enable(false);
|
||||
break;
|
||||
#endif
|
||||
case RCD_DISABLE_DMR:
|
||||
if (m_dmr != NULL && m_dmrEnabled)
|
||||
processEnableCommand(m_dmrEnabled, false);
|
||||
|
|
@ -2974,12 +3062,15 @@ void CMMDVMHost::processEnableCommand(bool& mode, bool enabled)
|
|||
void CMMDVMHost::buildNetworkStatusString(std::string &str)
|
||||
{
|
||||
str = "";
|
||||
str += std::string("dstar:") + (((m_dstarNetwork == NULL) || (m_dstarEnabled == false)) ? "n/a" : (m_dstarNetwork->isConnected() ? "conn" : "disc"));
|
||||
str += std::string(" dmr:") + (((m_dmrNetwork == NULL) || (m_dmrEnabled == false)) ? "n/a" : (m_dmrNetwork->isConnected() ? "conn" : "disc"));
|
||||
str += std::string(" ysf:") + (((m_ysfNetwork == NULL) || (m_ysfEnabled == false)) ? "n/a" : (m_ysfNetwork->isConnected() ? "conn" : "disc"));
|
||||
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_DSTAR)
|
||||
str += std::string("dstar:") + (((m_dstarNetwork == NULL) || !m_dstarEnabled) ? "n/a" : (m_dstarNetwork->isConnected() ? "conn" : "disc"));
|
||||
#endif
|
||||
str += std::string(" dmr:") + (((m_dmrNetwork == NULL) || !m_dmrEnabled) ? "n/a" : (m_dmrNetwork->isConnected() ? "conn" : "disc"));
|
||||
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"));
|
||||
str += std::string(" m17:") + (((m_m17Network == NULL) || !m_m17Enabled) ? "n/a" : (m_m17Network->isConnected() ? "conn" : "disc"));
|
||||
#if defined(USE_FM)
|
||||
str += std::string(" fm:") + (m_fmEnabled ? "conn" : "n/a");
|
||||
#endif
|
||||
|
|
@ -2989,6 +3080,7 @@ void CMMDVMHost::buildNetworkHostsString(std::string &str)
|
|||
{
|
||||
str = "";
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
std::string dstarReflector;
|
||||
if (m_dstarEnabled && (m_dstarNetwork != NULL)) {
|
||||
unsigned char ref[DSTAR_LONG_CALLSIGN_LENGTH + 1];
|
||||
|
|
@ -3010,7 +3102,9 @@ void CMMDVMHost::buildNetworkHostsString(std::string &str)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
str += std::string("dstar:\"") + ((dstarReflector.length() == 0) ? "NONE" : dstarReflector) + "\"";
|
||||
#endif
|
||||
str += std::string(" dmr:\"") + ((m_dmrEnabled && (m_dmrNetwork != NULL)) ? m_conf.getDMRNetworkGatewayAddress() : "NONE") + "\"";
|
||||
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") + "\"";
|
||||
|
|
|
|||
10
MMDVMHost.h
10
MMDVMHost.h
|
|
@ -61,7 +61,9 @@ public:
|
|||
private:
|
||||
CConf m_conf;
|
||||
CModem* m_modem;
|
||||
#if defined(USE_DSTAR)
|
||||
CDStarControl* m_dstar;
|
||||
#endif
|
||||
CDMRControl* m_dmr;
|
||||
CYSFControl* m_ysf;
|
||||
CP25Control* m_p25;
|
||||
|
|
@ -76,7 +78,9 @@ private:
|
|||
#if defined(USE_AX25)
|
||||
CAX25Control* m_ax25;
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
CDStarNetwork* m_dstarNetwork;
|
||||
#endif
|
||||
CDMRNetwork* m_dmrNetwork;
|
||||
CYSFNetwork* m_ysfNetwork;
|
||||
CP25Network* m_p25Network;
|
||||
|
|
@ -92,7 +96,9 @@ private:
|
|||
CAX25Network* m_ax25Network;
|
||||
#endif
|
||||
unsigned char m_mode;
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int m_dstarRFModeHang;
|
||||
#endif
|
||||
unsigned int m_dmrRFModeHang;
|
||||
unsigned int m_ysfRFModeHang;
|
||||
unsigned int m_p25RFModeHang;
|
||||
|
|
@ -101,7 +107,9 @@ private:
|
|||
#if defined(USE_FM)
|
||||
unsigned int m_fmRFModeHang;
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int m_dstarNetModeHang;
|
||||
#endif
|
||||
unsigned int m_dmrNetModeHang;
|
||||
unsigned int m_ysfNetModeHang;
|
||||
unsigned int m_p25NetModeHang;
|
||||
|
|
@ -140,7 +148,9 @@ private:
|
|||
|
||||
void readParams();
|
||||
bool createModem();
|
||||
#if defined(USE_DSTAR)
|
||||
bool createDStarNetwork();
|
||||
#endif
|
||||
bool createDMRNetwork();
|
||||
bool createYSFNetwork();
|
||||
bool createP25Network();
|
||||
|
|
|
|||
60
Modem.cpp
60
Modem.cpp
|
|
@ -51,10 +51,12 @@ const unsigned char MMDVM_SET_FREQ = 0x04U;
|
|||
|
||||
const unsigned char MMDVM_SEND_CWID = 0x0AU;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
const unsigned char MMDVM_DSTAR_HEADER = 0x10U;
|
||||
const unsigned char MMDVM_DSTAR_DATA = 0x11U;
|
||||
const unsigned char MMDVM_DSTAR_LOST = 0x12U;
|
||||
const unsigned char MMDVM_DSTAR_EOT = 0x13U;
|
||||
#endif
|
||||
|
||||
const unsigned char MMDVM_DMR_DATA1 = 0x18U;
|
||||
const unsigned char MMDVM_DMR_LOST1 = 0x19U;
|
||||
|
|
@ -117,7 +119,9 @@ const unsigned int MAX_RESPONSES = 30U;
|
|||
|
||||
const unsigned int BUFFER_LENGTH = 2000U;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
const unsigned char CAP1_DSTAR = 0x01U;
|
||||
#endif
|
||||
const unsigned char CAP1_DMR = 0x02U;
|
||||
const unsigned char CAP1_YSF = 0x04U;
|
||||
const unsigned char CAP1_P25 = 0x08U;
|
||||
|
|
@ -149,7 +153,9 @@ m_txDelay(txDelay),
|
|||
m_dmrDelay(dmrDelay),
|
||||
m_rxLevel(0.0F),
|
||||
m_cwIdTXLevel(0.0F),
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarTXLevel(0.0F),
|
||||
#endif
|
||||
m_dmrTXLevel(0.0F),
|
||||
m_ysfTXLevel(0.0F),
|
||||
m_p25TXLevel(0.0F),
|
||||
|
|
@ -173,7 +179,9 @@ m_txFrequency(0U),
|
|||
#if defined(USE_POCSAG)
|
||||
m_pocsagFrequency(0U),
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarEnabled(false),
|
||||
#endif
|
||||
m_dmrEnabled(false),
|
||||
m_ysfEnabled(false),
|
||||
m_p25Enabled(false),
|
||||
|
|
@ -196,8 +204,10 @@ m_length(0U),
|
|||
m_offset(0U),
|
||||
m_state(SS_START),
|
||||
m_type(0U),
|
||||
#if defined(USE_DSTAR)
|
||||
m_rxDStarData(1000U, "Modem RX D-Star"),
|
||||
m_txDStarData(1000U, "Modem TX D-Star"),
|
||||
#endif
|
||||
m_rxDMRData1(1000U, "Modem RX DMR1"),
|
||||
m_rxDMRData2(1000U, "Modem RX DMR2"),
|
||||
m_txDMRData1(1000U, "Modem TX DMR1"),
|
||||
|
|
@ -229,7 +239,9 @@ m_sendTransparentDataFrameType(0U),
|
|||
m_statusTimer(1000U, 0U, 250U),
|
||||
m_inactivityTimer(1000U, 2U),
|
||||
m_playoutTimer(1000U, 0U, 10U),
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarSpace(0U),
|
||||
#endif
|
||||
m_dmrSpace1(0U),
|
||||
m_dmrSpace2(0U),
|
||||
m_ysfSpace(0U),
|
||||
|
|
@ -327,7 +339,9 @@ void CModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int tx
|
|||
|
||||
void CModem::setModeParams(bool dstarEnabled, bool dmrEnabled, bool ysfEnabled, bool p25Enabled, bool nxdnEnabled, bool m17Enabled, bool pocsagEnabled, bool fmEnabled, bool ax25Enabled)
|
||||
{
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarEnabled = dstarEnabled;
|
||||
#endif
|
||||
m_dmrEnabled = dmrEnabled;
|
||||
m_ysfEnabled = ysfEnabled;
|
||||
m_p25Enabled = p25Enabled;
|
||||
|
|
@ -348,7 +362,9 @@ void CModem::setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, flo
|
|||
{
|
||||
m_rxLevel = rxLevel;
|
||||
m_cwIdTXLevel = cwIdTXLevel;
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarTXLevel = dstarTXLevel;
|
||||
#endif
|
||||
m_dmrTXLevel = dmrTXLevel;
|
||||
m_ysfTXLevel = ysfTXLevel;
|
||||
m_p25TXLevel = p25TXLevel;
|
||||
|
|
@ -521,6 +537,7 @@ void CModem::clock(unsigned int ms)
|
|||
} else {
|
||||
// type == RTM_OK
|
||||
switch (m_type) {
|
||||
#if defined(USE_DSTAR)
|
||||
case MMDVM_DSTAR_HEADER: {
|
||||
if (m_trace)
|
||||
CUtils::dump(1U, "RX D-Star Header", m_buffer, m_length);
|
||||
|
|
@ -572,6 +589,7 @@ void CModem::clock(unsigned int ms)
|
|||
m_rxDStarData.addData(&data, 1U);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case MMDVM_DMR_DATA1: {
|
||||
if (m_trace)
|
||||
|
|
@ -867,8 +885,9 @@ void CModem::clock(unsigned int ms)
|
|||
#if defined(USE_AX25)
|
||||
m_ax25Space = 0U;
|
||||
#endif
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarSpace = m_buffer[m_offset + 3U];
|
||||
#endif
|
||||
m_dmrSpace1 = m_buffer[m_offset + 4U];
|
||||
m_dmrSpace2 = m_buffer[m_offset + 5U];
|
||||
m_ysfSpace = m_buffer[m_offset + 6U];
|
||||
|
|
@ -906,7 +925,9 @@ void CModem::clock(unsigned int ms)
|
|||
LogError("MMDVM DAC levels have overflowed");
|
||||
m_cd = (m_buffer[m_offset + 1U] & 0x40U) == 0x40U;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarSpace = m_buffer[m_offset + 3U];
|
||||
#endif
|
||||
m_dmrSpace1 = m_buffer[m_offset + 4U];
|
||||
m_dmrSpace2 = m_buffer[m_offset + 5U];
|
||||
m_ysfSpace = m_buffer[m_offset + 6U];
|
||||
|
|
@ -926,7 +947,9 @@ void CModem::clock(unsigned int ms)
|
|||
break;
|
||||
|
||||
default:
|
||||
#if defined(USE_DSTAR)
|
||||
m_dstarSpace = 0U;
|
||||
#endif
|
||||
m_dmrSpace1 = 0U;
|
||||
m_dmrSpace2 = 0U;
|
||||
m_ysfSpace = 0U;
|
||||
|
|
@ -1003,6 +1026,7 @@ void CModem::clock(unsigned int ms)
|
|||
if (!m_playoutTimer.hasExpired())
|
||||
return;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarSpace > 1U && !m_txDStarData.isEmpty()) {
|
||||
unsigned char buffer[4U];
|
||||
m_txDStarData.peek(buffer, 4U);
|
||||
|
|
@ -1039,6 +1063,7 @@ void CModem::clock(unsigned int ms)
|
|||
m_playoutTimer.start();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_dmrSpace1 > 1U && !m_txDMRData1.isEmpty()) {
|
||||
unsigned char len = 0U;
|
||||
|
|
@ -1254,6 +1279,7 @@ void CModem::close()
|
|||
m_port->close();
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int CModem::readDStarData(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
|
@ -1267,6 +1293,7 @@ unsigned int CModem::readDStarData(unsigned char* data)
|
|||
|
||||
return len;
|
||||
}
|
||||
#endif
|
||||
|
||||
unsigned int CModem::readDMRData1(unsigned char* data)
|
||||
{
|
||||
|
|
@ -1412,6 +1439,7 @@ unsigned int CModem::readSerialData(unsigned char* data)
|
|||
return len;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool CModem::hasDStarSpace() const
|
||||
{
|
||||
unsigned int space = m_txDStarData.freeSpace() / (DSTAR_FRAME_LENGTH_BYTES + 4U);
|
||||
|
|
@ -1452,6 +1480,7 @@ bool CModem::writeDStarData(const unsigned char* data, unsigned int length)
|
|||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CModem::hasDMRSpace1() const
|
||||
{
|
||||
|
|
@ -1781,6 +1810,7 @@ bool CModem::writeTransparentData(const unsigned char* data, unsigned int length
|
|||
return true;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool CModem::writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
|
||||
{
|
||||
assert(m_port != NULL);
|
||||
|
|
@ -1809,6 +1839,7 @@ bool CModem::writeDStarInfo(const char* my1, const char* my2, const char* your,
|
|||
|
||||
return m_port->write(buffer, 33U) != 33;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CModem::writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dest, const char* type)
|
||||
{
|
||||
|
|
@ -2025,10 +2056,12 @@ bool CModem::hasError() const
|
|||
return m_error;
|
||||
}
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool CModem::hasDStar() const
|
||||
{
|
||||
return (m_capabilities1 & CAP1_DSTAR) == CAP1_DSTAR;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CModem::hasDMR() const
|
||||
{
|
||||
|
|
@ -2138,11 +2171,14 @@ bool CModem::readVersion()
|
|||
switch (m_protocolVersion) {
|
||||
case 1U:
|
||||
LogInfo("MMDVM protocol version: 1, description: %.*s", m_length - 4U, m_buffer + 4U);
|
||||
m_capabilities1 = CAP1_DSTAR | CAP1_DMR | CAP1_YSF | CAP1_P25 | CAP1_NXDN | CAP1_M17;
|
||||
#if defined(USE_POCSAG)
|
||||
m_capabilities2 = CAP2_POCSAG;
|
||||
#else
|
||||
m_capabilities1 = 0x00U;
|
||||
m_capabilities2 = 0x00U;
|
||||
#if defined(USE_DSTAR)
|
||||
m_capabilities1 |= CAP1_DSTAR;
|
||||
#endif
|
||||
m_capabilities1 |= CAP1_DMR | CAP1_YSF | CAP1_P25 | CAP1_NXDN | CAP1_M17;
|
||||
#if defined(USE_POCSAG)
|
||||
m_capabilities2 |= CAP2_POCSAG;
|
||||
#endif
|
||||
return true;
|
||||
|
||||
|
|
@ -2166,8 +2202,10 @@ bool CModem::readVersion()
|
|||
m_capabilities2 = m_buffer[5U];
|
||||
char modeText[100U];
|
||||
::strcpy(modeText, "Modes:");
|
||||
#if defined(USE_DSTAR)
|
||||
if (hasDStar())
|
||||
::strcat(modeText, " D-Star");
|
||||
#endif
|
||||
if (hasDMR())
|
||||
::strcat(modeText, " DMR");
|
||||
if (hasYSF())
|
||||
|
|
@ -2266,8 +2304,10 @@ bool CModem::setConfig1()
|
|||
buffer[3U] |= 0x80U;
|
||||
|
||||
buffer[4U] = 0x00U;
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarEnabled)
|
||||
buffer[4U] |= 0x01U;
|
||||
#endif
|
||||
if (m_dmrEnabled)
|
||||
buffer[4U] |= 0x02U;
|
||||
if (m_ysfEnabled)
|
||||
|
|
@ -2297,7 +2337,11 @@ bool CModem::setConfig1()
|
|||
|
||||
buffer[11U] = 128U; // Was OscOffset
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
buffer[12U] = (unsigned char)(m_dstarTXLevel * 2.55F + 0.5F);
|
||||
#else
|
||||
buffer[12U] = 0U;
|
||||
#endif
|
||||
buffer[13U] = (unsigned char)(m_dmrTXLevel * 2.55F + 0.5F);
|
||||
buffer[14U] = (unsigned char)(m_ysfTXLevel * 2.55F + 0.5F);
|
||||
buffer[15U] = (unsigned char)(m_p25TXLevel * 2.55F + 0.5F);
|
||||
|
|
@ -2388,8 +2432,10 @@ bool CModem::setConfig2()
|
|||
buffer[3U] |= 0x80U;
|
||||
|
||||
buffer[4U] = 0x00U;
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_dstarEnabled)
|
||||
buffer[4U] |= 0x01U;
|
||||
#endif
|
||||
if (m_dmrEnabled)
|
||||
buffer[4U] |= 0x02U;
|
||||
if (m_ysfEnabled)
|
||||
|
|
@ -2424,7 +2470,11 @@ bool CModem::setConfig2()
|
|||
buffer[10U] = (unsigned char)(m_rxLevel * 2.55F + 0.5F);
|
||||
|
||||
buffer[11U] = (unsigned char)(m_cwIdTXLevel * 2.55F + 0.5F);
|
||||
#if defined(USE_DSTAR)
|
||||
buffer[12U] = (unsigned char)(m_dstarTXLevel * 2.55F + 0.5F);
|
||||
#else
|
||||
buffer[12U] = 0U;
|
||||
#endif
|
||||
buffer[13U] = (unsigned char)(m_dmrTXLevel * 2.55F + 0.5F);
|
||||
buffer[14U] = (unsigned char)(m_ysfTXLevel * 2.55F + 0.5F);
|
||||
buffer[15U] = (unsigned char)(m_p25TXLevel * 2.55F + 0.5F);
|
||||
|
|
|
|||
20
Modem.h
20
Modem.h
|
|
@ -68,7 +68,9 @@ public:
|
|||
|
||||
bool open();
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool hasDStar() const;
|
||||
#endif
|
||||
bool hasDMR() const;
|
||||
bool hasYSF() const;
|
||||
bool hasP25() const;
|
||||
|
|
@ -85,7 +87,9 @@ public:
|
|||
#endif
|
||||
unsigned int getVersion() const;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int readDStarData(unsigned char* data);
|
||||
#endif
|
||||
unsigned int readDMRData1(unsigned char* data);
|
||||
unsigned int readDMRData2(unsigned char* data);
|
||||
unsigned int readYSFData(unsigned char* data);
|
||||
|
|
@ -99,7 +103,9 @@ public:
|
|||
unsigned int readAX25Data(unsigned char* data);
|
||||
#endif
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool hasDStarSpace() const;
|
||||
#endif
|
||||
bool hasDMRSpace1() const;
|
||||
bool hasDMRSpace2() const;
|
||||
bool hasYSFSpace() const;
|
||||
|
|
@ -123,7 +129,10 @@ public:
|
|||
bool hasError() const;
|
||||
|
||||
bool writeConfig();
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool writeDStarData(const unsigned char* data, unsigned int length);
|
||||
#endif
|
||||
bool writeDMRData1(const unsigned char* data, unsigned int length);
|
||||
bool writeDMRData2(const unsigned char* data, unsigned int length);
|
||||
bool writeYSFData(const unsigned char* data, unsigned int length);
|
||||
|
|
@ -140,7 +149,9 @@ public:
|
|||
bool writeAX25Data(const unsigned char* data, unsigned int length);
|
||||
#endif
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
bool writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector);
|
||||
#endif
|
||||
bool writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type);
|
||||
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);
|
||||
|
|
@ -188,7 +199,9 @@ private:
|
|||
unsigned int m_dmrDelay;
|
||||
float m_rxLevel;
|
||||
float m_cwIdTXLevel;
|
||||
#if defined(USE_DSTAR)
|
||||
float m_dstarTXLevel;
|
||||
#endif
|
||||
float m_dmrTXLevel;
|
||||
float m_ysfTXLevel;
|
||||
float m_p25TXLevel;
|
||||
|
|
@ -212,7 +225,9 @@ private:
|
|||
#if defined(USE_POCSAG)
|
||||
unsigned int m_pocsagFrequency;
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
bool m_dstarEnabled;
|
||||
#endif
|
||||
bool m_dmrEnabled;
|
||||
bool m_ysfEnabled;
|
||||
bool m_p25Enabled;
|
||||
|
|
@ -235,8 +250,11 @@ private:
|
|||
unsigned int m_offset;
|
||||
SERIAL_STATE m_state;
|
||||
unsigned char m_type;
|
||||
|
||||
#if defined(USE_DSTAR)
|
||||
CRingBuffer<unsigned char> m_rxDStarData;
|
||||
CRingBuffer<unsigned char> m_txDStarData;
|
||||
#endif
|
||||
CRingBuffer<unsigned char> m_rxDMRData1;
|
||||
CRingBuffer<unsigned char> m_rxDMRData2;
|
||||
CRingBuffer<unsigned char> m_txDMRData1;
|
||||
|
|
@ -268,7 +286,9 @@ private:
|
|||
CTimer m_statusTimer;
|
||||
CTimer m_inactivityTimer;
|
||||
CTimer m_playoutTimer;
|
||||
#if defined(USE_DSTAR)
|
||||
unsigned int m_dstarSpace;
|
||||
#endif
|
||||
unsigned int m_dmrSpace1;
|
||||
unsigned int m_dmrSpace2;
|
||||
unsigned int m_ysfSpace;
|
||||
|
|
|
|||
|
|
@ -65,8 +65,10 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command)
|
|||
m_command = RCD_MODE_IDLE;
|
||||
else if (m_args.at(1U) == "lockout")
|
||||
m_command = RCD_MODE_LOCKOUT;
|
||||
#if defined(USE_DSTAR)
|
||||
else if (m_args.at(1U) == "d-star")
|
||||
m_command = RCD_MODE_DSTAR;
|
||||
#endif
|
||||
else if (m_args.at(1U) == "dmr")
|
||||
m_command = RCD_MODE_DMR;
|
||||
else if (m_args.at(1U) == "ysf")
|
||||
|
|
@ -80,50 +82,67 @@ REMOTE_COMMAND CRemoteControl::getCommand(const std::string& command)
|
|||
else
|
||||
reply = "KO";
|
||||
} else if (m_args.at(0U) == "enable" && m_args.size() >= ENABLE_ARGS) {
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_args.at(1U) == "dstar")
|
||||
m_command = RCD_ENABLE_DSTAR;
|
||||
else if (m_args.at(1U) == "dmr")
|
||||
else
|
||||
#endif
|
||||
if (m_args.at(1U) == "dmr")
|
||||
m_command = RCD_ENABLE_DMR;
|
||||
else if (m_args.at(1U) == "ysf")
|
||||
else
|
||||
if (m_args.at(1U) == "ysf")
|
||||
m_command = RCD_ENABLE_YSF;
|
||||
else if (m_args.at(1U) == "p25")
|
||||
else
|
||||
if (m_args.at(1U) == "p25")
|
||||
m_command = RCD_ENABLE_P25;
|
||||
else if (m_args.at(1U) == "nxdn")
|
||||
else
|
||||
if (m_args.at(1U) == "nxdn")
|
||||
m_command = RCD_ENABLE_NXDN;
|
||||
else if (m_args.at(1U) == "m17")
|
||||
else
|
||||
if (m_args.at(1U) == "m17")
|
||||
m_command = RCD_ENABLE_M17;
|
||||
#if defined(USE_FM)
|
||||
else if (m_args.at(1U) == "fm")
|
||||
if (m_args.at(1U) == "fm")
|
||||
m_command = RCD_ENABLE_FM;
|
||||
else
|
||||
#endif
|
||||
#if defined(USE_AX25)
|
||||
else if (m_args.at(1U) == "ax25")
|
||||
if (m_args.at(1U) == "ax25")
|
||||
m_command = RCD_ENABLE_AX25;
|
||||
#endif
|
||||
else
|
||||
#endif
|
||||
reply = "KO";
|
||||
} else if (m_args.at(0U) == "disable" && m_args.size() >= DISABLE_ARGS) {
|
||||
#if defined(USE_DSTAR)
|
||||
if (m_args.at(1U) == "dstar")
|
||||
m_command = RCD_DISABLE_DSTAR;
|
||||
else if (m_args.at(1U) == "dmr")
|
||||
else
|
||||
#endif
|
||||
if (m_args.at(1U) == "dmr")
|
||||
m_command = RCD_DISABLE_DMR;
|
||||
else if (m_args.at(1U) == "ysf")
|
||||
else
|
||||
if (m_args.at(1U) == "ysf")
|
||||
m_command = RCD_DISABLE_YSF;
|
||||
else if (m_args.at(1U) == "p25")
|
||||
else
|
||||
if (m_args.at(1U) == "p25")
|
||||
m_command = RCD_DISABLE_P25;
|
||||
else if (m_args.at(1U) == "nxdn")
|
||||
else
|
||||
if (m_args.at(1U) == "nxdn")
|
||||
m_command = RCD_DISABLE_NXDN;
|
||||
else if (m_args.at(1U) == "m17")
|
||||
else
|
||||
if (m_args.at(1U) == "m17")
|
||||
m_command = RCD_DISABLE_M17;
|
||||
else
|
||||
#if defined(USE_FM)
|
||||
else if (m_args.at(1U) == "fm")
|
||||
if (m_args.at(1U) == "fm")
|
||||
m_command = RCD_DISABLE_FM;
|
||||
else
|
||||
#endif
|
||||
#if defined(USE_AX25)
|
||||
else if (m_args.at(1U) == "ax25")
|
||||
if (m_args.at(1U) == "ax25")
|
||||
m_command = RCD_DISABLE_AX25;
|
||||
#endif
|
||||
else
|
||||
#endif
|
||||
reply = "KO";
|
||||
#if defined(USE_POCSAG)
|
||||
} else if (m_args.at(0U) == "page" && m_args.size() >= PAGE_ARGS) {
|
||||
|
|
@ -185,7 +204,9 @@ unsigned int CRemoteControl::getArgCount() const
|
|||
switch (m_command) {
|
||||
case RCD_MODE_IDLE:
|
||||
case RCD_MODE_LOCKOUT:
|
||||
#if defined(USE_DSTAR)
|
||||
case RCD_MODE_DSTAR:
|
||||
#endif
|
||||
case RCD_MODE_DMR:
|
||||
case RCD_MODE_YSF:
|
||||
case RCD_MODE_P25:
|
||||
|
|
@ -211,7 +232,9 @@ std::string CRemoteControl::getArgString(unsigned int n) const
|
|||
switch (m_command) {
|
||||
case RCD_MODE_IDLE:
|
||||
case RCD_MODE_LOCKOUT:
|
||||
#if defined(USE_DSTAR)
|
||||
case RCD_MODE_DSTAR:
|
||||
#endif
|
||||
case RCD_MODE_DMR:
|
||||
case RCD_MODE_YSF:
|
||||
case RCD_MODE_P25:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,9 @@ enum REMOTE_COMMAND {
|
|||
RCD_NONE,
|
||||
RCD_MODE_IDLE,
|
||||
RCD_MODE_LOCKOUT,
|
||||
#if defined(USE_DSTAR)
|
||||
RCD_MODE_DSTAR,
|
||||
#endif
|
||||
RCD_MODE_DMR,
|
||||
RCD_MODE_YSF,
|
||||
RCD_MODE_P25,
|
||||
|
|
@ -41,7 +43,9 @@ enum REMOTE_COMMAND {
|
|||
#if defined(USE_FM)
|
||||
RCD_MODE_FM,
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
RCD_ENABLE_DSTAR,
|
||||
#endif
|
||||
RCD_ENABLE_DMR,
|
||||
RCD_ENABLE_YSF,
|
||||
RCD_ENABLE_P25,
|
||||
|
|
@ -53,7 +57,9 @@ enum REMOTE_COMMAND {
|
|||
#if defined(USE_AX25)
|
||||
RCD_ENABLE_AX25,
|
||||
#endif
|
||||
#if defined(USE_DSTAR)
|
||||
RCD_DISABLE_DSTAR,
|
||||
#endif
|
||||
RCD_DISABLE_DMR,
|
||||
RCD_DISABLE_YSF,
|
||||
RCD_DISABLE_P25,
|
||||
|
|
|
|||
Loading…
Reference in a new issue