From d80653f293f355cb0e61930d5f0980f955e81679 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 10 Apr 2017 18:07:42 +0100 Subject: [PATCH] Add basic DMR network failover. --- Conf.cpp | 82 +++++++++++++----- Conf.h | 26 ++++-- DMRNetwork.cpp | 5 ++ DMRNetwork.h | 2 + DMRNetworkManager.cpp | 174 ++++++++++++++++++++++++++++++++++++++ DMRNetworkManager.h | 66 +++++++++++++++ MMDVM.ini | 13 ++- MMDVMHost.cpp | 70 +++++++++++---- MMDVMHost.vcxproj | 2 + MMDVMHost.vcxproj.filters | 6 ++ Makefile | 8 +- Makefile.Pi | 8 +- Makefile.Pi.Adafruit | 8 +- Makefile.Pi.HD44780 | 8 +- Makefile.Pi.OLED | 8 +- Makefile.Pi.PCF8574 | 8 +- Makefile.Solaris | 8 +- 17 files changed, 423 insertions(+), 79 deletions(-) create mode 100644 DMRNetworkManager.cpp create mode 100644 DMRNetworkManager.h diff --git a/Conf.cpp b/Conf.cpp index dd44669..ecdf872 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -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 diff --git a/Conf.h b/Conf.h index b92525f..6d13546 100644 --- a/Conf.h +++ b/Conf.h @@ -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; diff --git a/DMRNetwork.cpp b/DMRNetwork.cpp index c69ffc7..8f20647 100644 --- a/DMRNetwork.cpp +++ b/DMRNetwork.cpp @@ -573,3 +573,8 @@ bool CDMRNetwork::write(const unsigned char* data, unsigned int length) return true; } + +bool CDMRNetwork::isRunning() const +{ + return m_status == RUNNING; +} diff --git a/DMRNetwork.h b/DMRNetwork.h index ce85222..1c1966f 100644 --- a/DMRNetwork.h +++ b/DMRNetwork.h @@ -72,6 +72,8 @@ public: virtual bool wantsBeacon(); + virtual bool isRunning() const; + virtual void clock(unsigned int ms); virtual void close(); diff --git a/DMRNetworkManager.cpp b/DMRNetworkManager.cpp new file mode 100644 index 0000000..147e0ae --- /dev/null +++ b/DMRNetworkManager.cpp @@ -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 +#include + +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; + } +} diff --git a/DMRNetworkManager.h b/DMRNetworkManager.h new file mode 100644 index 0000000..a0853ed --- /dev/null +++ b/DMRNetworkManager.h @@ -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 +#include + +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 diff --git a/MMDVM.ini b/MMDVM.ini index dc18eae..ab513d4 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -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 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 2dbba28..122f965 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -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()) { diff --git a/MMDVMHost.vcxproj b/MMDVMHost.vcxproj index ea4eb81..d12e008 100644 --- a/MMDVMHost.vcxproj +++ b/MMDVMHost.vcxproj @@ -170,6 +170,7 @@ + @@ -241,6 +242,7 @@ + diff --git a/MMDVMHost.vcxproj.filters b/MMDVMHost.vcxproj.filters index f01b170..a582fc1 100644 --- a/MMDVMHost.vcxproj.filters +++ b/MMDVMHost.vcxproj.filters @@ -221,6 +221,9 @@ Header Files + + Header Files + @@ -412,5 +415,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/Makefile b/Makefile index 90346af..f03024d 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/Makefile.Pi b/Makefile.Pi index 3ac85ad..249df8b 100644 --- a/Makefile.Pi +++ b/Makefile.Pi @@ -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 diff --git a/Makefile.Pi.Adafruit b/Makefile.Pi.Adafruit index 816f5ad..4383387 100644 --- a/Makefile.Pi.Adafruit +++ b/Makefile.Pi.Adafruit @@ -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 diff --git a/Makefile.Pi.HD44780 b/Makefile.Pi.HD44780 index 13b5688..998191d 100644 --- a/Makefile.Pi.HD44780 +++ b/Makefile.Pi.HD44780 @@ -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 diff --git a/Makefile.Pi.OLED b/Makefile.Pi.OLED index 000de85..b8c3fcb 100644 --- a/Makefile.Pi.OLED +++ b/Makefile.Pi.OLED @@ -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 diff --git a/Makefile.Pi.PCF8574 b/Makefile.Pi.PCF8574 index 9164dab..a7b950b 100644 --- a/Makefile.Pi.PCF8574 +++ b/Makefile.Pi.PCF8574 @@ -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 diff --git a/Makefile.Solaris b/Makefile.Solaris index 7136c1a..815ea2e 100644 --- a/Makefile.Solaris +++ b/Makefile.Solaris @@ -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