mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 23:45:49 +08:00
Put in modem inactivity timer and resetting code.
This commit is contained in:
19
Modem.cpp
19
Modem.cpp
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
Modem.h
1
Modem.h
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user