Put in modem inactivity timer and resetting code.

This commit is contained in:
Jonathan Naylor
2016-02-16 17:31:28 +00:00
parent f86a075d10
commit 07d07a5397
2 changed files with 18 additions and 2 deletions

View File

@@ -96,6 +96,7 @@ m_txDMRData2(1000U, "Modem TX DMR2"),
m_rxYSFData(1000U, "Modem RX YSF"), m_rxYSFData(1000U, "Modem RX YSF"),
m_txYSFData(1000U, "Modem TX YSF"), m_txYSFData(1000U, "Modem TX YSF"),
m_statusTimer(1000U, 0U, 100U), m_statusTimer(1000U, 0U, 100U),
m_inactivityTimer(1000U, 0U, 1500U),
m_dstarSpace(0U), m_dstarSpace(0U),
m_dmrSpace1(0U), m_dmrSpace1(0U),
m_dmrSpace2(0U), m_dmrSpace2(0U),
@@ -147,6 +148,7 @@ bool CModem::open()
} }
m_statusTimer.start(); m_statusTimer.start();
m_inactivityTimer.start();
return true; return true;
} }
@@ -160,6 +162,19 @@ void CModem::clock(unsigned int ms)
m_statusTimer.start(); m_statusTimer.start();
} }
m_inactivityTimer.clock(ms);
if (m_inactivityTimer.hasExpired()) {
LogError("No reply from the modem for some time, resetting it");
close();
while (!open()) {
#if defined(_WIN32) || defined(_WIN64)
::Sleep(1000UL); // 1s
#else
::sleep(1UL); // 1s
#endif
}
}
unsigned int length; unsigned int length;
RESP_TYPE_MMDVM type = getResponse(m_buffer, length); RESP_TYPE_MMDVM type = getResponse(m_buffer, length);
@@ -331,6 +346,8 @@ void CModem::clock(unsigned int ms)
m_dmrSpace1 = m_buffer[7U]; m_dmrSpace1 = m_buffer[7U];
m_dmrSpace2 = m_buffer[8U]; m_dmrSpace2 = m_buffer[8U];
m_ysfSpace = m_buffer[9U]; m_ysfSpace = m_buffer[9U];
m_inactivityTimer.start();
// LogMessage("status=%02X, tx=%d, space=%u,%u,%u,%u", m_buffer[5U], int(m_tx), m_dstarSpace, m_dmrSpace1, m_dmrSpace2, m_ysfSpace); // LogMessage("status=%02X, tx=%d, space=%u,%u,%u,%u", m_buffer[5U], int(m_tx), m_dstarSpace, m_dmrSpace1, m_dmrSpace2, m_ysfSpace);
} }
break; break;
@@ -447,8 +464,6 @@ void CModem::close()
{ {
::LogMessage("Closing the MMDVM"); ::LogMessage("Closing the MMDVM");
delete[] m_buffer;
m_serial.close(); m_serial.close();
} }

View File

@@ -89,6 +89,7 @@ private:
CRingBuffer<unsigned char> m_rxYSFData; CRingBuffer<unsigned char> m_rxYSFData;
CRingBuffer<unsigned char> m_txYSFData; CRingBuffer<unsigned char> m_txYSFData;
CTimer m_statusTimer; CTimer m_statusTimer;
CTimer m_inactivityTimer;
unsigned int m_dstarSpace; unsigned int m_dstarSpace;
unsigned int m_dmrSpace1; unsigned int m_dmrSpace1;
unsigned int m_dmrSpace2; unsigned int m_dmrSpace2;