diff --git a/Conf.cpp b/Conf.cpp index 77bbe3e..4036699 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2022 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 @@ -32,6 +32,7 @@ enum SECTION { SECTION_GENERAL, SECTION_INFO, SECTION_LOG, + SECTION_MQTT, SECTION_CWID, SECTION_DMRID_LOOKUP, SECTION_NXDNID_LOOKUP, @@ -86,6 +87,10 @@ m_logFileLevel(0U), m_logFilePath(), m_logFileRoot(), m_logFileRotate(true), +m_mqttHost("127.0.0.1"), +m_mqttPort(1883), +m_mqttKeepalive(60U), +m_mqttName("mmdvm"), m_cwIdEnabled(false), m_cwIdTime(10U), m_cwIdCallsign(), @@ -369,6 +374,8 @@ bool CConf::read() section = SECTION_INFO; else if (::strncmp(buffer, "[Log]", 5U) == 0) section = SECTION_LOG; + else if (::strncmp(buffer, "[MQTT]", 6U) == 0) + section = SECTION_MQTT; else if (::strncmp(buffer, "[CW Id]", 7U) == 0) section = SECTION_CWID; else if (::strncmp(buffer, "[DMR Id Lookup]", 15U) == 0) @@ -513,6 +520,15 @@ bool CConf::read() m_logDisplayLevel = (unsigned int)::atoi(value); else if (::strcmp(key, "FileRotate") == 0) m_logFileRotate = ::atoi(value) == 1; + } else if (section == SECTION_MQTT) { + if (::strcmp(key, "Host") == 0) + m_mqttHost = value; + else if (::strcmp(key, "Port") == 0) + m_mqttPort = (unsigned short)::atoi(value); + else if (::strcmp(key, "Keepalive") == 0) + m_mqttKeepalive = (unsigned int)::atoi(value); + else if (::strcmp(key, "Name") == 0) + m_mqttName = value; } else if (section == SECTION_CWID) { if (::strcmp(key, "Enable") == 0) m_cwIdEnabled = ::atoi(value) == 1; @@ -1253,6 +1269,26 @@ bool CConf::getLogFileRotate() const return m_logFileRotate; } +std::string CConf::getMQTTHost() const +{ + return m_mqttHost; +} + +unsigned short CConf::getMQTTPort() const +{ + return m_mqttPort; +} + +unsigned int CConf::getMQTTKeepalive() const +{ + return m_mqttKeepalive; +} + +std::string CConf::getMQTTName() const +{ + return m_mqttName; +} + bool CConf::getCWIdEnabled() const { return m_cwIdEnabled; diff --git a/Conf.h b/Conf.h index ed13f11..29f01e4 100644 --- a/Conf.h +++ b/Conf.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2022 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 @@ -56,6 +56,12 @@ public: std::string getLogFileRoot() const; bool getLogFileRotate() const; + // The MQTT section + std::string getMQTTHost() const; + unsigned short getMQTTPort() const; + unsigned int getMQTTKeepalive() const; + std::string getMQTTName() const; + // The CW ID section bool getCWIdEnabled() const; unsigned int getCWIdTime() const; @@ -395,6 +401,11 @@ private: std::string m_logFileRoot; bool m_logFileRotate; + std::string m_mqttHost; + unsigned short m_mqttPort; + unsigned int m_mqttKeepalive; + std::string m_mqttName; + bool m_cwIdEnabled; unsigned int m_cwIdTime; std::string m_cwIdCallsign; diff --git a/Log.cpp b/Log.cpp index 752601e..a851e5b 100644 --- a/Log.cpp +++ b/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2022 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 @@ -17,6 +17,7 @@ */ #include "Log.h" +#include "MQTTPublisher.h" #if defined(_WIN32) || defined(_WIN64) #include @@ -32,6 +33,9 @@ #include #include +CMQTTPublisher* m_mqtt = NULL; +static std::string m_mqttName; + static unsigned int m_fileLevel = 2U; static std::string m_filePath; static std::string m_fileRoot; @@ -124,7 +128,7 @@ bool LogOpen() return logOpenNoRotate(); } -bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, bool rotate) +bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, bool rotate, const std::string& mqttName) { m_filePath = filePath; m_fileRoot = fileRoot; @@ -132,6 +136,7 @@ bool LogInitialise(bool daemon, const std::string& filePath, const std::string& m_displayLevel = displayLevel; m_daemon = daemon; m_fileRotate = rotate; + m_mqttName = mqttName; if (m_daemon) m_displayLevel = 0U; @@ -171,6 +176,13 @@ void Log(unsigned int level, const char* fmt, ...) va_end(vl); + if (m_mqtt != NULL) { + char topic[100U]; + ::sprintf(topic, "%s/log/%c", m_mqttName.c_str(), LEVELS[level]); + + m_mqtt->publish(topic, buffer + 3U); + } + if (level >= m_fileLevel && m_fileLevel != 0U) { bool ret = ::LogOpen(); if (!ret) diff --git a/Log.h b/Log.h index ae95b60..fdc50c3 100644 --- a/Log.h +++ b/Log.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2022 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 @@ -30,7 +30,7 @@ extern void Log(unsigned int level, const char* fmt, ...); -extern bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, bool rotate); +extern bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, bool rotate, const std::string& mqttName = ""); extern void LogFinalise(); #endif diff --git a/MMDVM.ini b/MMDVM.ini index 649572a..8aef68a 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -29,6 +29,12 @@ FilePath=. FileRoot=MMDVM FileRotate=1 +[MQTT] +Host=127.0.0.1 +Port=1883 +Keepalive=60 +Name=mmdvm + [CW Id] Enable=1 Time=10 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index fcd0b39..e3147c1 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2022 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 @@ -28,6 +28,7 @@ #include "I2CController.h" #endif #include "UDPController.h" +#include "MQTTPublisher.h" #include "DStarDefines.h" #include "Version.h" #include "StopWatch.h" @@ -59,6 +60,9 @@ static bool m_killed = false; static int m_signal = 0; static bool m_reload = false; +// In Log.cpp +extern CMQTTPublisher* m_mqtt; + #if !defined(_WIN32) && !defined(_WIN64) static void sigHandler1(int signum) { @@ -267,15 +271,23 @@ int CMMDVMHost::run() #endif #if !defined(_WIN32) && !defined(_WIN64) - ret = ::LogInitialise(m_daemon, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogFileRotate()); + ret = ::LogInitialise(m_daemon, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogFileRotate(), m_conf.getMQTTName()); #else - ret = ::LogInitialise(false, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogFileRotate()); + ret = ::LogInitialise(false, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogFileRotate(), m_conf.getMQTTName()); #endif if (!ret) { ::fprintf(stderr, "MMDVMHost: unable to open the log file\n"); return 1; } + m_mqtt = new CMQTTPublisher(m_conf.getMQTTHost(), m_conf.getMQTTPort(), m_conf.getMQTTKeepalive(), 2); + ret = m_mqtt->open(); + if (!ret) { + ::fprintf(stderr, "MMDVMHost: unable to start the MQTT Publisher\n"); + delete m_mqtt; + m_mqtt = NULL; + } + #if !defined(_WIN32) && !defined(_WIN64) if (m_daemon) { ::close(STDIN_FILENO); @@ -1361,6 +1373,11 @@ int CMMDVMHost::run() delete m_remoteControl; } + if (m_mqtt != NULL) { + m_mqtt->close(); + delete m_mqtt; + } + delete m_dstar; delete m_dmr; delete m_ysf; diff --git a/MQTTPublisher.cpp b/MQTTPublisher.cpp new file mode 100644 index 0000000..7c7a34c --- /dev/null +++ b/MQTTPublisher.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2022 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 "MQTTPublisher.h" + +#include +#include +#include + + +CMQTTPublisher::CMQTTPublisher(const std::string& host, unsigned short port, unsigned int keepalive, unsigned int qos) : +m_host(host), +m_port(port), +m_keepalive(keepalive), +m_qos(qos), +m_mosq(NULL), +m_connected(false) +{ + assert(!host.empty()); + assert(port > 0U); + assert(keepalive >= 5U); + assert(qos >= 0U && qos <= 2U); + + ::mosquitto_lib_init(); +} + +CMQTTPublisher::~CMQTTPublisher() +{ + ::mosquitto_lib_cleanup(); +} + +bool CMQTTPublisher::open() +{ + m_mosq = ::mosquitto_new(NULL, true, this); + if (m_mosq == NULL){ + ::fprintf(stderr, "MQTT Error newing: Out of memory.\n"); + return false; + } + + ::mosquitto_connect_callback_set(m_mosq, onConnect); + ::mosquitto_disconnect_callback_set(m_mosq, onDisconnect); + + int rc = ::mosquitto_connect(m_mosq, m_host.c_str(), m_port, m_keepalive); + if (rc != MOSQ_ERR_SUCCESS) { + ::mosquitto_destroy(m_mosq); + m_mosq = NULL; + ::fprintf(stderr, "MQTT Error connecting: %s\n", ::mosquitto_strerror(rc)); + return false; + } + + rc = ::mosquitto_loop_start(m_mosq); + if (rc != MOSQ_ERR_SUCCESS) { + ::mosquitto_destroy(m_mosq); + m_mosq = NULL; + ::fprintf(stderr, "MQTT Error loop starting: %s\n", ::mosquitto_strerror(rc)); + return false; + } + + return true; +} + +bool CMQTTPublisher::publish(const char* topic, const char* text) +{ + assert(topic != NULL); + assert(text != NULL); + + if (!m_connected) + return false; + + int rc = ::mosquitto_publish(m_mosq, NULL, topic, ::strlen(text), text, m_qos, false); + if (rc != MOSQ_ERR_SUCCESS) { + ::fprintf(stderr, "MQTT Error publishing: %s\n", ::mosquitto_strerror(rc)); + return false; + } + + return true; +} + +void CMQTTPublisher::close() +{ + ::mosquitto_disconnect(m_mosq); + ::mosquitto_destroy(m_mosq); + m_mosq = NULL; +} + +void CMQTTPublisher::onConnect(mosquitto* mosq, void* obj, int rc) +{ + assert(mosq != NULL); + assert(obj != NULL); + + ::fprintf(stdout, "MQTT: on_connect: %s\n", ::mosquitto_connack_string(rc)); + + CMQTTPublisher* p = static_cast(obj); + p->m_connected = true; +} + +void CMQTTPublisher::onDisconnect(mosquitto* mosq, void* obj, int rc) +{ + assert(mosq != NULL); + assert(obj != NULL); + + ::fprintf(stdout, "MQTT: on_disconnect: %s\n", ::mosquitto_reason_string(rc)); + + CMQTTPublisher* p = static_cast(obj); + p->m_connected = false; +} + diff --git a/MQTTPublisher.h b/MQTTPublisher.h new file mode 100644 index 0000000..09b8b8b --- /dev/null +++ b/MQTTPublisher.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2022 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(MQTTPUBLISHER_H) +#define MQTTPUBLISHER_H + +#include + +#include + + +class CMQTTPublisher { +public: + CMQTTPublisher(const std::string& host, unsigned short port, unsigned int keepalive, unsigned int qos); + ~CMQTTPublisher(); + + bool open(); + + bool publish(const char* topic, const char* text); + + void close(); + +private: + std::string m_host; + unsigned short m_port; + unsigned int m_keepalive; + unsigned int m_qos; + mosquitto* m_mosq; + bool m_connected; + + static void onConnect(mosquitto* mosq, void* obj, int rc); + static void onDisconnect(mosquitto* mosq, void* obj, int rc); +}; + +#endif + diff --git a/Makefile b/Makefile index bac0711..f9dcb4b 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CC = cc CXX = c++ CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -I/usr/local/include -LIBS = -lpthread -lutil +LIBS = -lpthread -lutil -lmosquitto LDFLAGS = -g -L/usr/local/lib OBJECTS = \ @@ -11,7 +11,7 @@ OBJECTS = \ DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ Hamming.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o MMDVMHost.o \ - Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ + MQTTPublisher.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o POCSAGControl.o \ POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o TFTSurenoo.o Thread.o \ @@ -22,8 +22,8 @@ all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost -RemoteCommand: Log.o RemoteCommand.o UDPSocket.o - $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand +RemoteCommand: Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< diff --git a/Makefile.Pi b/Makefile.Pi index 18b2bb6..fde1c41 100644 --- a/Makefile.Pi +++ b/Makefile.Pi @@ -3,7 +3,7 @@ CC = cc CXX = c++ CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DRASPBERRY_PI -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lmosquitto LDFLAGS = -g -L/usr/local/lib OBJECTS = \ @@ -11,7 +11,7 @@ OBJECTS = \ DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ Hamming.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o MMDVMHost.o \ - Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ + MQTTPublisher.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o POCSAGControl.o \ POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o TFTSurenoo.o Thread.o \ @@ -22,8 +22,8 @@ all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost -RemoteCommand: Log.o RemoteCommand.o UDPSocket.o - $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand +RemoteCommand: Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< diff --git a/Makefile.Pi.Adafruit b/Makefile.Pi.Adafruit index 5569a89..7e86204 100644 --- a/Makefile.Pi.Adafruit +++ b/Makefile.Pi.Adafruit @@ -4,7 +4,7 @@ CC = cc CXX = c++ CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DHD44780 -DADAFRUIT_DISPLAY -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lmosquitto LDFLAGS = -g -L/usr/local/lib OBJECTS = \ @@ -12,7 +12,7 @@ OBJECTS = \ DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ Hamming.o HD44780.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o \ - MMDVMHost.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ + MMDVMHost.o MQTTPublisher.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ @@ -24,8 +24,8 @@ all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost -RemoteCommand: Log.o RemoteCommand.o UDPSocket.o - $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand +RemoteCommand: Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< diff --git a/Makefile.Pi.HD44780 b/Makefile.Pi.HD44780 index 4a48db6..f61e77b 100644 --- a/Makefile.Pi.HD44780 +++ b/Makefile.Pi.HD44780 @@ -3,7 +3,7 @@ CC = cc CXX = c++ CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DHD44780 -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lmosquitto LDFLAGS = -g -L/usr/local/lib OBJECTS = \ @@ -11,7 +11,7 @@ OBJECTS = \ DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ Hamming.o HD44780.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o \ - MMDVMHost.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ + MMDVMHost.o MQTTPublisher.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ @@ -23,8 +23,8 @@ all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost -RemoteCommand: Log.o RemoteCommand.o UDPSocket.o - $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand +RemoteCommand: Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< diff --git a/Makefile.Pi.OLED b/Makefile.Pi.OLED index 3beb357..39ba604 100644 --- a/Makefile.Pi.OLED +++ b/Makefile.Pi.OLED @@ -3,7 +3,7 @@ CC = cc CXX = c++ CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DOLED -I/usr/local/include -LIBS = -lArduiPi_OLED -lpthread -lutil +LIBS = -lArduiPi_OLED -lpthread -lutil -lmosquitto # If you use NetBSD, add following CFLAGS #CFLAGS += -L/usr/local/lib -Wl,-rpath=/usr/local/lib @@ -15,7 +15,7 @@ OBJECTS = \ DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ Hamming.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o MMDVMHost.o \ - Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ + MQTTPublisher.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o NXDNControl.o \ NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ NXDNUDCH.o OLED.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ @@ -27,8 +27,8 @@ all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost -RemoteCommand: Log.o RemoteCommand.o UDPSocket.o - $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand +RemoteCommand: Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $< diff --git a/Makefile.Pi.PCF8574 b/Makefile.Pi.PCF8574 index 18e975f..1207ccc 100644 --- a/Makefile.Pi.PCF8574 +++ b/Makefile.Pi.PCF8574 @@ -4,7 +4,7 @@ CC = cc CXX = c++ CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHAVE_LOG_H -DHD44780 -DPCF8574_DISPLAY -I/usr/local/include -LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil +LIBS = -lwiringPi -lwiringPiDev -lpthread -lutil -lmosquitto LDFLAGS = -g -L/usr/local/lib OBJECTS = \ @@ -12,7 +12,7 @@ OBJECTS = \ DMRDirectNetwork.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRGatewayNetwork.o DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o \ DMRAccessControl.o DMRTA.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o FMControl.o FMNetwork.o Golay2087.o Golay24128.o \ Hamming.o HD44780.o I2CController.o IIRDirectForm1Filter.o LCDproc.o Log.o M17Control.o M17Convolution.o M17CRC.o M17LSF.o M17Network.o M17Utils.o \ - MMDVMHost.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ + MMDVMHost.o MQTTPublisher.o Modem.o ModemPort.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullController.o NullDisplay.o NXDNAudio.o \ NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNIcomNetwork.o NXDNKenwoodNetwork.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o PseudoTTYController.o \ POCSAGControl.o POCSAGNetwork.o QR1676.o RemoteControl.o RS129.o RS241213.o RSSIInterpolator.o SerialPort.o SMeter.o StopWatch.o Sync.o SHA256.o \ @@ -24,8 +24,8 @@ all: MMDVMHost RemoteCommand MMDVMHost: GitVersion.h $(OBJECTS) $(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost -RemoteCommand: Log.o RemoteCommand.o UDPSocket.o - $(CXX) Log.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand +RemoteCommand: Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o + $(CXX) Log.o MQTTPublisher.o RemoteCommand.o UDPSocket.o $(CFLAGS) $(LIBS) -o RemoteCommand %.o: %.cpp $(CXX) $(CFLAGS) -c -o $@ $<