diff --git a/modem/Modem.cpp b/modem/Modem.cpp index 58a6c3d9..f16476b9 100644 --- a/modem/Modem.cpp +++ b/modem/Modem.cpp @@ -1409,6 +1409,8 @@ void Modem::reset() close(); + ::memset(m_buffer, 0x00U, BUFFER_LENGTH); + Thread::sleep(2000U); // 2s while (!open()) { Thread::sleep(5000U); // 5s @@ -1440,7 +1442,10 @@ bool Modem::getFirmwareVersion() for (uint32_t count = 0U; count < MAX_RESPONSES; count++) { Thread::sleep(10U); - RESP_TYPE_DVM resp = getResponse(); + RESP_TYPE_DVM resp = getResponse(true); + + if (resp == RTM_ERROR) + continue; if (resp == RTM_OK && m_buffer[2U] == CMD_GET_VERSION) { LogMessage(LOG_MODEM, "Protocol: %02x, CPU: %02X", m_buffer[3U], m_buffer[4U]); @@ -1727,7 +1732,10 @@ bool Modem::readFlash() for (uint32_t count = 0U; count < MAX_RESPONSES; count++) { Thread::sleep(10U); - RESP_TYPE_DVM resp = getResponse(); + RESP_TYPE_DVM resp = getResponse(true); + + if (resp == RTM_ERROR) + continue; if (resp == RTM_OK && m_buffer[2U] == CMD_NAK) { LogWarning(LOG_MODEM, "Modem::readFlash(), old modem that doesn't support flash commands?"); @@ -1915,8 +1923,9 @@ void Modem::printDebug(const uint8_t* buffer, uint16_t len) /// /// Helper to get the raw response packet from modem. /// +/// Ignores invalid frame start and does not report as error. /// Response type from modem. -RESP_TYPE_DVM Modem::getResponse() +RESP_TYPE_DVM Modem::getResponse(bool noReportInvalid) { m_rspDoubleLength = false; @@ -1937,10 +1946,12 @@ RESP_TYPE_DVM Modem::getResponse() } if (m_buffer[0U] != DVM_FRAME_START) { - LogDebug(LOG_MODEM, "getResponse(), first byte not a frame start; byte = %02X", m_buffer[0U]); - if (m_dumpModemStatus) { + if (!noReportInvalid) { + LogError(LOG_MODEM, "Modem::getResponse(), illegal response, first byte not a frame start; byte = %02X", m_buffer[0U]); Utils::dump(1U, "Modem Invalid Frame", m_buffer, 250U); } + + ::memset(m_buffer, 0x00U, BUFFER_LENGTH); return RTM_ERROR; } diff --git a/modem/Modem.h b/modem/Modem.h index 942b790d..02d8dadc 100644 --- a/modem/Modem.h +++ b/modem/Modem.h @@ -441,7 +441,7 @@ namespace modem void printDebug(const uint8_t* buffer, uint16_t len); /// Helper to get the raw response packet from modem. - RESP_TYPE_DVM getResponse(); + RESP_TYPE_DVM getResponse(bool noReportInvalid = false); public: /// Flag indicating if modem trace is enabled.