From ee978a6521c2243ed5a20c7d86e2b3c3a5d5cb2e Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 27 Apr 2017 20:39:46 +0100 Subject: [PATCH] Fix bugs and improve logging. --- DMRGateway.cpp | 10 ++++++---- DMRGateway.h | 14 +++++++------- DMRNetwork.cpp | 29 +++++++++++++++-------------- DMRNetwork.h | 3 ++- Version.h | 2 +- 5 files changed, 31 insertions(+), 27 deletions(-) diff --git a/DMRGateway.cpp b/DMRGateway.cpp index 3396438..8f19a9e 100644 --- a/DMRGateway.cpp +++ b/DMRGateway.cpp @@ -214,12 +214,14 @@ int CDMRGateway::run() LogMessage("Waiting for MMDVM to connect....."); for (;;) { - CThread::sleep(100U); - unsigned char config[400U]; unsigned int len = m_mmdvm->getConfig(config); if (len > 0U) break; + + m_mmdvm->clock(10U); + + CThread::sleep(10U); } LogMessage("MMDVM has connected"); @@ -391,7 +393,7 @@ bool CDMRGateway::createDMRNetwork() else LogInfo(" Local: random"); - m_dmrNetwork = new CDMRNetwork(address, port, local, id, password, debug); + m_dmrNetwork = new CDMRNetwork(address, port, local, id, password, "DMR", debug); std::string options = m_mmdvm->getOptions(); if (!options.empty()) { @@ -432,7 +434,7 @@ bool CDMRGateway::createXLXNetwork() else LogInfo(" Local: random"); - m_xlxNetwork = new CDMRNetwork(address, port, local, id, password, debug); + m_xlxNetwork = new CDMRNetwork(address, port, local, id, password, "XLX", debug); if (!options.empty()) { LogInfo(" Options: %s", options.c_str()); diff --git a/DMRGateway.h b/DMRGateway.h index 6a5be31..c590fc3 100644 --- a/DMRGateway.h +++ b/DMRGateway.h @@ -28,21 +28,21 @@ class CDMRGateway { public: - CDMRGateway(const std::string& confFile); - ~CDMRGateway(); + CDMRGateway(const std::string& confFile); + ~CDMRGateway(); - int run(); + int run(); private: - CConf m_conf; + CConf m_conf; CMMDVMNetwork* m_mmdvm; CDMRNetwork* m_dmrNetwork; - CDMRNetwork* m_xlxNetwork; + CDMRNetwork* m_xlxNetwork; unsigned int m_reflector; bool createMMDVM(); - bool createDMRNetwork(); - bool createXLXNetwork(); + bool createDMRNetwork(); + bool createXLXNetwork(); }; #endif diff --git a/DMRNetwork.cpp b/DMRNetwork.cpp index 00af2a7..65ebc62 100644 --- a/DMRNetwork.cpp +++ b/DMRNetwork.cpp @@ -31,11 +31,12 @@ const unsigned int BUFFER_LENGTH = 500U; const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; -CDMRNetwork::CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool debug) : +CDMRNetwork::CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, char* name, bool debug) : m_address(), m_port(port), m_id(NULL), m_password(password), +m_name(name), m_debug(debug), m_socket(local), m_status(WAITING_CONNECT), @@ -91,7 +92,7 @@ void CDMRNetwork::setConfig(const unsigned char* data, unsigned int len) bool CDMRNetwork::open() { - LogMessage("DMR, Opening DMR Network"); + LogMessage("%s, Opening DMR Network", m_name); m_status = WAITING_CONNECT; m_timeoutTimer.stop(); @@ -221,7 +222,7 @@ bool CDMRNetwork::write(const CDMRData& data) void CDMRNetwork::close() { - LogMessage("DMR, Closing DMR Network"); + LogMessage("%s, Closing DMR Network", m_name); if (m_status == RUNNING) { unsigned char buffer[9U]; @@ -261,7 +262,7 @@ void CDMRNetwork::clock(unsigned int ms) unsigned int port; int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, port); if (length < 0) { - LogError("DMR, Socket has failed, retrying connection to the master"); + LogError("%s, Socket has failed, retrying connection to the master", m_name); close(); open(); return; @@ -280,7 +281,7 @@ void CDMRNetwork::clock(unsigned int ms) m_rxData.addData(m_buffer, len); } else if (::memcmp(m_buffer, "MSTNAK", 6U) == 0) { if (m_status == RUNNING) { - LogWarning("DMR, The master is restarting, logging back in"); + LogWarning("%s, The master is restarting, logging back in", m_name); m_status = WAITING_LOGIN; m_timeoutTimer.start(); m_retryTimer.start(); @@ -288,7 +289,7 @@ void CDMRNetwork::clock(unsigned int ms) /* Once the modem death spiral has been prevented in Modem.cpp the Network sometimes times out and reaches here. We want it to reconnect so... */ - LogError("DMR, Login to the master has failed, retrying ..."); + LogError("%s, Login to the master has failed, retrying ...", m_name); close(); open(); return; @@ -296,7 +297,7 @@ void CDMRNetwork::clock(unsigned int ms) } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { switch (m_status) { case WAITING_LOGIN: - LogDebug("DMR, Sending authorisation"); + LogDebug("%s, Sending authorisation", m_name); ::memcpy(m_salt, m_buffer + 6U, sizeof(uint32_t)); writeAuthorisation(); m_status = WAITING_AUTHORISATION; @@ -304,7 +305,7 @@ void CDMRNetwork::clock(unsigned int ms) m_retryTimer.start(); break; case WAITING_AUTHORISATION: - LogDebug("DMR, Sending configuration"); + LogDebug("%s, Sending configuration", m_name); writeConfig(); m_status = WAITING_CONFIG; m_timeoutTimer.start(); @@ -312,10 +313,10 @@ void CDMRNetwork::clock(unsigned int ms) break; case WAITING_CONFIG: if (m_options.empty()) { - LogMessage("DMR, Logged into the master successfully"); + LogMessage("%s, Logged into the master successfully", m_name); m_status = RUNNING; } else { - LogDebug("DMR, Sending options"); + LogDebug("%s, Sending options", m_name); writeOptions(); m_status = WAITING_OPTIONS; } @@ -323,7 +324,7 @@ void CDMRNetwork::clock(unsigned int ms) m_retryTimer.start(); break; case WAITING_OPTIONS: - LogMessage("DMR, Logged into the master successfully"); + LogMessage("%s, Logged into the master successfully", m_name); m_status = RUNNING; m_timeoutTimer.start(); m_retryTimer.start(); @@ -332,7 +333,7 @@ void CDMRNetwork::clock(unsigned int ms) break; } } else if (::memcmp(m_buffer, "MSTCL", 5U) == 0) { - LogError("DMR, Master is closing down"); + LogError("%s, Master is closing down", m_name); close(); open(); } else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) { @@ -371,7 +372,7 @@ void CDMRNetwork::clock(unsigned int ms) m_timeoutTimer.clock(ms); if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired()) { - LogError("DMR, Connection to the master has timed out, retrying connection"); + LogError("%s, Connection to the master has timed out, retrying connection", m_name); close(); open(); } @@ -459,7 +460,7 @@ bool CDMRNetwork::write(const unsigned char* data, unsigned int length) bool ret = m_socket.write(data, length, m_address, m_port); if (!ret) { - LogError("DMR, Socket has failed when writing data to the master, retrying connection"); + LogError("%s, Socket has failed when writing data to the master, retrying connection", m_name); m_socket.close(); open(); return false; diff --git a/DMRNetwork.h b/DMRNetwork.h index 8434c7e..70fe795 100644 --- a/DMRNetwork.h +++ b/DMRNetwork.h @@ -30,7 +30,7 @@ class CDMRNetwork { public: - CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool debug); + CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, char* name, bool debug); ~CDMRNetwork(); void setOptions(const std::string& options); @@ -54,6 +54,7 @@ private: unsigned int m_port; uint8_t* m_id; std::string m_password; + char* m_name; bool m_debug; CUDPSocket m_socket; diff --git a/Version.h b/Version.h index af7b3da..8ecec59 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20170420"; +const char* VERSION = "20170427"; #endif