Compare commits
5 commits
master
...
dmr_failov
Author | SHA1 | Date | |
---|---|---|---|
954d8d29ff | |||
c03902c04b | |||
e1b5194ac4 | |||
d80653f293 | |||
72bae08c87 |
80
Conf.cpp
80
Conf.cpp
|
@ -126,10 +126,15 @@ m_dstarGatewayPort(0U),
|
||||||
m_dstarLocalPort(0U),
|
m_dstarLocalPort(0U),
|
||||||
m_dstarNetworkDebug(false),
|
m_dstarNetworkDebug(false),
|
||||||
m_dmrNetworkEnabled(false),
|
m_dmrNetworkEnabled(false),
|
||||||
m_dmrNetworkAddress(),
|
m_dmrNetworkFailover(false),
|
||||||
m_dmrNetworkPort(0U),
|
m_dmrNetworkPrimaryAddress(),
|
||||||
m_dmrNetworkLocal(0U),
|
m_dmrNetworkPrimaryPort(0U),
|
||||||
m_dmrNetworkPassword(),
|
m_dmrNetworkPrimaryLocal(0U),
|
||||||
|
m_dmrNetworkPrimaryPassword(),
|
||||||
|
m_dmrNetworkSecondaryAddress(),
|
||||||
|
m_dmrNetworkSecondaryPort(0U),
|
||||||
|
m_dmrNetworkSecondaryLocal(0U),
|
||||||
|
m_dmrNetworkSecondaryPassword(),
|
||||||
m_dmrNetworkOptions(),
|
m_dmrNetworkOptions(),
|
||||||
m_dmrNetworkDebug(false),
|
m_dmrNetworkDebug(false),
|
||||||
m_dmrNetworkJitter(300U),
|
m_dmrNetworkJitter(300U),
|
||||||
|
@ -462,14 +467,24 @@ bool CConf::read()
|
||||||
} else if (section == SECTION_DMR_NETWORK) {
|
} else if (section == SECTION_DMR_NETWORK) {
|
||||||
if (::strcmp(key, "Enable") == 0)
|
if (::strcmp(key, "Enable") == 0)
|
||||||
m_dmrNetworkEnabled = ::atoi(value) == 1;
|
m_dmrNetworkEnabled = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Address") == 0)
|
else if (::strcmp(key, "Failover") == 0)
|
||||||
m_dmrNetworkAddress = value;
|
m_dmrNetworkFailover = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Port") == 0)
|
else if (::strcmp(key, "Address") == 0 || ::strcmp(key, "PrimaryAddress") == 0)
|
||||||
m_dmrNetworkPort = (unsigned int)::atoi(value);
|
m_dmrNetworkPrimaryAddress = value;
|
||||||
else if (::strcmp(key, "Local") == 0)
|
else if (::strcmp(key, "Port") == 0 || ::strcmp(key, "PrimaryPort") == 0)
|
||||||
m_dmrNetworkLocal = (unsigned int)::atoi(value);
|
m_dmrNetworkPrimaryPort = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "Password") == 0)
|
else if (::strcmp(key, "Local") == 0 || ::strcmp(key, "PrimaryLocal") == 0)
|
||||||
m_dmrNetworkPassword = value;
|
m_dmrNetworkPrimaryLocal = (unsigned int)::atoi(value);
|
||||||
|
else if (::strcmp(key, "Password") == 0 || ::strcmp(key, "PrimaryPassword") == 0)
|
||||||
|
m_dmrNetworkPrimaryPassword = value;
|
||||||
|
else if (::strcmp(key, "SecondaryAddress") == 0)
|
||||||
|
m_dmrNetworkSecondaryAddress = value;
|
||||||
|
else if (::strcmp(key, "SecondaryPort") == 0)
|
||||||
|
m_dmrNetworkSecondaryPort = (unsigned int)::atoi(value);
|
||||||
|
else if (::strcmp(key, "SecondaryLocal") == 0)
|
||||||
|
m_dmrNetworkSecondaryLocal = (unsigned int)::atoi(value);
|
||||||
|
else if (::strcmp(key, "SecondaryPassword") == 0)
|
||||||
|
m_dmrNetworkSecondaryPassword = value;
|
||||||
else if (::strcmp(key, "Options") == 0)
|
else if (::strcmp(key, "Options") == 0)
|
||||||
m_dmrNetworkOptions = value;
|
m_dmrNetworkOptions = value;
|
||||||
else if (::strcmp(key, "Debug") == 0)
|
else if (::strcmp(key, "Debug") == 0)
|
||||||
|
@ -935,24 +950,49 @@ bool CConf::getDMRNetworkEnabled() const
|
||||||
return m_dmrNetworkEnabled;
|
return m_dmrNetworkEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CConf::getDMRNetworkAddress() const
|
bool CConf::getDMRNetworkFailover() const
|
||||||
{
|
{
|
||||||
return m_dmrNetworkAddress;
|
return m_dmrNetworkFailover;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int CConf::getDMRNetworkPort() const
|
std::string CConf::getDMRNetworkPrimaryAddress() const
|
||||||
{
|
{
|
||||||
return m_dmrNetworkPort;
|
return m_dmrNetworkPrimaryAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int CConf::getDMRNetworkLocal() const
|
unsigned int CConf::getDMRNetworkPrimaryPort() const
|
||||||
{
|
{
|
||||||
return m_dmrNetworkLocal;
|
return m_dmrNetworkPrimaryPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CConf::getDMRNetworkPassword() const
|
unsigned int CConf::getDMRNetworkPrimaryLocal() const
|
||||||
{
|
{
|
||||||
return m_dmrNetworkPassword;
|
return m_dmrNetworkPrimaryLocal;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CConf::getDMRNetworkPrimaryPassword() const
|
||||||
|
{
|
||||||
|
return m_dmrNetworkPrimaryPassword;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CConf::getDMRNetworkSecondaryAddress() const
|
||||||
|
{
|
||||||
|
return m_dmrNetworkSecondaryAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int CConf::getDMRNetworkSecondaryPort() const
|
||||||
|
{
|
||||||
|
return m_dmrNetworkSecondaryPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int CConf::getDMRNetworkSecondaryLocal() const
|
||||||
|
{
|
||||||
|
return m_dmrNetworkSecondaryLocal;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CConf::getDMRNetworkSecondaryPassword() const
|
||||||
|
{
|
||||||
|
return m_dmrNetworkSecondaryPassword;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CConf::getDMRNetworkOptions() const
|
std::string CConf::getDMRNetworkOptions() const
|
||||||
|
|
26
Conf.h
26
Conf.h
|
@ -127,10 +127,15 @@ public:
|
||||||
|
|
||||||
// The DMR Network section
|
// The DMR Network section
|
||||||
bool getDMRNetworkEnabled() const;
|
bool getDMRNetworkEnabled() const;
|
||||||
std::string getDMRNetworkAddress() const;
|
bool getDMRNetworkFailover() const;
|
||||||
unsigned int getDMRNetworkPort() const;
|
std::string getDMRNetworkPrimaryAddress() const;
|
||||||
unsigned int getDMRNetworkLocal() const;
|
unsigned int getDMRNetworkPrimaryPort() const;
|
||||||
std::string getDMRNetworkPassword() const;
|
unsigned int getDMRNetworkPrimaryLocal() const;
|
||||||
|
std::string getDMRNetworkPrimaryPassword() const;
|
||||||
|
std::string getDMRNetworkSecondaryAddress() const;
|
||||||
|
unsigned int getDMRNetworkSecondaryPort() const;
|
||||||
|
unsigned int getDMRNetworkSecondaryLocal() const;
|
||||||
|
std::string getDMRNetworkSecondaryPassword() const;
|
||||||
std::string getDMRNetworkOptions() const;
|
std::string getDMRNetworkOptions() const;
|
||||||
bool getDMRNetworkDebug() const;
|
bool getDMRNetworkDebug() const;
|
||||||
unsigned int getDMRNetworkJitter() const;
|
unsigned int getDMRNetworkJitter() const;
|
||||||
|
@ -275,10 +280,15 @@ private:
|
||||||
bool m_dstarNetworkDebug;
|
bool m_dstarNetworkDebug;
|
||||||
|
|
||||||
bool m_dmrNetworkEnabled;
|
bool m_dmrNetworkEnabled;
|
||||||
std::string m_dmrNetworkAddress;
|
bool m_dmrNetworkFailover;
|
||||||
unsigned int m_dmrNetworkPort;
|
std::string m_dmrNetworkPrimaryAddress;
|
||||||
unsigned int m_dmrNetworkLocal;
|
unsigned int m_dmrNetworkPrimaryPort;
|
||||||
std::string m_dmrNetworkPassword;
|
unsigned int m_dmrNetworkPrimaryLocal;
|
||||||
|
std::string m_dmrNetworkPrimaryPassword;
|
||||||
|
std::string m_dmrNetworkSecondaryAddress;
|
||||||
|
unsigned int m_dmrNetworkSecondaryPort;
|
||||||
|
unsigned int m_dmrNetworkSecondaryLocal;
|
||||||
|
std::string m_dmrNetworkSecondaryPassword;
|
||||||
std::string m_dmrNetworkOptions;
|
std::string m_dmrNetworkOptions;
|
||||||
bool m_dmrNetworkDebug;
|
bool m_dmrNetworkDebug;
|
||||||
unsigned int m_dmrNetworkJitter;
|
unsigned int m_dmrNetworkJitter;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter) :
|
CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter) :
|
||||||
m_id(id),
|
m_id(id),
|
||||||
m_colorCode(colorCode),
|
m_colorCode(colorCode),
|
||||||
m_modem(modem),
|
m_modem(modem),
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
class CDMRControl {
|
class CDMRControl {
|
||||||
public:
|
public:
|
||||||
CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter);
|
CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter);
|
||||||
~CDMRControl();
|
~CDMRControl();
|
||||||
|
|
||||||
bool processWakeup(const unsigned char* data);
|
bool processWakeup(const unsigned char* data);
|
||||||
|
@ -48,7 +48,7 @@ private:
|
||||||
unsigned int m_id;
|
unsigned int m_id;
|
||||||
unsigned int m_colorCode;
|
unsigned int m_colorCode;
|
||||||
CModem* m_modem;
|
CModem* m_modem;
|
||||||
CDMRNetwork* m_network;
|
IDMRNetwork* m_network;
|
||||||
CDMRSlot m_slot1;
|
CDMRSlot m_slot1;
|
||||||
CDMRSlot m_slot2;
|
CDMRSlot m_slot2;
|
||||||
CDMRLookup* m_lookup;
|
CDMRLookup* m_lookup;
|
||||||
|
|
|
@ -30,6 +30,9 @@ const unsigned int BUFFER_LENGTH = 500U;
|
||||||
|
|
||||||
const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U;
|
const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U;
|
||||||
|
|
||||||
|
IDMRNetwork::~IDMRNetwork()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
CDMRNetwork::CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, HW_TYPE hwType) :
|
CDMRNetwork::CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, HW_TYPE hwType) :
|
||||||
m_address(),
|
m_address(),
|
||||||
|
@ -570,3 +573,8 @@ bool CDMRNetwork::write(const unsigned char* data, unsigned int length)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CDMRNetwork::isRunning() const
|
||||||
|
{
|
||||||
|
return m_status == RUNNING;
|
||||||
|
}
|
||||||
|
|
50
DMRNetwork.h
50
DMRNetwork.h
|
@ -28,29 +28,55 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
class CDMRNetwork
|
class IDMRNetwork {
|
||||||
{
|
public:
|
||||||
|
virtual ~IDMRNetwork() = 0;
|
||||||
|
|
||||||
|
virtual void setOptions(const std::string& options) = 0;
|
||||||
|
|
||||||
|
virtual void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url) = 0;
|
||||||
|
|
||||||
|
virtual bool open() = 0;
|
||||||
|
|
||||||
|
virtual void enable(bool enabled) = 0;
|
||||||
|
|
||||||
|
virtual bool read(CDMRData& data) = 0;
|
||||||
|
|
||||||
|
virtual bool write(const CDMRData& data) = 0;
|
||||||
|
|
||||||
|
virtual bool wantsBeacon() = 0;
|
||||||
|
|
||||||
|
virtual void clock(unsigned int ms) = 0;
|
||||||
|
|
||||||
|
virtual void close() = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
class CDMRNetwork : public IDMRNetwork {
|
||||||
public:
|
public:
|
||||||
CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, HW_TYPE hwType);
|
CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, HW_TYPE hwType);
|
||||||
~CDMRNetwork();
|
virtual ~CDMRNetwork();
|
||||||
|
|
||||||
void setOptions(const std::string& options);
|
virtual void setOptions(const std::string& options);
|
||||||
|
|
||||||
void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url);
|
virtual void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url);
|
||||||
|
|
||||||
bool open();
|
virtual bool open();
|
||||||
|
|
||||||
void enable(bool enabled);
|
virtual void enable(bool enabled);
|
||||||
|
|
||||||
bool read(CDMRData& data);
|
virtual bool read(CDMRData& data);
|
||||||
|
|
||||||
bool write(const CDMRData& data);
|
virtual bool write(const CDMRData& data);
|
||||||
|
|
||||||
bool wantsBeacon();
|
virtual bool wantsBeacon();
|
||||||
|
|
||||||
void clock(unsigned int ms);
|
virtual bool isRunning() const;
|
||||||
|
|
||||||
void close();
|
virtual void clock(unsigned int ms);
|
||||||
|
|
||||||
|
virtual void close();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
in_addr m_address;
|
in_addr m_address;
|
||||||
|
|
174
DMRNetworkManager.cpp
Normal file
174
DMRNetworkManager.cpp
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 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
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "DMRNetworkManager.h"
|
||||||
|
|
||||||
|
#include "Log.h"
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
CDMRNetworkManager::CDMRNetworkManager(CDMRNetwork* primary, CDMRNetwork* secondary) :
|
||||||
|
m_primary(primary),
|
||||||
|
m_secondary(secondary),
|
||||||
|
m_state(DMRNS_NONE),
|
||||||
|
m_poll(1000U, 300U)
|
||||||
|
{
|
||||||
|
assert(primary != NULL);
|
||||||
|
assert(secondary != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
CDMRNetworkManager::~CDMRNetworkManager()
|
||||||
|
{
|
||||||
|
delete m_primary;
|
||||||
|
delete m_secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDMRNetworkManager::setOptions(const std::string& options)
|
||||||
|
{
|
||||||
|
m_primary->setOptions(options);
|
||||||
|
m_secondary->setOptions(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDMRNetworkManager::setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url)
|
||||||
|
{
|
||||||
|
m_primary->setConfig(callsign, rxFrequency, txFrequency, power, colorCode, latitude, longitude, height, location, description, url);
|
||||||
|
m_secondary->setConfig(callsign, rxFrequency, txFrequency, power, colorCode, latitude, longitude, height, location, description, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CDMRNetworkManager::open()
|
||||||
|
{
|
||||||
|
LogMessage("DMR, Using Primary DMR Network");
|
||||||
|
|
||||||
|
bool ret = m_primary->open();
|
||||||
|
if (!ret)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_state = DMRNS_PRIMARY_RUNNING;
|
||||||
|
|
||||||
|
m_poll.start();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDMRNetworkManager::enable(bool enabled)
|
||||||
|
{
|
||||||
|
m_primary->enable(enabled);
|
||||||
|
m_secondary->enable(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CDMRNetworkManager::read(CDMRData& data)
|
||||||
|
{
|
||||||
|
switch (m_state) {
|
||||||
|
case DMRNS_PRIMARY_RUNNING: {
|
||||||
|
m_secondary->read(data);
|
||||||
|
bool ret = m_primary->read(data);
|
||||||
|
if (ret)
|
||||||
|
m_poll.start();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
case DMRNS_SECONDARY_RUNNING: {
|
||||||
|
m_primary->read(data);
|
||||||
|
bool ret = m_secondary->read(data);
|
||||||
|
if (ret)
|
||||||
|
m_poll.start();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CDMRNetworkManager::write(const CDMRData& data)
|
||||||
|
{
|
||||||
|
switch (m_state) {
|
||||||
|
case DMRNS_PRIMARY_RUNNING:
|
||||||
|
return m_primary->write(data);
|
||||||
|
|
||||||
|
case DMRNS_SECONDARY_RUNNING:
|
||||||
|
return m_secondary->write(data);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDMRNetworkManager::close()
|
||||||
|
{
|
||||||
|
switch (m_state) {
|
||||||
|
case DMRNS_PRIMARY_RUNNING:
|
||||||
|
m_primary->close();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DMRNS_SECONDARY_RUNNING:
|
||||||
|
m_secondary->close();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDMRNetworkManager::clock(unsigned int ms)
|
||||||
|
{
|
||||||
|
m_poll.clock(ms);
|
||||||
|
if (m_poll.isRunning() && m_poll.hasExpired()) {
|
||||||
|
switch (m_state) {
|
||||||
|
case DMRNS_PRIMARY_RUNNING: {
|
||||||
|
bool ret = m_primary->isRunning();
|
||||||
|
if (!ret) {
|
||||||
|
LogMessage("DMR, Using Secondary DMR Network");
|
||||||
|
m_secondary->open();
|
||||||
|
m_state = DMRNS_SECONDARY_RUNNING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DMRNS_SECONDARY_RUNNING: {
|
||||||
|
bool ret = m_primary->isRunning();
|
||||||
|
if (ret) {
|
||||||
|
LogMessage("DMR, Using Primary DMR Network");
|
||||||
|
m_secondary->close();
|
||||||
|
m_state = DMRNS_PRIMARY_RUNNING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_poll.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CDMRNetworkManager::wantsBeacon()
|
||||||
|
{
|
||||||
|
switch (m_state) {
|
||||||
|
case DMRNS_PRIMARY_RUNNING:
|
||||||
|
return m_primary->wantsBeacon();
|
||||||
|
|
||||||
|
case DMRNS_SECONDARY_RUNNING:
|
||||||
|
return m_secondary->wantsBeacon();
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
66
DMRNetworkManager.h
Normal file
66
DMRNetworkManager.h
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 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
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(DMRNetworkManager_H)
|
||||||
|
#define DMRNetworkManager_H
|
||||||
|
|
||||||
|
#include "DMRNetwork.h"
|
||||||
|
#include "Timer.h"
|
||||||
|
#include "DMRData.h"
|
||||||
|
#include "Defines.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
enum DMR_NETWORK_STATE {
|
||||||
|
DMRNS_NONE,
|
||||||
|
DMRNS_PRIMARY_RUNNING,
|
||||||
|
DMRNS_SECONDARY_RUNNING
|
||||||
|
};
|
||||||
|
|
||||||
|
class CDMRNetworkManager : public IDMRNetwork {
|
||||||
|
public:
|
||||||
|
CDMRNetworkManager(CDMRNetwork* primary, CDMRNetwork* secondary);
|
||||||
|
virtual ~CDMRNetworkManager();
|
||||||
|
|
||||||
|
virtual void setOptions(const std::string& options);
|
||||||
|
|
||||||
|
virtual void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url);
|
||||||
|
|
||||||
|
virtual bool open();
|
||||||
|
|
||||||
|
virtual void enable(bool enabled);
|
||||||
|
|
||||||
|
virtual bool read(CDMRData& data);
|
||||||
|
|
||||||
|
virtual bool write(const CDMRData& data);
|
||||||
|
|
||||||
|
virtual bool wantsBeacon();
|
||||||
|
|
||||||
|
virtual void clock(unsigned int ms);
|
||||||
|
|
||||||
|
virtual void close();
|
||||||
|
|
||||||
|
private:
|
||||||
|
CDMRNetwork* m_primary;
|
||||||
|
CDMRNetwork* m_secondary;
|
||||||
|
DMR_NETWORK_STATE m_state;
|
||||||
|
CTimer m_poll;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -35,7 +35,7 @@ bool CDMRSlot::m_embeddedLCOnly = false;
|
||||||
bool CDMRSlot::m_dumpTAData = true;
|
bool CDMRSlot::m_dumpTAData = true;
|
||||||
|
|
||||||
CModem* CDMRSlot::m_modem = NULL;
|
CModem* CDMRSlot::m_modem = NULL;
|
||||||
CDMRNetwork* CDMRSlot::m_network = NULL;
|
IDMRNetwork* CDMRSlot::m_network = NULL;
|
||||||
CDisplay* CDMRSlot::m_display = NULL;
|
CDisplay* CDMRSlot::m_display = NULL;
|
||||||
bool CDMRSlot::m_duplex = true;
|
bool CDMRSlot::m_duplex = true;
|
||||||
CDMRLookup* CDMRSlot::m_lookup = NULL;
|
CDMRLookup* CDMRSlot::m_lookup = NULL;
|
||||||
|
@ -1683,7 +1683,7 @@ void CDMRSlot::writeQueueNet(const unsigned char *data)
|
||||||
m_queue.addData(data, len);
|
m_queue.addData(data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter)
|
void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter)
|
||||||
{
|
{
|
||||||
assert(modem != NULL);
|
assert(modem != NULL);
|
||||||
assert(display != NULL);
|
assert(display != NULL);
|
||||||
|
|
|
@ -50,7 +50,7 @@ public:
|
||||||
|
|
||||||
void clock();
|
void clock();
|
||||||
|
|
||||||
static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter);
|
static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int m_slotNo;
|
unsigned int m_slotNo;
|
||||||
|
@ -106,7 +106,7 @@ private:
|
||||||
static bool m_dumpTAData;
|
static bool m_dumpTAData;
|
||||||
|
|
||||||
static CModem* m_modem;
|
static CModem* m_modem;
|
||||||
static CDMRNetwork* m_network;
|
static IDMRNetwork* m_network;
|
||||||
static CDisplay* m_display;
|
static CDisplay* m_display;
|
||||||
static bool m_duplex;
|
static bool m_duplex;
|
||||||
static CDMRLookup* m_lookup;
|
static CDMRLookup* m_lookup;
|
||||||
|
|
13
MMDVM.ini
13
MMDVM.ini
|
@ -98,11 +98,16 @@ Debug=0
|
||||||
|
|
||||||
[DMR Network]
|
[DMR Network]
|
||||||
Enable=1
|
Enable=1
|
||||||
Address=44.131.4.1
|
Failover=0
|
||||||
Port=62031
|
PrimaryAddress=44.131.4.1
|
||||||
|
PrimaryPort=62031
|
||||||
|
# PrimaryLocal=3350
|
||||||
|
PrimaryPassword=PASSWORD
|
||||||
|
# SecondaryAddress=44.131.4.1
|
||||||
|
# SecondaryPort=62031
|
||||||
|
# SecondaryLocal=3350
|
||||||
|
# SecondaryPassword=PASSWORD
|
||||||
Jitter=300
|
Jitter=300
|
||||||
# Local=3350
|
|
||||||
Password=PASSWORD
|
|
||||||
# Options=
|
# Options=
|
||||||
Slot1=1
|
Slot1=1
|
||||||
Slot2=1
|
Slot2=1
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#include "RSSIInterpolator.h"
|
#include "RSSIInterpolator.h"
|
||||||
#include "SerialController.h"
|
#include "SerialController.h"
|
||||||
#include "ModemSerialPort.h"
|
#include "ModemSerialPort.h"
|
||||||
|
#include "DMRNetworkManager.h"
|
||||||
|
#include "DMRNetwork.h"
|
||||||
#include "Version.h"
|
#include "Version.h"
|
||||||
#include "StopWatch.h"
|
#include "StopWatch.h"
|
||||||
#include "Defines.h"
|
#include "Defines.h"
|
||||||
|
@ -873,29 +875,61 @@ bool CMMDVMHost::createDStarNetwork()
|
||||||
|
|
||||||
bool CMMDVMHost::createDMRNetwork()
|
bool CMMDVMHost::createDMRNetwork()
|
||||||
{
|
{
|
||||||
std::string address = m_conf.getDMRNetworkAddress();
|
std::string primaryAddress = m_conf.getDMRNetworkPrimaryAddress();
|
||||||
unsigned int port = m_conf.getDMRNetworkPort();
|
bool failover = m_conf.getDMRNetworkFailover();
|
||||||
unsigned int local = m_conf.getDMRNetworkLocal();
|
unsigned int primaryPort = m_conf.getDMRNetworkPrimaryPort();
|
||||||
unsigned int id = m_conf.getDMRId();
|
unsigned int primaryLocal = m_conf.getDMRNetworkPrimaryLocal();
|
||||||
std::string password = m_conf.getDMRNetworkPassword();
|
std::string primaryPassword = m_conf.getDMRNetworkPrimaryPassword();
|
||||||
bool debug = m_conf.getDMRNetworkDebug();
|
std::string secondaryAddress = m_conf.getDMRNetworkSecondaryAddress();
|
||||||
unsigned int jitter = m_conf.getDMRNetworkJitter();
|
unsigned int secondaryPort = m_conf.getDMRNetworkSecondaryPort();
|
||||||
bool slot1 = m_conf.getDMRNetworkSlot1();
|
unsigned int secondaryLocal = m_conf.getDMRNetworkSecondaryLocal();
|
||||||
bool slot2 = m_conf.getDMRNetworkSlot2();
|
std::string secondaryPassword = m_conf.getDMRNetworkSecondaryPassword();
|
||||||
HW_TYPE hwType = m_modem->getHWType();
|
unsigned int id = m_conf.getDMRId();
|
||||||
|
bool debug = m_conf.getDMRNetworkDebug();
|
||||||
|
unsigned int jitter = m_conf.getDMRNetworkJitter();
|
||||||
|
bool slot1 = m_conf.getDMRNetworkSlot1();
|
||||||
|
bool slot2 = m_conf.getDMRNetworkSlot2();
|
||||||
|
HW_TYPE hwType = m_modem->getHWType();
|
||||||
|
|
||||||
LogInfo("DMR Network Parameters");
|
LogInfo("DMR Network Parameters");
|
||||||
LogInfo(" Address: %s", address.c_str());
|
if (failover) {
|
||||||
LogInfo(" Port: %u", port);
|
LogInfo(" Failover: yes");
|
||||||
if (local > 0U)
|
|
||||||
LogInfo(" Local: %u", local);
|
LogInfo(" Primary Address: %s", primaryAddress.c_str());
|
||||||
else
|
LogInfo(" Primary Port: %u", primaryPort);
|
||||||
LogInfo(" Local: random");
|
if (primaryLocal > 0U)
|
||||||
|
LogInfo(" Primary Local: %u", primaryLocal);
|
||||||
|
else
|
||||||
|
LogInfo(" Primary Local: random");
|
||||||
|
|
||||||
|
LogInfo(" Secondary Address: %s", secondaryAddress.c_str());
|
||||||
|
LogInfo(" Secondary Port: %u", secondaryPort);
|
||||||
|
if (secondaryLocal > 0U)
|
||||||
|
LogInfo(" Secondary Local: %u", secondaryLocal);
|
||||||
|
else
|
||||||
|
LogInfo(" Secondary Local: random");
|
||||||
|
} else {
|
||||||
|
LogInfo(" Failover: no");
|
||||||
|
LogInfo(" Address: %s", primaryAddress.c_str());
|
||||||
|
LogInfo(" Port: %u", primaryPort);
|
||||||
|
if (primaryLocal > 0U)
|
||||||
|
LogInfo(" Local: %u", primaryLocal);
|
||||||
|
else
|
||||||
|
LogInfo(" Local: random");
|
||||||
|
}
|
||||||
|
|
||||||
LogInfo(" Jitter: %ums", jitter);
|
LogInfo(" Jitter: %ums", jitter);
|
||||||
LogInfo(" Slot 1: %s", slot1 ? "enabled" : "disabled");
|
LogInfo(" Slot 1: %s", slot1 ? "enabled" : "disabled");
|
||||||
LogInfo(" Slot 2: %s", slot2 ? "enabled" : "disabled");
|
LogInfo(" Slot 2: %s", slot2 ? "enabled" : "disabled");
|
||||||
|
|
||||||
m_dmrNetwork = new CDMRNetwork(address, port, local, id, password, m_duplex, VERSION, debug, slot1, slot2, hwType);
|
if (failover) {
|
||||||
|
CDMRNetwork* primary = new CDMRNetwork(primaryAddress, primaryPort, primaryLocal, id, primaryPassword, m_duplex, VERSION, debug, slot1, slot2, hwType);
|
||||||
|
CDMRNetwork* secondary = new CDMRNetwork(secondaryAddress, secondaryPort, secondaryLocal, id, secondaryPassword, m_duplex, VERSION, debug, slot1, slot2, hwType);
|
||||||
|
|
||||||
|
m_dmrNetwork = new CDMRNetworkManager(primary, secondary);
|
||||||
|
} else {
|
||||||
|
m_dmrNetwork = new CDMRNetwork(primaryAddress, primaryPort, primaryLocal, id, primaryPassword, m_duplex, VERSION, debug, slot1, slot2, hwType);
|
||||||
|
}
|
||||||
|
|
||||||
std::string options = m_conf.getDMRNetworkOptions();
|
std::string options = m_conf.getDMRNetworkOptions();
|
||||||
if (!options.empty()) {
|
if (!options.empty()) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ private:
|
||||||
CConf m_conf;
|
CConf m_conf;
|
||||||
CModem* m_modem;
|
CModem* m_modem;
|
||||||
CDStarNetwork* m_dstarNetwork;
|
CDStarNetwork* m_dstarNetwork;
|
||||||
CDMRNetwork* m_dmrNetwork;
|
IDMRNetwork* m_dmrNetwork;
|
||||||
CYSFNetwork* m_ysfNetwork;
|
CYSFNetwork* m_ysfNetwork;
|
||||||
CP25Network* m_p25Network;
|
CP25Network* m_p25Network;
|
||||||
CDisplay* m_display;
|
CDisplay* m_display;
|
||||||
|
|
|
@ -170,6 +170,7 @@
|
||||||
<ClInclude Include="DMRFullLC.h" />
|
<ClInclude Include="DMRFullLC.h" />
|
||||||
<ClInclude Include="DMRLC.h" />
|
<ClInclude Include="DMRLC.h" />
|
||||||
<ClInclude Include="DMRNetwork.h" />
|
<ClInclude Include="DMRNetwork.h" />
|
||||||
|
<ClInclude Include="DMRNetworkManager.h" />
|
||||||
<ClInclude Include="DMRShortLC.h" />
|
<ClInclude Include="DMRShortLC.h" />
|
||||||
<ClInclude Include="DMRSlot.h" />
|
<ClInclude Include="DMRSlot.h" />
|
||||||
<ClInclude Include="DMRSlotType.h" />
|
<ClInclude Include="DMRSlotType.h" />
|
||||||
|
@ -241,6 +242,7 @@
|
||||||
<ClCompile Include="DMRLC.cpp" />
|
<ClCompile Include="DMRLC.cpp" />
|
||||||
<ClCompile Include="DMRLookup.cpp" />
|
<ClCompile Include="DMRLookup.cpp" />
|
||||||
<ClCompile Include="DMRNetwork.cpp" />
|
<ClCompile Include="DMRNetwork.cpp" />
|
||||||
|
<ClCompile Include="DMRNetworkManager.cpp" />
|
||||||
<ClCompile Include="DMRShortLC.cpp" />
|
<ClCompile Include="DMRShortLC.cpp" />
|
||||||
<ClCompile Include="DMRSlot.cpp" />
|
<ClCompile Include="DMRSlot.cpp" />
|
||||||
<ClCompile Include="DMRSlotType.cpp" />
|
<ClCompile Include="DMRSlotType.cpp" />
|
||||||
|
|
|
@ -221,6 +221,9 @@
|
||||||
<ClInclude Include="RSSIInterpolator.h">
|
<ClInclude Include="RSSIInterpolator.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="DMRNetworkManager.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="BPTC19696.cpp">
|
<ClCompile Include="BPTC19696.cpp">
|
||||||
|
@ -412,5 +415,8 @@
|
||||||
<ClCompile Include="RSSIInterpolator.cpp">
|
<ClCompile Include="RSSIInterpolator.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="DMRNetworkManager.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
8
Makefile
8
Makefile
|
@ -8,10 +8,10 @@ LDFLAGS = -g
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o \
|
||||||
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay2087.o Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o \
|
||||||
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o \
|
||||||
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay2087.o Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o \
|
||||||
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o \
|
||||||
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \
|
Golay2087.o Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o \
|
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o \
|
||||||
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o \
|
||||||
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay2087.o Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o \
|
||||||
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o \
|
||||||
Golay24128.o Hamming.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay2087.o Golay24128.o Hamming.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o \
|
||||||
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o \
|
||||||
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay2087.o Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o \
|
||||||
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ LDFLAGS = -g
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o \
|
||||||
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay2087.o Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o \
|
||||||
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
all: MMDVMHost
|
all: MMDVMHost
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue