diff options
author | Maksym Telychko <maksym.telychko@globallogic.com> | 2019-06-21 17:19:09 +0300 |
---|---|---|
committer | Maksym Telychko <maksym.telychko@globallogic.com> | 2019-06-21 17:19:09 +0300 |
commit | 143feb6a4587817d28c77e4df3a1b594b855f5e5 (patch) | |
tree | b4457521772e261244fd14ce74788070e0dc7299 | |
parent | 3b542d1fea82726842e6bfe03ddcbf86345c5b9d (diff) | |
download | libmts-io-143feb6a4587817d28c77e4df3a1b594b855f5e5.tar.gz libmts-io-143feb6a4587817d28c77e4df3a1b594b855f5e5.tar.bz2 libmts-io-143feb6a4587817d28c77e4df3a1b594b855f5e5.zip |
[MTS-MTQ] RAT mode switch: implementation for telit and quectel
RAT - Radio Access Technology
-rw-r--r-- | include/mts/MTS_IO_ICellularRadio.h | 11 | ||||
-rw-r--r-- | include/mts/MTS_IO_QuectelRadio.h | 2 | ||||
-rw-r--r-- | include/mts/MTS_IO_TelitRadio.h | 2 | ||||
-rw-r--r-- | src/MTS_IO_QuectelRadio.cpp | 36 | ||||
-rw-r--r-- | src/MTS_IO_TelitRadio.cpp | 36 |
5 files changed, 87 insertions, 0 deletions
diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h index d74ad15..1b95a0d 100644 --- a/include/mts/MTS_IO_ICellularRadio.h +++ b/include/mts/MTS_IO_ICellularRadio.h @@ -60,6 +60,14 @@ namespace MTS { NOT_INSERTED }; + enum RADIOMODE : uint8_t { + RADIOMODE_UNKNOWN = 0, + RADIOMODE_AUTO, + RADIOMODE_GSM_ONLY, + RADIOMODE_UMTS_ONLY, + RADIOMODE_LTE_ONLY + }; + 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); @@ -225,6 +233,9 @@ namespace MTS { virtual CODE getRegistration(REGISTRATION& eRegistration) = 0; virtual CODE convertRegistrationToString(REGISTRATION eRegistration, std::string& sRegistration) = 0; + virtual CODE getRadioMode(RADIOMODE &mode) = 0; + virtual CODE setRadioMode(RADIOMODE mode) = 0; + //! Gather details of the radio's Mobile IP Profile /*! \param Json::Value object that will be populated with MIP data diff --git a/include/mts/MTS_IO_QuectelRadio.h b/include/mts/MTS_IO_QuectelRadio.h index b486323..0ca7f3b 100644 --- a/include/mts/MTS_IO_QuectelRadio.h +++ b/include/mts/MTS_IO_QuectelRadio.h @@ -41,6 +41,8 @@ namespace MTS { CODE convertdBmToSignalStrength(const int32_t& dBm, int32_t& iRssi) override; CODE setMdn(const Json::Value& jArgs) override; + CODE getRadioMode(RADIOMODE &mode) override; + CODE setRadioMode(RADIOMODE 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 70ff8a9..47d6cf6 100644 --- a/include/mts/MTS_IO_TelitRadio.h +++ b/include/mts/MTS_IO_TelitRadio.h @@ -39,6 +39,8 @@ namespace MTS { CODE convertdBmToSignalStrength(const int32_t& dBm, int32_t& iRssi) override; CODE setMdn(const Json::Value& jArgs) override; + CODE getRadioMode(RADIOMODE &mode) override; + CODE setRadioMode(RADIOMODE mode) override; protected: TelitRadio(const std::string& sName, const std::string& sRadioPort); diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index 2f3c9b5..50185b3 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -494,3 +494,39 @@ CellularRadio::CODE QuectelRadio::convertToActiveBand(const std::string& sQuecte return SUCCESS; } + +ICellularRadio::CODE QuectelRadio::getRadioMode(RADIOMODE &mode) +{ + std::string sCmd("AT+QCFG=\"nwscanmode\""); + 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()); + return FAILURE; + } + switch (stoi(MTS::Text::split(cmdResult, ',')[1])) { + case 1: mode = ICellularRadio::RADIOMODE_GSM_ONLY; break; + case 5: mode = ICellularRadio::RADIOMODE_UMTS_ONLY; break; + case 0: mode = ICellularRadio::RADIOMODE_AUTO; break; + default: mode = ICellularRadio::RADIOMODE_UNKNOWN; break; + } + return SUCCESS; +} + +ICellularRadio::CODE QuectelRadio::setRadioMode(RADIOMODE mode) +{ + std::string value; + switch (mode) { + case ICellularRadio::RADIOMODE_GSM_ONLY: value = "1"; break; + case ICellularRadio::RADIOMODE_UMTS_ONLY: value = "5"; break; + case ICellularRadio::RADIOMODE_AUTO: value = "0"; break; + default: return FAILURE; + } + std::string sCmd("AT+QCFG=\"nwscanmode\","); + sCmd += value; + 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()); + return FAILURE; + } + return SUCCESS; +} diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 4fcf836..7b5b18b 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -537,3 +537,39 @@ bool TelitRadio::getHardwareVersionFromFirmware(const std::string& sFirmware, st return bResult; } + +ICellularRadio::CODE TelitRadio::getRadioMode(RADIOMODE &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; + } + switch (stoi(MTS::Text::split(cmdResult, ':')[1])) { + case 12: mode = ICellularRadio::RADIOMODE_GSM_ONLY; break; + case 22: mode = ICellularRadio::RADIOMODE_UMTS_ONLY; break; + case 25: mode = ICellularRadio::RADIOMODE_AUTO; break; + default: mode = ICellularRadio::RADIOMODE_UNKNOWN; break; + } + return SUCCESS; +} + +ICellularRadio::CODE TelitRadio::setRadioMode(RADIOMODE mode) +{ + std::string value; + switch (mode) { + case ICellularRadio::RADIOMODE_GSM_ONLY: value = "12"; break; + case ICellularRadio::RADIOMODE_UMTS_ONLY: value = "22"; break; + case ICellularRadio::RADIOMODE_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; +} |