diff --git a/.gitignore b/.gitignore index 378186f..bd2fceb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ Debug Release x64 +*.opendb *.bak *.obj *~ diff --git a/HomebrewDMRIPSC.cpp b/HomebrewDMRIPSC.cpp index 7e8a2a6..286070c 100644 --- a/HomebrewDMRIPSC.cpp +++ b/HomebrewDMRIPSC.cpp @@ -263,10 +263,19 @@ void CHomebrewDMRIPSC::clock(unsigned int ms) m_rxData.addData(&len, 1U); m_rxData.addData(m_buffer, len); } else if (::memcmp(m_buffer, "MSTNAK", 6U) == 0) { - LogError("Login to the master has failed"); - m_status = DISCONNECTED; // XXX - m_timeoutTimer.stop(); - m_retryTimer.stop(); + if (m_status == RUNNING) { + LogWarning("The master is restarting, logging back in"); + m_status = WAITING_LOGIN; + m_timeoutTimer.start(); + m_retryTimer.start(); + m_pingTimer.stop(); + } else { + LogError("Login to the master has failed"); + m_status = DISCONNECTED; + m_timeoutTimer.stop(); + m_retryTimer.stop(); + m_pingTimer.stop(); + } } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { switch (m_status) { case WAITING_LOGIN: diff --git a/Modem.cpp b/Modem.cpp index a09cc1e..fb3f1f9 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -320,6 +320,14 @@ void CModem::clock(unsigned int ms) if (adcOverflow) LogWarning("MMDVM ADC levels have overflowed"); + bool rxOverflow = (m_buffer[5U] & 0x04U) == 0x04U; + if (rxOverflow) + LogWarning("RX buffer has overflowed"); + + bool txOverflow = (m_buffer[5U] & 0x08U) == 0x08U; + if (txOverflow) + LogWarning("TX buffer has overflowed"); + m_dstarSpace = m_buffer[6U]; m_dmrSpace1 = m_buffer[7U]; m_dmrSpace2 = m_buffer[8U];