From 40def7dd7073d1f64e09b3a677a081646193d77d Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 16 Mar 2016 08:08:28 +0000 Subject: [PATCH] Drain the serial queue of invalid data. --- Modem.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Modem.cpp b/Modem.cpp index 10f577a..9d673bd 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -867,19 +867,21 @@ RESP_TYPE_MMDVM CModem::getResponse(unsigned char *buffer, unsigned int& length) assert(buffer != NULL); // Get the start of the frame or nothing at all - int ret = m_serial.read(buffer + 0U, 1U); - if (ret < 0) { - LogError("Error when reading from the modem"); - return RTM_ERROR; + for (;;) { + int ret = m_serial.read(buffer + 0U, 1U); + if (ret < 0) { + LogError("Error when reading from the modem"); + return RTM_ERROR; + } + + if (ret == 0) + return RTM_TIMEOUT; + + if (buffer[0U] == MMDVM_FRAME_START) + break; } - if (ret == 0) - return RTM_TIMEOUT; - - if (buffer[0U] != MMDVM_FRAME_START) - return RTM_TIMEOUT; - - ret = m_serial.read(buffer + 1U, 1U); + int ret = m_serial.read(buffer + 1U, 1U); if (ret < 0) { LogError("Error when reading from the modem"); return RTM_ERROR;