From 282bffb3c4a959a88b72da64b5c227c0d5c4e5ac Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 18 Jun 2018 21:49:38 +0100 Subject: [PATCH] Fix underflow bug when transmitting POCSAG data. --- POCSAGControl.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/POCSAGControl.cpp b/POCSAGControl.cpp index aa38ff6..9289c37 100644 --- a/POCSAGControl.cpp +++ b/POCSAGControl.cpp @@ -164,14 +164,6 @@ void CPOCSAGControl::clock(unsigned int ms) m_output.push_back(POCSAG_IDLE_WORD); } } else if (m_state == PS_SENDING) { - uint32_t w1 = m_buffer.front(); - m_buffer.pop_front(); - uint32_t w2 = m_buffer.front(); - m_buffer.pop_front(); - - m_output.push_back(w1); - m_output.push_back(w2); - if (m_buffer.empty()) { bool ret = processData(); if (ret) { @@ -181,6 +173,25 @@ void CPOCSAGControl::clock(unsigned int ms) } else { m_state = PS_ENDING; } + } else { + uint32_t w1 = m_buffer.front(); + m_buffer.pop_front(); + uint32_t w2 = m_buffer.front(); + m_buffer.pop_front(); + + m_output.push_back(w1); + m_output.push_back(w2); + + if (m_buffer.empty()) { + bool ret = processData(); + if (ret) { + m_display->writePOCSAG(m_ric, m_text); + m_state = PS_WAITING; + m_count++; + } else { + m_state = PS_ENDING; + } + } } } else { // PS_ENDING m_output.push_back(POCSAG_IDLE_WORD);