From c884d6cbebf99bb18edeba95fcb1a4191f538f01 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Thu, 25 Jul 2019 17:44:41 +0300 Subject: MTX-2891 mpower: partial build fix --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8472075..5cfc70f 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ $(APPNAME).a: $(OBJS) $(AR) -rs $@ $? $(SONAME): $(OBJS) - $(CC) $(LDFLAGS) -o $@ $? $(LDLIBS) + $(CC) $(LDFLAGS) -o $@ $+ $(LDLIBS) # Handle header dependencies DEPS = $(OBJS:.o=.d) -- cgit v1.2.3 From 59bd86588878af7e3f541902e8f2ed3d125dde81 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Thu, 25 Jul 2019 17:57:07 +0300 Subject: MTX-2891 mpower: 2-3-4g switch implementation for Telit --- include/mts/MTS_IO_ICellularRadio.h | 12 ++++ include/mts/MTS_IO_QuectelRadio.h | 4 ++ include/mts/MTS_IO_TelitRadio.h | 5 ++ src/MTS_IO_QuectelRadio.cpp | 12 ++++ src/MTS_IO_TelitRadio.cpp | 130 ++++++++++++++++++++++++++++++++++++ 5 files changed, 163 insertions(+) diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h index e2bf652..29f710a 100644 --- a/include/mts/MTS_IO_ICellularRadio.h +++ b/include/mts/MTS_IO_ICellularRadio.h @@ -68,6 +68,14 @@ namespace MTS { RADIO_NETWORK_MODE_LTE_ONLY }; + enum PREFERRED_NETWORKS : uint8_t { + PREFERRED_NETWORK_NA = 0, // NOT AVAILABLE + PREFERRED_NETWORK_2G = 1 << 0, // GSM + PREFERRED_NETWORK_3G = 1 << 1, // WCDMA + PREFERRED_NETWORK_4G = 1 << 2, // LTE + PREFERRED_NETWORK_5G = 1 << 3 // 5G + }; + static CODE convertModelToType(const std::string& sModel, std::string& sType); static CODE convertModelToMtsShortCode(const std::string& sModel, std::string& sCode, ICellularRadio *radioObj = NULL); static CODE convertServiceDomainToString(SERVICEDOMAIN eSd, std::string& sSd); @@ -220,6 +228,10 @@ namespace MTS { virtual CODE getImsi(std::string& sImsi) = 0; virtual CODE getSimStatus(std::string& sSimStatus) = 0; + virtual CODE getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) = 0; + virtual CODE getPreferredNetworks(PREFERRED_NETWORKS &networks) = 0; + virtual CODE setPreferredNetworks(PREFERRED_NETWORKS networks) = 0; + /** * @brief getSimStatusSummary - get summary on the SIM card status * (if there is a SIM card inserted, is it locked, etc). diff --git a/include/mts/MTS_IO_QuectelRadio.h b/include/mts/MTS_IO_QuectelRadio.h index 3b1ba5a..8b8b92a 100644 --- a/include/mts/MTS_IO_QuectelRadio.h +++ b/include/mts/MTS_IO_QuectelRadio.h @@ -44,6 +44,10 @@ namespace MTS { CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) override; CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) override; + CODE getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) override; + CODE getPreferredNetworks(PREFERRED_NETWORKS &networks) override; + CODE setPreferredNetworks(PREFERRED_NETWORKS networks) override; + protected: QuectelRadio(const std::string& sName, const std::string& sRadioPort); diff --git a/include/mts/MTS_IO_TelitRadio.h b/include/mts/MTS_IO_TelitRadio.h index 6382696..7b04125 100644 --- a/include/mts/MTS_IO_TelitRadio.h +++ b/include/mts/MTS_IO_TelitRadio.h @@ -42,6 +42,10 @@ namespace MTS { CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) override; CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) override; + CODE getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) override; + CODE getPreferredNetworks(PREFERRED_NETWORKS &networks) override; + CODE setPreferredNetworks(PREFERRED_NETWORKS networks) override; + protected: TelitRadio(const std::string& sName, const std::string& sRadioPort); @@ -53,6 +57,7 @@ namespace MTS { private: virtual CODE getSimLockAttempts(int& iAttemptsPin, int& iAttemptsPuk, const std::string& sLockStatus); + static ICellularRadio::PREFERRED_NETWORKS preferredNetwork(PREFERRED_NETWORKS prefNetwork, int wds); }; } diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index f3227a5..c603d08 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -610,3 +610,15 @@ ICellularRadio::CODE QuectelRadio::setRadioNetworkMode(RADIO_NETWORK_MODE mode) } return SUCCESS; } + +ICellularRadio::CODE QuectelRadio::getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) { + return SUCCESS; +} + +ICellularRadio::CODE QuectelRadio::getPreferredNetworks(PREFERRED_NETWORKS &networks) { + return SUCCESS; +} + +ICellularRadio::CODE QuectelRadio::setPreferredNetworks(PREFERRED_NETWORKS networks) { + return SUCCESS; +} diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 340c0ac..2750b98 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -546,6 +546,7 @@ ICellularRadio::CODE TelitRadio::getRadioNetworkMode(RADIO_NETWORK_MODE &mode) printDebug("%s| AT+WS46? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); return FAILURE; } + // TODO: replace with MTS::Text::parse switch (stoi(MTS::Text::split(cmdResult, ':')[1])) { case 12: mode = ICellularRadio::RADIO_NETWORK_MODE_GSM_ONLY; break; case 22: mode = ICellularRadio::RADIO_NETWORK_MODE_UMTS_ONLY; break; @@ -664,3 +665,132 @@ ICellularRadio::CODE TelitRadio::getSimLockAttempts(int& iAttemptsPin, int& iAtt return SUCCESS; } + +ICellularRadio::CODE TelitRadio::getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) { + networks = PREFERRED_NETWORK_NA; + std::string sCmd("AT+WS46=?"); + std::string cmdResult = sendCommand(sCmd); + if (cmdResult.find("+WS46:") == std::string::npos) { + printDebug("%s| AT+WS46=? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + return FAILURE; + } + + if (cmdResult.find('(') == std::string::npos) { + printDebug("AT+WS46: error responce %s", cmdResult.c_str()); + return FAILURE; + } + std::string s = MTS::Text::split(cmdResult, '(')[1]; + s = MTS::Text::split(s, ')')[0]; + std::vectorv = MTS::Text::split(s, ','); + std::vector m; + for(const auto &it : v) + { + if (it.find("-") != std::string::npos) { + const std::vector &r = MTS::Text::split(it, "-"); + int begin, end; + if ( ! MTS::Text::parse(begin, r[0]) || ! MTS::Text::parse(end, r[1])) { + printDebug("AT+WS46: error parsing network mode range: %s-%s", r[0].c_str(), r[1].c_str()); + return FAILURE; + } + for (int i = begin; i<=end; ++i) { + m.push_back(i); + if (m.size()>1024) + break; + } + } else { + int v; + if ( ! MTS::Text::parse(v, it)) { + printDebug("AT+WS46: error parsing network mode: %s", it.c_str()); + return FAILURE; + } + m.push_back(v); + } + } + if (m.size()>1024) { + printDebug("AT+WS46: network modes count overflow, parsing error"); + return FAILURE; + } + + // Now m contains all network modes + for(const auto &it : m) { + networks = preferredNetwork(networks, it); + } + + return SUCCESS; +} + +ICellularRadio::CODE TelitRadio::getPreferredNetworks(PREFERRED_NETWORKS &networks) { + networks = PREFERRED_NETWORK_NA; + std::string sCmd("AT+WS46?"); + std::string cmdResult = sendCommand(sCmd); + if (cmdResult.find("+WS46:") == std::string::npos) { + printDebug("%s| AT+WS46? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + return FAILURE; + } + int wds; + size_t cursor; + if (MTS::Text::parse(wds, MTS::Text::trim(MTS::Text::getLine(MTS::Text::split(cmdResult, ':')[1], 0, cursor)))) { + networks = preferredNetwork(networks, wds); + return SUCCESS; + } + return FAILURE; +} + +ICellularRadio::CODE TelitRadio::setPreferredNetworks(PREFERRED_NETWORKS networks) { + int wds = 0; + // 3GPP TS 27.007 + // https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1515 + switch (static_cast(networks)) { + case PREFERRED_NETWORK_2G : wds = 12; break; + case PREFERRED_NETWORK_3G : wds = 22; break; + case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G : wds = 25; break; + case PREFERRED_NETWORK_4G : wds = 28; break; + case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G : wds = 29; break; + case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G : wds = 30; break; + case PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G : wds = 31; break; + case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 35; break; + case PREFERRED_NETWORK_5G: wds = 36; break; + case PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 37; break; + case PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 38; break; + case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 39; break; + case PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G: wds = 40; break; + case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G: wds = 41; break; + case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_5G: wds = 42; break; + } + std::string sCmd("AT+WS46="); + sCmd += std::to_string(wds); + std::string cmdResult = sendCommand(sCmd); + if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { + printDebug("%s| AT+WS46= returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + return FAILURE; + } + return SUCCESS; +} + +ICellularRadio::PREFERRED_NETWORKS TelitRadio::preferredNetwork(PREFERRED_NETWORKS prefNetwork, int wds) +{ + int result = prefNetwork; + // 3GPP TS 27.007 + // https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1515 + switch (wds) { + case 12: result |= PREFERRED_NETWORK_2G; break; + case 22: result |= PREFERRED_NETWORK_3G; break; + case 25: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G; break; + case 28: result |= PREFERRED_NETWORK_4G; break; + case 29: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G; break; + case 30: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G; break; + case 31: result |= PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G; break; + case 35: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; + case 36: result |= PREFERRED_NETWORK_5G; break; + case 37: result |= PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; + case 38: result |= PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; + case 39: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; + case 40: result |= PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G; break; + case 41: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G; break; + case 42: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_5G; break; + default: + printDebug("AT+WS46: unhandled network mode: %d", wds); + break; + } + return static_cast(result); +} -- cgit v1.2.3 From 6c92f7176e69daaa56f8274f0059ccf70beb4fe8 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Fri, 26 Jul 2019 12:19:15 +0300 Subject: MTX-2891 mpower 2-3-4g switch: build and treat warnings as errors --- Makefile | 3 +-- src/MTS_IO_QuectelRadio.cpp | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 5cfc70f..8e71154 100644 --- a/Makefile +++ b/Makefile @@ -41,8 +41,7 @@ OBJS += \ src/MTS_IO_SerialConnection.o CC := $(CXX) -#-Werror -CXXFLAGS += -Wall -std=c++0x -fmessage-length=0 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden +CXXFLAGS += -Wall -Werror -std=c++0x -fmessage-length=0 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden CPPFLAGS += -I=/usr/include/jsoncpp -Iinclude LDFLAGS += -s -shared -Wl,-soname,$(APPNAME).so.0 diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index c603d08..aaf30e4 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -215,7 +215,6 @@ CellularRadio::CODE QuectelRadio::getNetworkStatus(Json::Value& jData) { const std::string RAT_WCDMA = "WCDMA"; const std::string RAT_LTE = "LTE"; - int32_t iValue; ACTIVEBAND abnd; SERVICEDOMAIN sd; std::string sValue; -- cgit v1.2.3 From 5ee7664dde53f71fd245db530f985f10f111b28b Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Mon, 29 Jul 2019 13:27:29 +0300 Subject: MTX-2891 mpower 2-3-4g switch refactoring: method names --- include/mts/MTS_IO_EG95Radio.h | 4 +++- include/mts/MTS_IO_ICellularRadio.h | 6 +++--- include/mts/MTS_IO_QuectelRadio.h | 4 ---- include/mts/MTS_IO_TelitRadio.h | 6 +++--- src/MTS_IO_EG95Radio.cpp | 13 +++++++++++++ src/MTS_IO_QuectelRadio.cpp | 11 ----------- src/MTS_IO_TelitRadio.cpp | 6 +++--- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/include/mts/MTS_IO_EG95Radio.h b/include/mts/MTS_IO_EG95Radio.h index f3021cc..6077ed1 100644 --- a/include/mts/MTS_IO_EG95Radio.h +++ b/include/mts/MTS_IO_EG95Radio.h @@ -39,7 +39,9 @@ namespace MTS { protected: private: - + CODE getSupportedCellularModes(PREFERRED_NETWORKS &networks) override; + CODE getCellularMode(PREFERRED_NETWORKS &networks) override; + CODE setCellularMode(PREFERRED_NETWORKS networks) override; }; } } diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h index 29f710a..c6dae6c 100644 --- a/include/mts/MTS_IO_ICellularRadio.h +++ b/include/mts/MTS_IO_ICellularRadio.h @@ -228,9 +228,9 @@ namespace MTS { virtual CODE getImsi(std::string& sImsi) = 0; virtual CODE getSimStatus(std::string& sSimStatus) = 0; - virtual CODE getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) = 0; - virtual CODE getPreferredNetworks(PREFERRED_NETWORKS &networks) = 0; - virtual CODE setPreferredNetworks(PREFERRED_NETWORKS networks) = 0; + virtual CODE getSupportedCellularModes(PREFERRED_NETWORKS &networks) = 0; + virtual CODE getCellularMode(PREFERRED_NETWORKS &networks) = 0; + virtual CODE setCellularMode(PREFERRED_NETWORKS networks) = 0; /** * @brief getSimStatusSummary - get summary on the SIM card status diff --git a/include/mts/MTS_IO_QuectelRadio.h b/include/mts/MTS_IO_QuectelRadio.h index 8b8b92a..3b1ba5a 100644 --- a/include/mts/MTS_IO_QuectelRadio.h +++ b/include/mts/MTS_IO_QuectelRadio.h @@ -44,10 +44,6 @@ namespace MTS { CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) override; CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) override; - CODE getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) override; - CODE getPreferredNetworks(PREFERRED_NETWORKS &networks) override; - CODE setPreferredNetworks(PREFERRED_NETWORKS networks) override; - protected: QuectelRadio(const std::string& sName, const std::string& sRadioPort); diff --git a/include/mts/MTS_IO_TelitRadio.h b/include/mts/MTS_IO_TelitRadio.h index 7b04125..f6ce53e 100644 --- a/include/mts/MTS_IO_TelitRadio.h +++ b/include/mts/MTS_IO_TelitRadio.h @@ -42,9 +42,9 @@ namespace MTS { CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) override; CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) override; - CODE getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) override; - CODE getPreferredNetworks(PREFERRED_NETWORKS &networks) override; - CODE setPreferredNetworks(PREFERRED_NETWORKS networks) override; + CODE getSupportedCellularModes(PREFERRED_NETWORKS &networks) override; + CODE getCellularMode(PREFERRED_NETWORKS &networks) override; + CODE setCellularMode(PREFERRED_NETWORKS networks) override; protected: TelitRadio(const std::string& sName, const std::string& sRadioPort); diff --git a/src/MTS_IO_EG95Radio.cpp b/src/MTS_IO_EG95Radio.cpp index 5c9ed69..f85b2c3 100644 --- a/src/MTS_IO_EG95Radio.cpp +++ b/src/MTS_IO_EG95Radio.cpp @@ -45,3 +45,16 @@ ICellularRadio::CODE EG95Radio::setRxDiversity(const Json::Value& jArgs) { return sendBasicCommand(sCmd); } + +ICellularRadio::CODE EG95Radio::getSupportedCellularModes(PREFERRED_NETWORKS &networks) { + networks = static_cast(PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G); + return SUCCESS; +} + +ICellularRadio::CODE EG95Radio::getCellularMode(PREFERRED_NETWORKS &networks) { + return FAILURE; +} + +ICellularRadio::CODE EG95Radio::setCellularMode(PREFERRED_NETWORKS networks) { + return SUCCESS; +} diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index aaf30e4..4c65382 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -610,14 +610,3 @@ ICellularRadio::CODE QuectelRadio::setRadioNetworkMode(RADIO_NETWORK_MODE mode) return SUCCESS; } -ICellularRadio::CODE QuectelRadio::getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) { - return SUCCESS; -} - -ICellularRadio::CODE QuectelRadio::getPreferredNetworks(PREFERRED_NETWORKS &networks) { - return SUCCESS; -} - -ICellularRadio::CODE QuectelRadio::setPreferredNetworks(PREFERRED_NETWORKS networks) { - return SUCCESS; -} diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 2750b98..12776f8 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -666,7 +666,7 @@ ICellularRadio::CODE TelitRadio::getSimLockAttempts(int& iAttemptsPin, int& iAtt return SUCCESS; } -ICellularRadio::CODE TelitRadio::getAvailablePreferredNetworks(PREFERRED_NETWORKS &networks) { +ICellularRadio::CODE TelitRadio::getSupportedCellularModes(PREFERRED_NETWORKS &networks) { networks = PREFERRED_NETWORK_NA; std::string sCmd("AT+WS46=?"); std::string cmdResult = sendCommand(sCmd); @@ -719,7 +719,7 @@ ICellularRadio::CODE TelitRadio::getAvailablePreferredNetworks(PREFERRED_NETWORK return SUCCESS; } -ICellularRadio::CODE TelitRadio::getPreferredNetworks(PREFERRED_NETWORKS &networks) { +ICellularRadio::CODE TelitRadio::getCellularMode(PREFERRED_NETWORKS &networks) { networks = PREFERRED_NETWORK_NA; std::string sCmd("AT+WS46?"); std::string cmdResult = sendCommand(sCmd); @@ -736,7 +736,7 @@ ICellularRadio::CODE TelitRadio::getPreferredNetworks(PREFERRED_NETWORKS &networ return FAILURE; } -ICellularRadio::CODE TelitRadio::setPreferredNetworks(PREFERRED_NETWORKS networks) { +ICellularRadio::CODE TelitRadio::setCellularMode(PREFERRED_NETWORKS networks) { int wds = 0; // 3GPP TS 27.007 // https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1515 -- cgit v1.2.3 From d8b526a82a9b4575adf7dd0d8451d95b6984b02f Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Tue, 30 Jul 2019 10:47:36 +0300 Subject: MTX-2891 mpower 2-3-4g switch refactoring: enums --- include/mts/MTS_IO_EG95Radio.h | 6 +-- include/mts/MTS_IO_ICellularRadio.h | 18 ++++----- include/mts/MTS_IO_TelitRadio.h | 8 ++-- src/MTS_IO_EG95Radio.cpp | 8 ++-- src/MTS_IO_TelitRadio.cpp | 74 ++++++++++++++++++------------------- 5 files changed, 57 insertions(+), 57 deletions(-) diff --git a/include/mts/MTS_IO_EG95Radio.h b/include/mts/MTS_IO_EG95Radio.h index 6077ed1..620a333 100644 --- a/include/mts/MTS_IO_EG95Radio.h +++ b/include/mts/MTS_IO_EG95Radio.h @@ -39,9 +39,9 @@ namespace MTS { protected: private: - CODE getSupportedCellularModes(PREFERRED_NETWORKS &networks) override; - CODE getCellularMode(PREFERRED_NETWORKS &networks) override; - CODE setCellularMode(PREFERRED_NETWORKS networks) override; + CODE getSupportedCellularModes(CELLULAR_MODES &networks) override; + CODE getCellularMode(CELLULAR_MODES &networks) override; + CODE setCellularMode(CELLULAR_MODES networks) override; }; } } diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h index c6dae6c..ce1a91e 100644 --- a/include/mts/MTS_IO_ICellularRadio.h +++ b/include/mts/MTS_IO_ICellularRadio.h @@ -68,12 +68,12 @@ namespace MTS { RADIO_NETWORK_MODE_LTE_ONLY }; - enum PREFERRED_NETWORKS : uint8_t { - PREFERRED_NETWORK_NA = 0, // NOT AVAILABLE - PREFERRED_NETWORK_2G = 1 << 0, // GSM - PREFERRED_NETWORK_3G = 1 << 1, // WCDMA - PREFERRED_NETWORK_4G = 1 << 2, // LTE - PREFERRED_NETWORK_5G = 1 << 3 // 5G + enum CELLULAR_MODES : uint8_t { + CELLULAR_MODE_NA = 0, // NOT AVAILABLE + CELLULAR_MODE_2G = 1 << 0, // GSM + CELLULAR_MODE_3G = 1 << 1, // WCDMA + CELLULAR_MODE_4G = 1 << 2, // LTE + CELLULAR_MODE_5G = 1 << 3 // 5G }; static CODE convertModelToType(const std::string& sModel, std::string& sType); @@ -228,9 +228,9 @@ namespace MTS { virtual CODE getImsi(std::string& sImsi) = 0; virtual CODE getSimStatus(std::string& sSimStatus) = 0; - virtual CODE getSupportedCellularModes(PREFERRED_NETWORKS &networks) = 0; - virtual CODE getCellularMode(PREFERRED_NETWORKS &networks) = 0; - virtual CODE setCellularMode(PREFERRED_NETWORKS networks) = 0; + virtual CODE getSupportedCellularModes(CELLULAR_MODES &networks) = 0; + virtual CODE getCellularMode(CELLULAR_MODES &networks) = 0; + virtual CODE setCellularMode(CELLULAR_MODES networks) = 0; /** * @brief getSimStatusSummary - get summary on the SIM card status diff --git a/include/mts/MTS_IO_TelitRadio.h b/include/mts/MTS_IO_TelitRadio.h index f6ce53e..fc041cf 100644 --- a/include/mts/MTS_IO_TelitRadio.h +++ b/include/mts/MTS_IO_TelitRadio.h @@ -42,9 +42,9 @@ namespace MTS { CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) override; CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) override; - CODE getSupportedCellularModes(PREFERRED_NETWORKS &networks) override; - CODE getCellularMode(PREFERRED_NETWORKS &networks) override; - CODE setCellularMode(PREFERRED_NETWORKS networks) override; + CODE getSupportedCellularModes(CELLULAR_MODES &networks) override; + CODE getCellularMode(CELLULAR_MODES &networks) override; + CODE setCellularMode(CELLULAR_MODES networks) override; protected: TelitRadio(const std::string& sName, const std::string& sRadioPort); @@ -57,7 +57,7 @@ namespace MTS { private: virtual CODE getSimLockAttempts(int& iAttemptsPin, int& iAttemptsPuk, const std::string& sLockStatus); - static ICellularRadio::PREFERRED_NETWORKS preferredNetwork(PREFERRED_NETWORKS prefNetwork, int wds); + static ICellularRadio::CELLULAR_MODES preferredNetwork(CELLULAR_MODES prefNetwork, int wds); }; } diff --git a/src/MTS_IO_EG95Radio.cpp b/src/MTS_IO_EG95Radio.cpp index f85b2c3..88f5724 100644 --- a/src/MTS_IO_EG95Radio.cpp +++ b/src/MTS_IO_EG95Radio.cpp @@ -46,15 +46,15 @@ ICellularRadio::CODE EG95Radio::setRxDiversity(const Json::Value& jArgs) { return sendBasicCommand(sCmd); } -ICellularRadio::CODE EG95Radio::getSupportedCellularModes(PREFERRED_NETWORKS &networks) { - networks = static_cast(PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G); +ICellularRadio::CODE EG95Radio::getSupportedCellularModes(CELLULAR_MODES &networks) { + networks = static_cast(CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_4G); return SUCCESS; } -ICellularRadio::CODE EG95Radio::getCellularMode(PREFERRED_NETWORKS &networks) { +ICellularRadio::CODE EG95Radio::getCellularMode(CELLULAR_MODES &networks) { return FAILURE; } -ICellularRadio::CODE EG95Radio::setCellularMode(PREFERRED_NETWORKS networks) { +ICellularRadio::CODE EG95Radio::setCellularMode(CELLULAR_MODES networks) { return SUCCESS; } diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 12776f8..b20d776 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -666,8 +666,8 @@ ICellularRadio::CODE TelitRadio::getSimLockAttempts(int& iAttemptsPin, int& iAtt return SUCCESS; } -ICellularRadio::CODE TelitRadio::getSupportedCellularModes(PREFERRED_NETWORKS &networks) { - networks = PREFERRED_NETWORK_NA; +ICellularRadio::CODE TelitRadio::getSupportedCellularModes(CELLULAR_MODES &networks) { + networks = CELLULAR_MODE_NA; std::string sCmd("AT+WS46=?"); std::string cmdResult = sendCommand(sCmd); if (cmdResult.find("+WS46:") == std::string::npos) { @@ -719,8 +719,8 @@ ICellularRadio::CODE TelitRadio::getSupportedCellularModes(PREFERRED_NETWORKS &n return SUCCESS; } -ICellularRadio::CODE TelitRadio::getCellularMode(PREFERRED_NETWORKS &networks) { - networks = PREFERRED_NETWORK_NA; +ICellularRadio::CODE TelitRadio::getCellularMode(CELLULAR_MODES &networks) { + networks = CELLULAR_MODE_NA; std::string sCmd("AT+WS46?"); std::string cmdResult = sendCommand(sCmd); if (cmdResult.find("+WS46:") == std::string::npos) { @@ -736,26 +736,26 @@ ICellularRadio::CODE TelitRadio::getCellularMode(PREFERRED_NETWORKS &networks) { return FAILURE; } -ICellularRadio::CODE TelitRadio::setCellularMode(PREFERRED_NETWORKS networks) { +ICellularRadio::CODE TelitRadio::setCellularMode(CELLULAR_MODES networks) { int wds = 0; // 3GPP TS 27.007 // https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1515 switch (static_cast(networks)) { - case PREFERRED_NETWORK_2G : wds = 12; break; - case PREFERRED_NETWORK_3G : wds = 22; break; - case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G : wds = 25; break; - case PREFERRED_NETWORK_4G : wds = 28; break; - case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G : wds = 29; break; - case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G : wds = 30; break; - case PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G : wds = 31; break; - case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 35; break; - case PREFERRED_NETWORK_5G: wds = 36; break; - case PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 37; break; - case PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 38; break; - case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G: wds = 39; break; - case PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G: wds = 40; break; - case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G: wds = 41; break; - case PREFERRED_NETWORK_2G | PREFERRED_NETWORK_5G: wds = 42; break; + case CELLULAR_MODE_2G : wds = 12; break; + case CELLULAR_MODE_3G : wds = 22; break; + case CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_4G : wds = 25; break; + case CELLULAR_MODE_4G : wds = 28; break; + case CELLULAR_MODE_2G | CELLULAR_MODE_3G : wds = 29; break; + case CELLULAR_MODE_2G | CELLULAR_MODE_4G : wds = 30; break; + case CELLULAR_MODE_3G | CELLULAR_MODE_4G : wds = 31; break; + case CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_4G | CELLULAR_MODE_5G: wds = 35; break; + case CELLULAR_MODE_5G: wds = 36; break; + case CELLULAR_MODE_4G | CELLULAR_MODE_5G: wds = 37; break; + case CELLULAR_MODE_3G | CELLULAR_MODE_4G | CELLULAR_MODE_5G: wds = 38; break; + case CELLULAR_MODE_2G | CELLULAR_MODE_4G | CELLULAR_MODE_5G: wds = 39; break; + case CELLULAR_MODE_3G | CELLULAR_MODE_5G: wds = 40; break; + case CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_5G: wds = 41; break; + case CELLULAR_MODE_2G | CELLULAR_MODE_5G: wds = 42; break; } std::string sCmd("AT+WS46="); sCmd += std::to_string(wds); @@ -767,30 +767,30 @@ ICellularRadio::CODE TelitRadio::setCellularMode(PREFERRED_NETWORKS networks) { return SUCCESS; } -ICellularRadio::PREFERRED_NETWORKS TelitRadio::preferredNetwork(PREFERRED_NETWORKS prefNetwork, int wds) +ICellularRadio::CELLULAR_MODES TelitRadio::preferredNetwork(CELLULAR_MODES prefNetwork, int wds) { int result = prefNetwork; // 3GPP TS 27.007 // https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1515 switch (wds) { - case 12: result |= PREFERRED_NETWORK_2G; break; - case 22: result |= PREFERRED_NETWORK_3G; break; - case 25: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G; break; - case 28: result |= PREFERRED_NETWORK_4G; break; - case 29: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G; break; - case 30: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G; break; - case 31: result |= PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G; break; - case 35: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; - case 36: result |= PREFERRED_NETWORK_5G; break; - case 37: result |= PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; - case 38: result |= PREFERRED_NETWORK_3G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; - case 39: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_4G | PREFERRED_NETWORK_5G; break; - case 40: result |= PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G; break; - case 41: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_3G | PREFERRED_NETWORK_5G; break; - case 42: result |= PREFERRED_NETWORK_2G | PREFERRED_NETWORK_5G; break; + case 12: result |= CELLULAR_MODE_2G; break; + case 22: result |= CELLULAR_MODE_3G; break; + case 25: result |= CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_4G; break; + case 28: result |= CELLULAR_MODE_4G; break; + case 29: result |= CELLULAR_MODE_2G | CELLULAR_MODE_3G; break; + case 30: result |= CELLULAR_MODE_2G | CELLULAR_MODE_4G; break; + case 31: result |= CELLULAR_MODE_3G | CELLULAR_MODE_4G; break; + case 35: result |= CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_4G | CELLULAR_MODE_5G; break; + case 36: result |= CELLULAR_MODE_5G; break; + case 37: result |= CELLULAR_MODE_4G | CELLULAR_MODE_5G; break; + case 38: result |= CELLULAR_MODE_3G | CELLULAR_MODE_4G | CELLULAR_MODE_5G; break; + case 39: result |= CELLULAR_MODE_2G | CELLULAR_MODE_4G | CELLULAR_MODE_5G; break; + case 40: result |= CELLULAR_MODE_3G | CELLULAR_MODE_5G; break; + case 41: result |= CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_5G; break; + case 42: result |= CELLULAR_MODE_2G | CELLULAR_MODE_5G; break; default: printDebug("AT+WS46: unhandled network mode: %d", wds); break; } - return static_cast(result); + return static_cast(result); } -- cgit v1.2.3 From df51426afd369bec64597eb922b6f6cc87d1f5ac Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Tue, 30 Jul 2019 18:39:03 +0300 Subject: MTX-2891 mpower 2-3-4g switch: quectel methods --- src/MTS_IO_EG95Radio.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/MTS_IO_EG95Radio.cpp b/src/MTS_IO_EG95Radio.cpp index 88f5724..501a164 100644 --- a/src/MTS_IO_EG95Radio.cpp +++ b/src/MTS_IO_EG95Radio.cpp @@ -21,6 +21,10 @@ #include +#include + +#include + using namespace MTS::IO; const std::string EG95Radio::MODEL_NAME("EG95"); @@ -51,10 +55,27 @@ ICellularRadio::CODE EG95Radio::getSupportedCellularModes(CELLULAR_MODES &networ return SUCCESS; } -ICellularRadio::CODE EG95Radio::getCellularMode(CELLULAR_MODES &networks) { +ICellularRadio::CODE EG95Radio::getCellularMode(CELLULAR_MODES&) { return FAILURE; } ICellularRadio::CODE EG95Radio::setCellularMode(CELLULAR_MODES networks) { + std::string prefNet; + for (int i = sizeof(networks)*CHAR_BIT-1; i>=0; --i){ + switch (1< Date: Wed, 31 Jul 2019 14:30:04 +0300 Subject: Removed obsolete methods get/set radio mode Use get/setCellularMode instead Revert of commits: 4ef332ec707946a3cf2a55473d05dfc9af3d4b11 [MTS-MTQ] network radio mode switch: refactoring method name 143feb6a4587817d28c77e4df3a1b594b855f5e5 [MTS-MTQ] RAT mode switch: implementation for telit and quectel --- include/mts/MTS_IO_ICellularRadio.h | 10 --------- include/mts/MTS_IO_QuectelRadio.h | 2 -- include/mts/MTS_IO_TelitRadio.h | 2 -- src/MTS_IO_QuectelRadio.cpp | 42 ------------------------------------- src/MTS_IO_TelitRadio.cpp | 37 -------------------------------- 5 files changed, 93 deletions(-) diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h index ce1a91e..57d6f53 100644 --- a/include/mts/MTS_IO_ICellularRadio.h +++ b/include/mts/MTS_IO_ICellularRadio.h @@ -60,14 +60,6 @@ namespace MTS { NOT_INSERTED }; - enum RADIO_NETWORK_MODE : uint8_t { - RADIO_NETWORK_MODE_UNKNOWN = 0, - RADIO_NETWORK_MODE_AUTO, - RADIO_NETWORK_MODE_GSM_ONLY, - RADIO_NETWORK_MODE_UMTS_ONLY, - RADIO_NETWORK_MODE_LTE_ONLY - }; - enum CELLULAR_MODES : uint8_t { CELLULAR_MODE_NA = 0, // NOT AVAILABLE CELLULAR_MODE_2G = 1 << 0, // GSM @@ -293,8 +285,6 @@ namespace MTS { * or on any other error). */ virtual CODE unlockSimCard(const Json::Value& jArgs) = 0; - virtual CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) = 0; - virtual CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) = 0; //! Gather details of the radio's Mobile IP Profile /*! diff --git a/include/mts/MTS_IO_QuectelRadio.h b/include/mts/MTS_IO_QuectelRadio.h index 3b1ba5a..df3b5b5 100644 --- a/include/mts/MTS_IO_QuectelRadio.h +++ b/include/mts/MTS_IO_QuectelRadio.h @@ -41,8 +41,6 @@ namespace MTS { CODE convertdBmToSignalStrength(const int32_t& dBm, int32_t& iRssi) override; CODE setMdn(const Json::Value& jArgs) override; - CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) override; - CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) override; protected: QuectelRadio(const std::string& sName, const std::string& sRadioPort); diff --git a/include/mts/MTS_IO_TelitRadio.h b/include/mts/MTS_IO_TelitRadio.h index fc041cf..991f630 100644 --- a/include/mts/MTS_IO_TelitRadio.h +++ b/include/mts/MTS_IO_TelitRadio.h @@ -39,8 +39,6 @@ namespace MTS { CODE convertdBmToSignalStrength(const int32_t& dBm, int32_t& iRssi) override; CODE setMdn(const Json::Value& jArgs) override; - CODE getRadioNetworkMode(RADIO_NETWORK_MODE &mode) override; - CODE setRadioNetworkMode(RADIO_NETWORK_MODE mode) override; CODE getSupportedCellularModes(CELLULAR_MODES &networks) override; CODE getCellularMode(CELLULAR_MODES &networks) override; diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index 4c65382..c4bdc56 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -568,45 +568,3 @@ ICellularRadio::CODE QuectelRadio::convertToActiveBand(const std::string& sQuect return SUCCESS; } - -ICellularRadio::CODE QuectelRadio::getRadioNetworkMode(RADIO_NETWORK_MODE &mode) -{ - // AT+QCFG="nwscanmode" execution can take up to 300ms according to the datasheet. Setting timeout to 500ms just for sure. - std::string sCmd("AT+QCFG=\"nwscanmode\""); - std::string cmdResult = sendCommand(sCmd, DEFAULT_BAIL_STRINGS, 500); - - if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+QCFG? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); - return FAILURE; - } - switch (stoi(MTS::Text::split(cmdResult, ',')[1])) { - case 1: mode = ICellularRadio::RADIO_NETWORK_MODE_GSM_ONLY; break; - case 5: mode = ICellularRadio::RADIO_NETWORK_MODE_UMTS_ONLY; break; - case 0: mode = ICellularRadio::RADIO_NETWORK_MODE_AUTO; break; - default: mode = ICellularRadio::RADIO_NETWORK_MODE_UNKNOWN; break; - } - return SUCCESS; -} - -ICellularRadio::CODE QuectelRadio::setRadioNetworkMode(RADIO_NETWORK_MODE mode) -{ - std::string value; - switch (mode) { - case ICellularRadio::RADIO_NETWORK_MODE_GSM_ONLY: value = "1"; break; - case ICellularRadio::RADIO_NETWORK_MODE_UMTS_ONLY: value = "5"; break; - case ICellularRadio::RADIO_NETWORK_MODE_AUTO: value = "0"; break; - default: return FAILURE; - } - std::string sCmd("AT+QCFG=\"nwscanmode\","); - sCmd += value; - - // AT+QCFG="nwscanmode" execution can take up to 300ms according to the datasheet. Setting timeout to 500ms just for sure. - std::string cmdResult = sendCommand(sCmd, DEFAULT_BAIL_STRINGS, 500); - - if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+QCFG? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); - return FAILURE; - } - return SUCCESS; -} - diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index b20d776..c04b47a 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -538,43 +538,6 @@ bool TelitRadio::getHardwareVersionFromFirmware(const std::string& sFirmware, st } -ICellularRadio::CODE TelitRadio::getRadioNetworkMode(RADIO_NETWORK_MODE &mode) -{ - std::string sCmd("AT+WS46?"); - std::string cmdResult = sendCommand(sCmd); - if (cmdResult.find("+WS46:") == std::string::npos) { - printDebug("%s| AT+WS46? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); - return FAILURE; - } - // TODO: replace with MTS::Text::parse - switch (stoi(MTS::Text::split(cmdResult, ':')[1])) { - case 12: mode = ICellularRadio::RADIO_NETWORK_MODE_GSM_ONLY; break; - case 22: mode = ICellularRadio::RADIO_NETWORK_MODE_UMTS_ONLY; break; - case 25: mode = ICellularRadio::RADIO_NETWORK_MODE_AUTO; break; - default: mode = ICellularRadio::RADIO_NETWORK_MODE_UNKNOWN; break; - } - return SUCCESS; -} - -ICellularRadio::CODE TelitRadio::setRadioNetworkMode(RADIO_NETWORK_MODE mode) -{ - std::string value; - switch (mode) { - case ICellularRadio::RADIO_NETWORK_MODE_GSM_ONLY: value = "12"; break; - case ICellularRadio::RADIO_NETWORK_MODE_UMTS_ONLY: value = "22"; break; - case ICellularRadio::RADIO_NETWORK_MODE_AUTO: value = "25"; break; - default: return FAILURE; - } - std::string sCmd("AT+WS46="); - sCmd += value; - std::string cmdResult = sendCommand(sCmd); - if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+WS46? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); - return FAILURE; - } - return SUCCESS; -} - ICellularRadio::CODE TelitRadio::getIsSimInserted(bool& bData) { printTrace("%s| Get SIM insertion status", getName().c_str()); std::string sCmd("AT#SIMDET?"); -- cgit v1.2.3 From dde61cb74828054f00518ca3b931f0b20009cc79 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Mon, 5 Aug 2019 19:05:47 +0300 Subject: MTX-2898 mpower 2-3-4g: quectel methods for set-cellular-mode and common methods for get-cellular-mode --- include/mts/MTS_IO_CellularRadio.h | 1 + include/mts/MTS_IO_EG95Radio.h | 3 +-- include/mts/MTS_IO_TelitRadio.h | 1 - src/MTS_IO_CellularRadio.cpp | 28 ++++++++++++++++++++++++++++ src/MTS_IO_EG95Radio.cpp | 21 +++++++++++---------- src/MTS_IO_TelitRadio.cpp | 17 ----------------- 6 files changed, 41 insertions(+), 30 deletions(-) diff --git a/include/mts/MTS_IO_CellularRadio.h b/include/mts/MTS_IO_CellularRadio.h index eecefee..1e80274 100644 --- a/include/mts/MTS_IO_CellularRadio.h +++ b/include/mts/MTS_IO_CellularRadio.h @@ -70,6 +70,7 @@ namespace MTS { CODE getTower(std::string& sTower) override; CODE getTime(std::string& sDate, std::string& sTime, std::string& sTimeZone) override; CODE getRoaming(bool& bRoaming) override; + CODE getCellularMode(CELLULAR_MODES &networks) override; CODE getSignalStrength(int32_t& iRssi) override; CODE getModemLocation(std::string& sLocation) override; diff --git a/include/mts/MTS_IO_EG95Radio.h b/include/mts/MTS_IO_EG95Radio.h index 620a333..5296e16 100644 --- a/include/mts/MTS_IO_EG95Radio.h +++ b/include/mts/MTS_IO_EG95Radio.h @@ -34,13 +34,12 @@ namespace MTS { EG95Radio(const std::string& sPort); virtual ~EG95Radio(); - CODE setRxDiversity(const Json::Value& jArgs); + CODE setRxDiversity(const Json::Value& jArgs) override; protected: private: CODE getSupportedCellularModes(CELLULAR_MODES &networks) override; - CODE getCellularMode(CELLULAR_MODES &networks) override; CODE setCellularMode(CELLULAR_MODES networks) override; }; } diff --git a/include/mts/MTS_IO_TelitRadio.h b/include/mts/MTS_IO_TelitRadio.h index 991f630..b81cd7d 100644 --- a/include/mts/MTS_IO_TelitRadio.h +++ b/include/mts/MTS_IO_TelitRadio.h @@ -41,7 +41,6 @@ namespace MTS { CODE setMdn(const Json::Value& jArgs) override; CODE getSupportedCellularModes(CELLULAR_MODES &networks) override; - CODE getCellularMode(CELLULAR_MODES &networks) override; CODE setCellularMode(CELLULAR_MODES networks) override; protected: diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp index 3f0c037..e171341 100644 --- a/src/MTS_IO_CellularRadio.cpp +++ b/src/MTS_IO_CellularRadio.cpp @@ -770,6 +770,34 @@ ICellularRadio::CODE CellularRadio::getRegistration(REGISTRATION& eRegistration) return SUCCESS; } +ICellularRadio::CODE CellularRadio::getCellularMode(CELLULAR_MODES &networks) { + networks = CELLULAR_MODE_NA; + std::string cmdResult = sendCommand("AT+COPS?"); + if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { + printDebug("%s| AT+COPS returned unexpected response: AT+COPS? [%s]", getName().c_str(), cmdResult.c_str()); + return FAILURE; + } + + size_t cursor = 0; + const std::vector &reply = MTS::Text::split(MTS::Text::getLine(MTS::Text::trim(cmdResult), cursor, cursor), ','); + uint8_t op; + if (reply.size() < 4 || !MTS::Text::parse(op, reply[3])) { + printDebug("Error parsing reply from AT+COPS"); + return FAILURE; + } + if (op == 0) { + networks = CELLULAR_MODE_2G; + } else if (op >= 2 && op <= 6) { + networks = CELLULAR_MODE_3G; + } else if (op == 7) { + networks = CELLULAR_MODE_4G; + } else { + printDebug("Error: AT+COPS unknown Radio Access Technology"); + return FAILURE; + } + return SUCCESS; +} + ICellularRadio::CODE CellularRadio::convertRegistrationToString(REGISTRATION eRegistration, std::string& sRegistration) { ICellularRadio::CODE eCode = FAILURE; diff --git a/src/MTS_IO_EG95Radio.cpp b/src/MTS_IO_EG95Radio.cpp index 501a164..f934e50 100644 --- a/src/MTS_IO_EG95Radio.cpp +++ b/src/MTS_IO_EG95Radio.cpp @@ -24,6 +24,7 @@ #include #include +#include using namespace MTS::IO; @@ -55,27 +56,27 @@ ICellularRadio::CODE EG95Radio::getSupportedCellularModes(CELLULAR_MODES &networ return SUCCESS; } -ICellularRadio::CODE EG95Radio::getCellularMode(CELLULAR_MODES&) { - return FAILURE; -} - ICellularRadio::CODE EG95Radio::setCellularMode(CELLULAR_MODES networks) { std::string prefNet; + unsigned int prefOnly = 0; for (int i = sizeof(networks)*CHAR_BIT-1; i>=0; --i){ switch (1< Date: Thu, 8 Aug 2019 13:41:08 +0300 Subject: MTX-2898 mpower 2-3-4g: quectel set cellular mode fix --- src/MTS_IO_EG95Radio.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/MTS_IO_EG95Radio.cpp b/src/MTS_IO_EG95Radio.cpp index f934e50..7705e64 100644 --- a/src/MTS_IO_EG95Radio.cpp +++ b/src/MTS_IO_EG95Radio.cpp @@ -67,15 +67,23 @@ ICellularRadio::CODE EG95Radio::setCellularMode(CELLULAR_MODES networks) { default: printError("Unhandled preferred network flag."); } } + std::string sCmd; if (prefNet.size() == 2) { // *g-only sCmd = "AT+QCFG=\"nwscanmode\"," + std::to_string(prefOnly); } else { // preferred - sCmd = "AT+QCFG=\"nwscanseq\"," + prefNet; + sCmd = "AT+QCFG=\"nwscanmode\",0"; } std::string cmdResult = sendCommand(sCmd); if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+QCFG returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + printDebug("%s| AT+QCFG=\"nwscanmode\" returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + return FAILURE; + } + + sCmd = "AT+QCFG=\"nwscanseq\"," + prefNet; + cmdResult = sendCommand(sCmd); + if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { + printDebug("%s| AT+QCFG=\"nwscanseq\" returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); return FAILURE; } return SUCCESS; -- cgit v1.2.3 From 4e5c4eb9d3b9a8974429810ebe5afc3387753643 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Thu, 8 Aug 2019 13:45:31 +0300 Subject: MTX-2891 mpower 2-3-4g: error messages printed with printError --- src/MTS_IO_CellularRadio.cpp | 6 +++--- src/MTS_IO_EG95Radio.cpp | 4 ++-- src/MTS_IO_TelitRadio.cpp | 14 +++++++------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp index e171341..6df92e0 100644 --- a/src/MTS_IO_CellularRadio.cpp +++ b/src/MTS_IO_CellularRadio.cpp @@ -774,7 +774,7 @@ ICellularRadio::CODE CellularRadio::getCellularMode(CELLULAR_MODES &networks) { networks = CELLULAR_MODE_NA; std::string cmdResult = sendCommand("AT+COPS?"); if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+COPS returned unexpected response: AT+COPS? [%s]", getName().c_str(), cmdResult.c_str()); + printError("%s| AT+COPS returned unexpected response: AT+COPS? [%s]", getName().c_str(), cmdResult.c_str()); return FAILURE; } @@ -782,7 +782,7 @@ ICellularRadio::CODE CellularRadio::getCellularMode(CELLULAR_MODES &networks) { const std::vector &reply = MTS::Text::split(MTS::Text::getLine(MTS::Text::trim(cmdResult), cursor, cursor), ','); uint8_t op; if (reply.size() < 4 || !MTS::Text::parse(op, reply[3])) { - printDebug("Error parsing reply from AT+COPS"); + printError("%s| AT+COPS Error parsing reply [AT+COPS?][%s]", getName().c_str(), cmdResult.c_str()); return FAILURE; } if (op == 0) { @@ -792,7 +792,7 @@ ICellularRadio::CODE CellularRadio::getCellularMode(CELLULAR_MODES &networks) { } else if (op == 7) { networks = CELLULAR_MODE_4G; } else { - printDebug("Error: AT+COPS unknown Radio Access Technology"); + printError("%s| AT+COPS unknown Radio Access Technology [AT+COPS?][%s]", getName().c_str(), cmdResult.c_str()); return FAILURE; } return SUCCESS; diff --git a/src/MTS_IO_EG95Radio.cpp b/src/MTS_IO_EG95Radio.cpp index 7705e64..aff53d2 100644 --- a/src/MTS_IO_EG95Radio.cpp +++ b/src/MTS_IO_EG95Radio.cpp @@ -76,14 +76,14 @@ ICellularRadio::CODE EG95Radio::setCellularMode(CELLULAR_MODES networks) { } std::string cmdResult = sendCommand(sCmd); if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+QCFG=\"nwscanmode\" returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + printError("%s| AT+QCFG=\"nwscanmode\" returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); return FAILURE; } sCmd = "AT+QCFG=\"nwscanseq\"," + prefNet; cmdResult = sendCommand(sCmd); if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+QCFG=\"nwscanseq\" returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + printError("%s| AT+QCFG=\"nwscanseq\" returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); return FAILURE; } return SUCCESS; diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 7e74ca6..5b8e55d 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -634,12 +634,12 @@ ICellularRadio::CODE TelitRadio::getSupportedCellularModes(CELLULAR_MODES &netwo std::string sCmd("AT+WS46=?"); std::string cmdResult = sendCommand(sCmd); if (cmdResult.find("+WS46:") == std::string::npos) { - printDebug("%s| AT+WS46=? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + printError("%s| AT+WS46=? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); return FAILURE; } if (cmdResult.find('(') == std::string::npos) { - printDebug("AT+WS46: error responce %s", cmdResult.c_str()); + printError("AT+WS46: error responce %s", cmdResult.c_str()); return FAILURE; } std::string s = MTS::Text::split(cmdResult, '(')[1]; @@ -652,7 +652,7 @@ ICellularRadio::CODE TelitRadio::getSupportedCellularModes(CELLULAR_MODES &netwo const std::vector &r = MTS::Text::split(it, "-"); int begin, end; if ( ! MTS::Text::parse(begin, r[0]) || ! MTS::Text::parse(end, r[1])) { - printDebug("AT+WS46: error parsing network mode range: %s-%s", r[0].c_str(), r[1].c_str()); + printError("AT+WS46: error parsing network mode range: %s-%s", r[0].c_str(), r[1].c_str()); return FAILURE; } for (int i = begin; i<=end; ++i) { @@ -663,14 +663,14 @@ ICellularRadio::CODE TelitRadio::getSupportedCellularModes(CELLULAR_MODES &netwo } else { int v; if ( ! MTS::Text::parse(v, it)) { - printDebug("AT+WS46: error parsing network mode: %s", it.c_str()); + printError("AT+WS46: error parsing network mode: %s", it.c_str()); return FAILURE; } m.push_back(v); } } if (m.size()>1024) { - printDebug("AT+WS46: network modes count overflow, parsing error"); + printError("AT+WS46: network modes count overflow, parsing error"); return FAILURE; } @@ -707,7 +707,7 @@ ICellularRadio::CODE TelitRadio::setCellularMode(CELLULAR_MODES networks) { sCmd += std::to_string(wds); std::string cmdResult = sendCommand(sCmd); if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { - printDebug("%s| AT+WS46= returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + printError("%s| AT+WS46= returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); return FAILURE; } return SUCCESS; @@ -735,7 +735,7 @@ ICellularRadio::CELLULAR_MODES TelitRadio::preferredNetwork(CELLULAR_MODES prefN case 41: result |= CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_5G; break; case 42: result |= CELLULAR_MODE_2G | CELLULAR_MODE_5G; break; default: - printDebug("AT+WS46: unhandled network mode: %d", wds); + printError("AT+WS46: unhandled network mode: %d", wds); break; } return static_cast(result); -- cgit v1.2.3