From a3f746ddfad7d94c3b43a57075c3f73be5770bed Mon Sep 17 00:00:00 2001 From: Doug McLain Date: Sat, 17 Oct 2020 20:46:53 -0400 Subject: [PATCH] Add XLXHosts support to P252DMR and re-link to XLX after DMR timeout --- P252DMR/DMRNetwork.cpp | 14 +++++++++----- P252DMR/DMRNetwork.h | 2 +- P252DMR/P252DMR.cpp | 8 +++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/P252DMR/DMRNetwork.cpp b/P252DMR/DMRNetwork.cpp index 484413b..e0cb6a0 100644 --- a/P252DMR/DMRNetwork.cpp +++ b/P252DMR/DMRNetwork.cpp @@ -329,8 +329,9 @@ void CDMRNetwork::close() m_timeoutTimer.stop(); } -void CDMRNetwork::clock(unsigned int ms) +bool CDMRNetwork::clock(unsigned int ms) { + bool r = false; m_delayBuffers[1U]->clock(ms); m_delayBuffers[2U]->clock(ms); @@ -341,7 +342,7 @@ void CDMRNetwork::clock(unsigned int ms) if (ret) { ret = writeLogin(); if (!ret) - return; + return true; m_status = WAITING_LOGIN; m_timeoutTimer.start(); @@ -350,7 +351,7 @@ void CDMRNetwork::clock(unsigned int ms) m_retryTimer.start(); } - return; + return false; } in_addr address; @@ -360,7 +361,7 @@ void CDMRNetwork::clock(unsigned int ms) LogError("DMR, Socket has failed, retrying connection to the master"); close(); open(); - return; + return true; } // if (m_debug && length > 0) @@ -386,7 +387,7 @@ void CDMRNetwork::clock(unsigned int ms) LogError("DMR, Login to the master has failed, retrying network ..."); close(); open(); - return; + return true; } } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { switch (m_status) { @@ -430,6 +431,7 @@ void CDMRNetwork::clock(unsigned int ms) LogError("DMR, Master is closing down"); close(); open(); + r = true; } else if (::memcmp(m_buffer, "MSTPONG", 7U) == 0) { m_timeoutTimer.start(); } else if (::memcmp(m_buffer, "RPTSBKN", 7U) == 0) { @@ -469,7 +471,9 @@ void CDMRNetwork::clock(unsigned int ms) LogError("DMR, Connection to the master has timed out, retrying connection"); close(); open(); + r = true; } + return r; } void CDMRNetwork::reset(unsigned int slotNo) diff --git a/P252DMR/DMRNetwork.h b/P252DMR/DMRNetwork.h index 65b019e..bf62445 100644 --- a/P252DMR/DMRNetwork.h +++ b/P252DMR/DMRNetwork.h @@ -52,7 +52,7 @@ public: bool wantsBeacon(); - void clock(unsigned int ms); + bool clock(unsigned int ms); void reset(unsigned int slotNo); diff --git a/P252DMR/P252DMR.cpp b/P252DMR/P252DMR.cpp index e3d01f9..95a056d 100644 --- a/P252DMR/P252DMR.cpp +++ b/P252DMR/P252DMR.cpp @@ -298,6 +298,10 @@ int CP252DMR::run() std::string p25_localAddress = m_conf.getP25LocalAddress(); unsigned int p25_localPort = m_conf.getP25LocalPort(); bool p25_debug = m_conf.getP25NetworkDebug(); + + std::string fileName = m_conf.getDMRXLXFile(); + m_xlxReflectors = new CReflectors(fileName, 60U); + m_xlxReflectors->load(); m_p25Network = new CP25Network(p25_localAddress, p25_localPort, p25_dstAddress, p25_dstPort, m_callsign, p25_debug); @@ -788,7 +792,9 @@ int CP252DMR::run() pollTimer.start(); } - m_dmrNetwork->clock(ms); + if(m_dmrNetwork->clock(ms)){ + m_xlxConnected = false; + } if (m_xlxReflectors != NULL) m_xlxReflectors->clock(ms);