Add more complexit to relinking.

This commit is contained in:
Jonathan Naylor 2017-08-22 09:34:37 +01:00
parent a379d2447e
commit d80de2c215
2 changed files with 31 additions and 8 deletions

View file

@ -363,7 +363,7 @@ int CDMRGateway::run()
if (m_xlxNetwork != NULL) { if (m_xlxNetwork != NULL) {
bool connected = m_xlxNetwork->isConnected(); bool connected = m_xlxNetwork->isConnected();
if (connected && !m_xlxConnected) { if (connected && !m_xlxConnected) {
if (m_xlxRoom != 4000U) { if (m_xlxRoom >= 4001U && m_xlxRoom <= 4026U) {
writeXLXLink(m_xlxId, m_xlxRoom, m_xlxNetwork); writeXLXLink(m_xlxId, m_xlxRoom, m_xlxNetwork);
LogMessage("XLX, Linking to reflector %u in XLX%03u", m_xlxRoom, m_xlxNumber); LogMessage("XLX, Linking to reflector %u in XLX%03u", m_xlxRoom, m_xlxNumber);
if (voice != NULL) if (voice != NULL)
@ -378,7 +378,7 @@ int CDMRGateway::run()
else else
m_xlxRelink.start(); m_xlxRelink.start();
} else if (!connected && m_xlxConnected) { } else if (!connected && m_xlxConnected) {
if (m_xlxReflector != 4000U) { if (m_xlxReflector >= 4001U && m_xlxReflector <= 4026U) {
LogMessage("XLX, Unlinking from XLX%03u due to loss of connection", m_xlxNumber); LogMessage("XLX, Unlinking from XLX%03u due to loss of connection", m_xlxNumber);
if (voice != NULL) if (voice != NULL)
voice->unlinked(); voice->unlinked();
@ -391,18 +391,28 @@ int CDMRGateway::run()
m_xlxRelink.stop(); m_xlxRelink.stop();
if (m_xlxNumber != m_xlxStartup) { if (m_xlxNumber != m_xlxStartup) {
LogMessage("XLX, Re-linking to startup reflector %u in XLX%03u due to RF inactivity timeout", m_xlxRoom, m_xlxNumber); if (m_xlxStartup > 0U) {
linkXLX(m_xlxStartup); LogMessage("XLX, Re-linking to startup reflector %u in XLX%03u due to RF inactivity timeout", m_xlxRoom, m_xlxNumber);
linkXLX(m_xlxStartup);
} else {
LogMessage("XLX, Unlinking from XLX%03u due to RF inactivity timeout", m_xlxNumber);
unlinkXLX();
}
} else { } else {
if (m_xlxRoom != 4000U) if (m_xlxReflector >= 4001U && m_xlxReflector <= 4026U)
writeXLXLink(m_xlxId, 4000U, m_xlxNetwork); writeXLXLink(m_xlxId, 4000U, m_xlxNetwork);
writeXLXLink(m_xlxId, m_xlxRoom, m_xlxNetwork); if (m_xlxRoom >= 4001U && m_xlxRoom <= 4026U) {
LogMessage("XLX, Re-linking to startup reflector %u in XLX%03u due to RF inactivity timeout", m_xlxRoom, m_xlxNumber); writeXLXLink(m_xlxId, m_xlxRoom, m_xlxNetwork);
LogMessage("XLX, Re-linking to startup reflector %u in XLX%03u due to RF inactivity timeout", m_xlxRoom, m_xlxNumber);
} else if (m_xlxReflector >= 4001U && m_xlxReflector <= 4026U) {
LogMessage("XLX, Unlinking from reflector %u in XLX%03u due to RF inactivity timeout", m_xlxReflector, m_xlxNumber);
}
m_xlxReflector = m_xlxRoom; m_xlxReflector = m_xlxRoom;
if (voice != NULL) { if (voice != NULL) {
if (m_xlxReflector == 4000U) if (m_xlxReflector < 4001U || m_xlxReflector > 4026U)
voice->unlinked(); voice->unlinked();
else else
voice->linkedTo(m_xlxNumber, m_xlxReflector); voice->linkedTo(m_xlxNumber, m_xlxReflector);
@ -1142,6 +1152,18 @@ bool CDMRGateway::linkXLX(unsigned int number)
return true; return true;
} }
void CDMRGateway::unlinkXLX()
{
if (m_xlxNetwork != NULL) {
m_xlxNetwork->close();
delete m_xlxNetwork;
m_xlxNetwork = NULL;
}
m_xlxConnected = false;
m_xlxRelink.stop();
}
void CDMRGateway::writeXLXLink(unsigned int srcId, unsigned int dstId, CDMRNetwork* network) void CDMRGateway::writeXLXLink(unsigned int srcId, unsigned int dstId, CDMRNetwork* network)
{ {
assert(network != NULL); assert(network != NULL);

View file

@ -74,6 +74,7 @@ private:
bool createXLXNetwork(); bool createXLXNetwork();
bool linkXLX(unsigned int number); bool linkXLX(unsigned int number);
void unlinkXLX();
void writeXLXLink(unsigned int srcId, unsigned int dstId, CDMRNetwork* network); void writeXLXLink(unsigned int srcId, unsigned int dstId, CDMRNetwork* network);
}; };