mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-22 08:05:49 +08:00
Add a playout timer to avoid flooding the modem with data.
This commit is contained in:
16
Modem.cpp
16
Modem.cpp
@@ -103,6 +103,7 @@ m_rxYSFData(1000U, "Modem RX YSF"),
|
|||||||
m_txYSFData(1000U, "Modem TX YSF"),
|
m_txYSFData(1000U, "Modem TX YSF"),
|
||||||
m_statusTimer(1000U, 0U, 250U),
|
m_statusTimer(1000U, 0U, 250U),
|
||||||
m_inactivityTimer(1000U, 0U, 1500U),
|
m_inactivityTimer(1000U, 0U, 1500U),
|
||||||
|
m_playoutTimer(1000U, 0U, 10U),
|
||||||
m_dstarSpace(0U),
|
m_dstarSpace(0U),
|
||||||
m_dmrSpace1(0U),
|
m_dmrSpace1(0U),
|
||||||
m_dmrSpace2(0U),
|
m_dmrSpace2(0U),
|
||||||
@@ -398,6 +399,11 @@ void CModem::clock(unsigned int ms)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only feed data to the modem if the playout timer has expired
|
||||||
|
m_playoutTimer.clock(ms);
|
||||||
|
if (!m_playoutTimer.hasExpired())
|
||||||
|
return;
|
||||||
|
|
||||||
if (m_dstarSpace > 1U && !m_txDStarData.isEmpty()) {
|
if (m_dstarSpace > 1U && !m_txDStarData.isEmpty()) {
|
||||||
unsigned char buffer[4U];
|
unsigned char buffer[4U];
|
||||||
m_txDStarData.peek(buffer, 4U);
|
m_txDStarData.peek(buffer, 4U);
|
||||||
@@ -429,6 +435,8 @@ void CModem::clock(unsigned int ms)
|
|||||||
int ret = m_serial.write(m_buffer, len);
|
int ret = m_serial.write(m_buffer, len);
|
||||||
if (ret != int(len))
|
if (ret != int(len))
|
||||||
LogWarning("Error when writing D-Star data to the MMDVM");
|
LogWarning("Error when writing D-Star data to the MMDVM");
|
||||||
|
|
||||||
|
m_playoutTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -444,6 +452,8 @@ void CModem::clock(unsigned int ms)
|
|||||||
if (ret != int(len))
|
if (ret != int(len))
|
||||||
LogWarning("Error when writing DMR data to the MMDVM");
|
LogWarning("Error when writing DMR data to the MMDVM");
|
||||||
|
|
||||||
|
m_playoutTimer.start();
|
||||||
|
|
||||||
m_dmrSpace1--;
|
m_dmrSpace1--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,6 +469,8 @@ void CModem::clock(unsigned int ms)
|
|||||||
if (ret != int(len))
|
if (ret != int(len))
|
||||||
LogWarning("Error when writing DMR data to the MMDVM");
|
LogWarning("Error when writing DMR data to the MMDVM");
|
||||||
|
|
||||||
|
m_playoutTimer.start();
|
||||||
|
|
||||||
m_dmrSpace2--;
|
m_dmrSpace2--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,6 +486,8 @@ void CModem::clock(unsigned int ms)
|
|||||||
if (ret != int(len))
|
if (ret != int(len))
|
||||||
LogWarning("Error when writing YSF data to the MMDVM");
|
LogWarning("Error when writing YSF data to the MMDVM");
|
||||||
|
|
||||||
|
m_playoutTimer.start();
|
||||||
|
|
||||||
m_ysfSpace--;
|
m_ysfSpace--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -802,6 +816,8 @@ bool CModem::setConfig()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_playoutTimer.start();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
Modem.h
1
Modem.h
@@ -100,6 +100,7 @@ private:
|
|||||||
CRingBuffer<unsigned char> m_txYSFData;
|
CRingBuffer<unsigned char> m_txYSFData;
|
||||||
CTimer m_statusTimer;
|
CTimer m_statusTimer;
|
||||||
CTimer m_inactivityTimer;
|
CTimer m_inactivityTimer;
|
||||||
|
CTimer m_playoutTimer;
|
||||||
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