From e1855057708468bc5383d948be70da7179730231 Mon Sep 17 00:00:00 2001 From: Serhii Kostiuk Date: Thu, 6 Aug 2020 14:06:19 +0300 Subject: Quectel EG25-G Delta Radio Firmware Upgrade support - libmts-io implementation Added waitResponse overloads to the public interface of ICellularRadio. --- include/mts/MTS_IO_CellularRadio.h | 7 +++++++ include/mts/MTS_IO_ICellularRadio.h | 11 +++++++++++ src/MTS_IO_CellularRadio.cpp | 8 ++++++++ src/MTS_IO_ICellularRadio.cpp | 18 ++++++++++++++++++ 4 files changed, 44 insertions(+) diff --git a/include/mts/MTS_IO_CellularRadio.h b/include/mts/MTS_IO_CellularRadio.h index ab6e00a..2b03d8f 100644 --- a/include/mts/MTS_IO_CellularRadio.h +++ b/include/mts/MTS_IO_CellularRadio.h @@ -126,6 +126,13 @@ namespace MTS { int32_t timeoutMillis = 100, const char& ESC = ICellularRadio::CR) override; + //! Wait for response from the radio without sending any data to it + virtual std::string waitResponse(const std::vector& vBail = DEFAULT_BAIL_STRINGS, + int32_t timeoutMillis = 100) override; + + //! Wait for response from the radio without sending any data to it + virtual std::string waitResponse(IsNeedMoreData& isNeedMoreData, + int32_t timeoutMillis = 100) override; protected: diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h index e4456cc..61ffd20 100644 --- a/include/mts/MTS_IO_ICellularRadio.h +++ b/include/mts/MTS_IO_ICellularRadio.h @@ -88,6 +88,9 @@ namespace MTS { static std::string waitResponse(MTS::AutoPtr& apIo, IsNeedMoreData& isNeedMoreData, int32_t timeoutMillis = 100); + static std::string waitResponse(MTS::AutoPtr& apIo, + const std::vector& vBail = DEFAULT_BAIL_STRINGS, + int32_t timeoutMillis = 100); static CODE test(MTS::AutoPtr& apIo, uint32_t timeoutSeconds = 30); static std::string extractModelFromResult(const std::string& sResult); @@ -551,6 +554,14 @@ namespace MTS { int32_t timeoutMillis = 100, const char& ESC = CR) = 0; + //! Wait for response from the radio without sending any data to it + virtual std::string waitResponse(const std::vector& vBail = DEFAULT_BAIL_STRINGS, + int32_t timeoutMillis = 100) = 0; + + //! Wait for response from the radio without sending any data to it + virtual std::string waitResponse(IsNeedMoreData& isNeedMoreData, + int32_t timeoutMillis = 100) = 0; + }; } } diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp index 49a2b32..ce95929 100644 --- a/src/MTS_IO_CellularRadio.cpp +++ b/src/MTS_IO_CellularRadio.cpp @@ -1133,6 +1133,14 @@ std::string CellularRadio::sendCommand(const std::string& sCmd, MTS::IO::Cellula return ICellularRadio::sendCommand(m_apIo, sCmd, isNeedMoreData, timeoutMillis, ESC); } +std::string CellularRadio::waitResponse(const std::vector& vBail, int32_t timeoutMillis) { + return ICellularRadio::waitResponse(m_apIo, vBail, timeoutMillis); +} + +std::string CellularRadio::waitResponse(ICellularRadio::IsNeedMoreData& isNeedMoreData, int32_t timeoutMillis) { + return ICellularRadio::waitResponse(m_apIo, isNeedMoreData, timeoutMillis); +} + ICellularRadio::CODE CellularRadio::sendData(const char* pData, size_t nBytes) { if(m_apIo.isNull()) { printError("RADIO| IO is not set in sendData"); diff --git a/src/MTS_IO_ICellularRadio.cpp b/src/MTS_IO_ICellularRadio.cpp index 69f731a..73737c7 100644 --- a/src/MTS_IO_ICellularRadio.cpp +++ b/src/MTS_IO_ICellularRadio.cpp @@ -379,6 +379,24 @@ std::string MTS::IO::ICellularRadio::sendCommand(MTS::AutoPtr& apIo, const std::vector& vBail, int32_t timeoutMillis) { + IsNeedMoreData isNeedMoreData = [&vBail](const std::string&, const std::string& allData)->bool { + for(size_t i = 0; i < vBail.size(); i++) { + const std::string& sBail = vBail[i]; + if(sBail.size() > 0) { + if(allData.find(sBail) != std::string::npos) { + //Return when bail string is found + printTrace("RADIO| Found bail string [%s]", sBail.c_str()); + return false; + } + } + } + return true; + }; + + return waitResponse(apIo, isNeedMoreData, timeoutMillis); +} + std::string MTS::IO::ICellularRadio::waitResponse(MTS::AutoPtr& apIo, MTS::IO::ICellularRadio::IsNeedMoreData& isNeedMoreData, int32_t timeoutMillis) { bool done = false; const uint32_t capacity = 1024; -- cgit v1.2.3