Add basic DMR network failover.

This commit is contained in:
Jonathan Naylor 2017-04-10 18:07:42 +01:00
parent 72bae08c87
commit d80653f293
17 changed files with 423 additions and 79 deletions

View file

@ -125,10 +125,15 @@ m_dstarGatewayPort(0U),
m_dstarLocalPort(0U),
m_dstarNetworkDebug(false),
m_dmrNetworkEnabled(false),
m_dmrNetworkAddress(),
m_dmrNetworkPort(0U),
m_dmrNetworkLocal(0U),
m_dmrNetworkPassword(),
m_dmrNetworkFailover(false),
m_dmrNetworkPrimaryAddress(),
m_dmrNetworkPrimaryPort(0U),
m_dmrNetworkPrimaryLocal(0U),
m_dmrNetworkPrimaryPassword(),
m_dmrNetworkSecondaryAddress(),
m_dmrNetworkSecondaryPort(0U),
m_dmrNetworkSecondaryLocal(0U),
m_dmrNetworkSecondaryPassword(),
m_dmrNetworkOptions(),
m_dmrNetworkDebug(false),
m_dmrNetworkJitter(300U),
@ -460,15 +465,25 @@ bool CConf::read()
} else if (section == SECTION_DMR_NETWORK) {
if (::strcmp(key, "Enable") == 0)
m_dmrNetworkEnabled = ::atoi(value) == 1;
else if (::strcmp(key, "Address") == 0)
m_dmrNetworkAddress = value;
else if (::strcmp(key, "Port") == 0)
m_dmrNetworkPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "Local") == 0)
m_dmrNetworkLocal = (unsigned int)::atoi(value);
else if (::strcmp(key, "Password") == 0)
m_dmrNetworkPassword = value;
else if (::strcmp(key, "Options") == 0)
else if (::strcmp(key, "Failover") == 0)
m_dmrNetworkFailover = ::atoi(value) == 1;
else if (::strcmp(key, "Address") == 0 || ::strcmp(key, "PrimaryAddress") == 0)
m_dmrNetworkPrimaryAddress = value;
else if (::strcmp(key, "Port") == 0 || ::strcmp(key, "PrimaryPort") == 0)
m_dmrNetworkPrimaryPort = (unsigned int)::atoi(value);
else if (::strcmp(key, "Local") == 0 || ::strcmp(key, "PrimaryLocal") == 0)
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)
m_dmrNetworkOptions = value;
else if (::strcmp(key, "Debug") == 0)
m_dmrNetworkDebug = ::atoi(value) == 1;
@ -928,24 +943,49 @@ bool CConf::getDMRNetworkEnabled() const
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

26
Conf.h
View file

@ -126,10 +126,15 @@ public:
// The DMR Network section
bool getDMRNetworkEnabled() const;
std::string getDMRNetworkAddress() const;
unsigned int getDMRNetworkPort() const;
unsigned int getDMRNetworkLocal() const;
std::string getDMRNetworkPassword() const;
bool getDMRNetworkFailover() const;
std::string getDMRNetworkPrimaryAddress() const;
unsigned int getDMRNetworkPrimaryPort() 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;
bool getDMRNetworkDebug() const;
unsigned int getDMRNetworkJitter() const;
@ -273,10 +278,15 @@ private:
bool m_dstarNetworkDebug;
bool m_dmrNetworkEnabled;
std::string m_dmrNetworkAddress;
unsigned int m_dmrNetworkPort;
unsigned int m_dmrNetworkLocal;
std::string m_dmrNetworkPassword;
bool m_dmrNetworkFailover;
std::string m_dmrNetworkPrimaryAddress;
unsigned int m_dmrNetworkPrimaryPort;
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;
bool m_dmrNetworkDebug;
unsigned int m_dmrNetworkJitter;

View file

@ -573,3 +573,8 @@ bool CDMRNetwork::write(const unsigned char* data, unsigned int length)
return true;
}
bool CDMRNetwork::isRunning() const
{
return m_status == RUNNING;
}

View file

@ -72,6 +72,8 @@ public:
virtual bool wantsBeacon();
virtual bool isRunning() const;
virtual void clock(unsigned int ms);
virtual void close();

174
DMRNetworkManager.cpp Normal file
View 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
View 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

View file

