summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerhii Kostiuk <serhii.o.kostiuk@globallogic.com>2020-08-06 14:06:19 +0300
committerSerhii Kostiuk <serhii.o.kostiuk@globallogic.com>2020-08-06 14:06:19 +0300
commite1855057708468bc5383d948be70da7179730231 (patch)
tree87d441aa1ae2b7e138129c340463d4e64ffd04fe
parent96445eaa166dd8f4ba99014f5eea2c1146b9db80 (diff)
downloadlibmts-io-e1855057708468bc5383d948be70da7179730231.tar.gz
libmts-io-e1855057708468bc5383d948be70da7179730231.tar.bz2
libmts-io-e1855057708468bc5383d948be70da7179730231.zip
Quectel EG25-G Delta Radio Firmware Upgrade support - libmts-io implementation
Added waitResponse overloads to the public interface of ICellularRadio.
-rw-r--r--include/mts/MTS_IO_CellularRadio.h7
-rw-r--r--include/mts/MTS_IO_ICellularRadio.h11
-rw-r--r--src/MTS_IO_CellularRadio.cpp8
-rw-r--r--src/MTS_IO_ICellularRadio.cpp18
4 files changed, 44 insertions, 0 deletions
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<std::string>& 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<MTS::IO::Connection>& apIo,
IsNeedMoreData& isNeedMoreData,
int32_t timeoutMillis = 100);
+ static std::string waitResponse(MTS::AutoPtr<MTS::IO::Connection>& apIo,
+ const std::vector<std::string>& vBail = DEFAULT_BAIL_STRINGS,
+ int32_t timeoutMillis = 100);
static CODE test(MTS::AutoPtr<MTS::IO::Connection>& 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<std::string>& 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<std::string>& 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<MTS::IO::Connectio
return waitResponse(apIo, isNeedMoreData, timeoutMillis);
}
+std::string MTS::IO::ICellularRadio::waitResponse(MTS::AutoPtr<MTS::IO::Connection>& apIo, const std::vector<std::string>& 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<MTS::IO::Connection>& apIo, MTS::IO::ICellularRadio::IsNeedMoreData& isNeedMoreData, int32_t timeoutMillis) {
bool done = false;
const uint32_t capacity = 1024;