diff --git a/DMRIPSC.cpp b/DMRIPSC.cpp index 9688a2c..1eb0b99 100644 --- a/DMRIPSC.cpp +++ b/DMRIPSC.cpp @@ -317,10 +317,21 @@ void CDMRIPSC::clock(unsigned int ms) m_timeoutTimer.start(); m_retryTimer.start(); } else { + /* LogError("Login to the master has failed, stopping IPSC"); m_status = DISCONNECTED; m_timeoutTimer.stop(); m_retryTimer.stop(); + */ + + /* Once the modem death spiral has been prevented in Modem.cpp + the IPSC sometimes times out and reaches here. + We want it to reconnect so... */ + + LogError("Login to the master has failed, retrying ..."); + close(); + open(); + return; } } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { switch (m_status) { diff --git a/Modem.cpp b/Modem.cpp index f34ac4a..a03e5f3 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -156,6 +156,10 @@ bool CModem::open() if (!ret) { m_serial.close(); return false; + } else { + /* Stopping the inactivity timer here when a firmware version has been + successfuly read prevents the death spiral of "no reply from modem..." */ + m_inactivityTimer.stop(); } ret = setFrequency();