Improve network data holdoff.

This commit is contained in:
Jonathan Naylor 2016-01-14 20:14:18 +00:00
parent f165b3ca89
commit 34672a02ba
4 changed files with 19 additions and 5 deletions

View file

@ -43,7 +43,7 @@ unsigned char CDMRSlot::m_id2 = 0U;
CDMRSlot::CDMRSlot(unsigned int slotNo, unsigned int timeout) : CDMRSlot::CDMRSlot(unsigned int slotNo, unsigned int timeout) :
m_slotNo(slotNo), m_slotNo(slotNo),
m_radioQueue(1000U), m_radioQueue(1000U),
m_networkQueue(100U), m_networkQueue(1000U),
m_state(SS_LISTENING), m_state(SS_LISTENING),
m_embeddedLC(), m_embeddedLC(),
m_lc(NULL), m_lc(NULL),
@ -349,8 +349,10 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
if (m_state != SS_RELAYING_NETWORK) { if (m_state != SS_RELAYING_NETWORK) {
CFullLC fullLC; CFullLC fullLC;
m_lc = fullLC.decode(data + 2U, DT_VOICE_LC_HEADER); m_lc = fullLC.decode(data + 2U, DT_VOICE_LC_HEADER);
if (m_lc == NULL) if (m_lc == NULL) {
LogMessage("DMR Slot %u, bad LC received, substituting", m_slotNo);
m_lc = new CLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId()); m_lc = new CLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId());
}
// Regenerate the LC // Regenerate the LC
fullLC.encode(*m_lc, data + 2U, DT_VOICE_LC_HEADER); fullLC.encode(*m_lc, data + 2U, DT_VOICE_LC_HEADER);
@ -510,6 +512,8 @@ void CDMRSlot::clock(unsigned int ms)
m_playoutTimer.clock(ms); m_playoutTimer.clock(ms);
if (m_playoutTimer.isRunning() && m_playoutTimer.hasExpired()) { if (m_playoutTimer.isRunning() && m_playoutTimer.hasExpired()) {
m_playoutTimer.stop();
while (!m_networkQueue.isEmpty()) { while (!m_networkQueue.isEmpty()) {
unsigned char len = 0U; unsigned char len = 0U;
m_networkQueue.getData(&len, 1U); m_networkQueue.getData(&len, 1U);
@ -550,11 +554,17 @@ void CDMRSlot::writeRadioQueue(const unsigned char *data)
void CDMRSlot::writeNetworkQueue(const unsigned char *data) void CDMRSlot::writeNetworkQueue(const unsigned char *data)
{ {
// If the timeout has expired, send nothing // If the timeout has expired, send nothing
if (!m_timeoutTimer.isRunning() || !m_timeoutTimer.hasExpired()) { if (m_timeoutTimer.isRunning() && m_timeoutTimer.hasExpired())
return;
if (m_playoutTimer.isRunning() && !m_playoutTimer.hasExpired()) {
unsigned char len = DMR_FRAME_LENGTH_BYTES + 2U; unsigned char len = DMR_FRAME_LENGTH_BYTES + 2U;
m_networkQueue.addData(&len, 1U); m_networkQueue.addData(&len, 1U);
m_networkQueue.addData(data, len); m_networkQueue.addData(data, len);
} else {
unsigned char len = DMR_FRAME_LENGTH_BYTES + 2U;
m_radioQueue.addData(&len, 1U);
m_radioQueue.addData(data, len);
} }
} }

View file

@ -183,6 +183,7 @@
<ClInclude Include="Timer.h" /> <ClInclude Include="Timer.h" />
<ClInclude Include="UDPSocket.h" /> <ClInclude Include="UDPSocket.h" />
<ClInclude Include="Utils.h" /> <ClInclude Include="Utils.h" />
<ClInclude Include="Version.h" />
<ClInclude Include="YSFDefines.h" /> <ClInclude Include="YSFDefines.h" />
<ClInclude Include="YSFEcho.h" /> <ClInclude Include="YSFEcho.h" />
</ItemGroup> </ItemGroup>

View file

@ -128,6 +128,9 @@
<ClInclude Include="YSFEcho.h"> <ClInclude Include="YSFEcho.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Version.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="BPTC19696.cpp"> <ClCompile Include="BPTC19696.cpp">

View file

@ -19,6 +19,6 @@
#if !defined(VERSION_H) #if !defined(VERSION_H)
#define VERSION_H #define VERSION_H
const char* VERSION = "20160113"; const char* VERSION = "20160114";
#endif #endif