@ -97,11 +97,16 @@ Debug=0
[DMR Network]
Enable=1
Address=44.131.4.1
Port=62031
Failover=0
PrimaryAddress=44.131.4.1
PrimaryPort=62031
# PrimaryLocal=3350
PrimaryPassword=PASSWORD
# SecondaryAddress=44.131.4.1
# SecondaryPort=62031
# SecondaryLocal=3350
# SecondaryPassword=PASSWORD
Jitter=300
# Local=3350
Password=PASSWORD
# Options=
Slot1=1
Slot2=1

View file

@ -20,6 +20,8 @@
#include "RSSIInterpolator.h"
#include "SerialController.h"
#include "ModemSerialPort.h"
#include "DMRNetworkManager.h"
#include "DMRNetwork.h"
#include "Version.h"
#include "StopWatch.h"
#include "Defines.h"
@ -872,29 +874,61 @@ bool CMMDVMHost::createDStarNetwork()
bool CMMDVMHost::createDMRNetwork()
{
std::string address = m_conf.getDMRNetworkAddress();
unsigned int port = m_conf.getDMRNetworkPort();
unsigned int local = m_conf.getDMRNetworkLocal();
unsigned int id = m_conf.getDMRId();
std::string password = m_conf.getDMRNetworkPassword();
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();
std::string primaryAddress = m_conf.getDMRNetworkPrimaryAddress();
bool failover = m_conf.getDMRNetworkFailover();
unsigned int primaryPort = m_conf.getDMRNetworkPrimaryPort();
unsigned int primaryLocal = m_conf.getDMRNetworkPrimaryLocal();
std::string primaryPassword = m_conf.getDMRNetworkPrimaryPassword();
std::string secondaryAddress = m_conf.getDMRNetworkSecondaryAddress();
unsigned int secondaryPort = m_conf.getDMRNetworkSecondaryPort();
unsigned int secondaryLocal = m_conf.getDMRNetworkSecondaryLocal();
std::string secondaryPassword = m_conf.getDMRNetworkSecondaryPassword();
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(" Address: %s", address.c_str());
LogInfo(" Port: %u", port);
if (local > 0U)
LogInfo(" Local: %u", local);
else
LogInfo(" Local: random");
LogInfo(" Jitter: %ums", jitter);
if (failover) {
LogInfo(" Failover: yes");
LogInfo(" Primary Address: %s", primaryAddress.c_str());
LogInfo(" Primary Port: %u", primaryPort);
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(" Slot 1: %s", slot1 ? "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();
if (!options.empty()) {

View file

@ -170,6 +170,7 @@
<ClInclude Include="DMRFullLC.h" />
<ClInclude Include="DMRLC.h" />
<ClInclude Include="DMRNetwork.h" />
<ClInclude Include="DMRNetworkManager.h" />
<ClInclude Include="DMRShortLC.h" />
<ClInclude Include="DMRSlot.h" />
<ClInclude Include="DMRSlotType.h" />
@ -241,6 +242,7 @@
<ClCompile Include="DMRLC.cpp" />
<ClCompile Include="DMRLookup.cpp" />
<ClCompile Include="DMRNetwork.cpp" />
<ClCompile Include="DMRNetworkManager.cpp" />
<ClCompile Include="DMRShortLC.cpp" />
<ClCompile Include="DMRSlot.cpp" />
<ClCompile Include="DMRSlotType.cpp" />

View file

@ -221,6 +221,9 @@
<ClInclude Include="RSSIInterpolator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DMRNetworkManager.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="BPTC19696.cpp">
@ -412,5 +415,8 @@
<ClCompile Include="RSSIInterpolator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DMRNetworkManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View file

@ -8,10 +8,10 @@ LDFLAGS = -g
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 \
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 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 TFTSerial.o Thread.o \
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 \
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 \
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
all: MMDVMHost

View file

@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
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 \
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 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 TFTSerial.o Thread.o \
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 \
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 \
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
all: MMDVMHost

View file

@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
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 \
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 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 Sync.o \
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 \
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 \
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

View file

@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
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 \
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 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 Sync.o TFTSerial.o Thread.o \
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 \
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 \
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

View file

@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
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 \
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 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 TFTSerial.o Thread.o \
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 \
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 \
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
all: MMDVMHost

View file

@ -8,10 +8,10 @@ LDFLAGS = -g -L/usr/local/lib
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 \
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 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 Sync.o TFTSerial.o Thread.o \
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 \
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 \
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

View file

@ -8,10 +8,10 @@ LDFLAGS = -g
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 \
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 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 TFTSerial.o Thread.o \
Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
DMRNetwork.o DMRNetworkManager.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.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 \
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 \
TFTSerial.o Thread.o Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
all: MMDVMHost