Fix bugs and improve logging.

This commit is contained in:
Jonathan Naylor
2017-04-27 20:39:46 +01:00
parent 315f189a80
commit ee978a6521
5 changed files with 31 additions and 27 deletions

View File

@@ -214,12 +214,14 @@ int CDMRGateway::run()
LogMessage("Waiting for MMDVM to connect....."); LogMessage("Waiting for MMDVM to connect.....");
for (;;) { for (;;) {
CThread::sleep(100U);
unsigned char config[400U]; unsigned char config[400U];
unsigned int len = m_mmdvm->getConfig(config); unsigned int len = m_mmdvm->getConfig(config);
if (len > 0U) if (len > 0U)
break; break;
m_mmdvm->clock(10U);
CThread::sleep(10U);
} }
LogMessage("MMDVM has connected"); LogMessage("MMDVM has connected");
@@ -391,7 +393,7 @@ bool CDMRGateway::createDMRNetwork()
else else
LogInfo(" Local: random"); 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(); std::string options = m_mmdvm->getOptions();
if (!options.empty()) { if (!options.empty()) {
@@ -432,7 +434,7 @@ bool CDMRGateway::createXLXNetwork()
else else
LogInfo(" Local: random"); 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()) { if (!options.empty()) {
LogInfo(" Options: %s", options.c_str()); LogInfo(" Options: %s", options.c_str());

View File

@@ -31,11 +31,12 @@ const unsigned int BUFFER_LENGTH = 500U;
const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U; 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_address(),
m_port(port), m_port(port),
m_id(NULL), m_id(NULL),
m_password(password), m_password(password),
m_name(name),
m_debug(debug), m_debug(debug),
m_socket(local), m_socket(local),
m_status(WAITING_CONNECT), m_status(WAITING_CONNECT),
@@ -91,7 +92,7 @@ void CDMRNetwork::setConfig(const unsigned char* data, unsigned int len)
bool CDMRNetwork::open() bool CDMRNetwork::open()
{ {
LogMessage("DMR, Opening DMR Network"); LogMessage("%s, Opening DMR Network", m_name);
m_status = WAITING_CONNECT; m_status = WAITING_CONNECT;
m_timeoutTimer.stop(); m_timeoutTimer.stop();
@@ -221,7 +222,7 @@ bool CDMRNetwork::write(const CDMRData& data)
void CDMRNetwork::close() void CDMRNetwork::close()
{ {
LogMessage("DMR, Closing DMR Network"); LogMessage("%s, Closing DMR Network", m_name);
if (m_status == RUNNING) { if (m_status == RUNNING) {
unsigned char buffer[9U]; unsigned char buffer[9U];
@@ -261,7 +262,7 @@ void CDMRNetwork::clock(unsigned int ms)
unsigned int port; unsigned int port;
int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, port); int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, port);
if (length < 0) { 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(); close();
open(); open();
return; return;
@@ -280,7 +281,7 @@ void CDMRNetwork::clock(unsigned int ms)
m_rxData.addData(m_buffer, len); m_rxData.addData(m_buffer, len);
} else if (::memcmp(m_buffer, "MSTNAK", 6U) == 0) { } else if (::memcmp(m_buffer, "MSTNAK", 6U) == 0) {
if (m_status == RUNNING) { 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_status = WAITING_LOGIN;
m_timeoutTimer.start(); m_timeoutTimer.start();
m_retryTimer.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 /* Once the modem death spiral has been prevented in Modem.cpp
the Network sometimes times out and reaches here. the Network sometimes times out and reaches here.
We want it to reconnect so... */ 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(); close();
open(); open();
return; return;
@@ -296,7 +297,7 @@ void CDMRNetwork::clock(unsigned int ms)
} else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) {
switch (m_status) { switch (m_status) {
case WAITING_LOGIN: case WAITING_LOGIN:
LogDebug("DMR, Sending authorisation"); LogDebug("%s, Sending authorisation", m_name);
::memcpy(m_salt, m_buffer + 6U, sizeof(uint32_t)); ::memcpy(m_salt, m_buffer + 6U, sizeof(uint32_t));
writeAuthorisation(); writeAuthorisation();
m_status = WAITING_AUTHORISATION; m_status = WAITING_AUTHORISATION;
@@ -304,7 +305,7 @@ void CDMRNetwork::clock(unsigned int ms)
m_retryTimer.start(); m_retryTimer.start();
break; break;
case WAITING_AUTHORISATION: case WAITING_AUTHORISATION:
LogDebug("DMR, Sending configuration"); LogDebug("%s, Sending configuration", m_name);
writeConfig(); writeConfig();
m_status = WAITING_CONFIG; m_status = WAITING_CONFIG;
m_timeoutTimer.start(); m_timeoutTimer.start();
@@ -312,10 +313,10 @@ void CDMRNetwork::clock(unsigned int ms)
break; break;
case WAITING_CONFIG: case WAITING_CONFIG:
if (m_options.empty()) { if (m_options.empty()) {
LogMessage("DMR, Logged into the master successfully"); LogMessage("%s, Logged into the master successfully", m_name);
m_status = RUNNING; m_status = RUNNING;
} else { } else {
LogDebug("DMR, Sending options"); LogDebug("%s, Sending options", m_name);
writeOptions(); writeOptions();
m_status = WAITING_OPTIONS; m_status = WAITING_OPTIONS;
} }
@@ -323,7 +324,7 @@ void CDMRNetwork::clock(unsigned int ms)
m_retryTimer.start(); m_retryTimer.start();
break; break;
case WAITING_OPTIONS: case WAITING_OPTIONS:
LogMessage("DMR, Logged into the master successfully"); LogMessage("%s, Logged into the master successfully", m_name);
m_status = RUNNING; m_status = RUNNING;
m_timeoutTimer.start(); m_timeoutTimer.start();
m_retryTimer.start(); m_retryTimer.start();
@@ -332,7 +333,7 @@ void CDMRNetwork::clock(unsigned int ms)
break; break;
} }
} else if (::memcmp(m_buffer, "MSTCL", 5U) == 0) { } else if (::memcmp(m_buffer, "MSTCL", 5U) == 0) {
LogError("DMR, Master is closing down"); LogError("%s, Master is closing down", m_name);
close(); close();
open(); open();
} else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) { } else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) {
@@ -371,7 +372,7 @@ void CDMRNetwork::clock(unsigned int ms)
m_timeoutTimer.clock(ms); m_timeoutTimer.clock(ms);
if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired()) { 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(); close();
open(); 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); bool ret = m_socket.write(data, length, m_address, m_port);
if (!ret) { 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(); m_socket.close();
open(); open();
return false; return false;

View File

@@ -30,7 +30,7 @@
class CDMRNetwork class CDMRNetwork
{ {
public: 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(); ~CDMRNetwork();
void setOptions(const std::string& options); void setOptions(const std::string& options);
@@ -54,6 +54,7 @@ private:
unsigned int m_port; unsigned int m_port;
uint8_t* m_id; uint8_t* m_id;
std::string m_password; std::string m_password;
char* m_name;
bool m_debug; bool m_debug;
CUDPSocket m_socket; CUDPSocket m_socket;

View File

@@ -19,6 +19,6 @@
#if !defined(VERSION_H) #if !defined(VERSION_H)
#define VERSION_H #define VERSION_H
const char* VERSION = "20170420"; const char* VERSION = "20170427";
#endif #endif