Add XLXHosts support to P252DMR and re-link to XLX after DMR timeout

This commit is contained in:
Doug McLain 2020-10-17 20:46:53 -04:00
parent 8b35da0c3d
commit a3f746ddfa
3 changed files with 17 additions and 7 deletions

View File

@ -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)

View File

@ -52,7 +52,7 @@ public:
bool wantsBeacon();
void clock(unsigned int ms);
bool clock(unsigned int ms);
void reset(unsigned int slotNo);

View File

@ -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);