diff options
author | Jeff Hatch <jhatch@multitech.com> | 2019-08-13 08:02:32 -0500 |
---|---|---|
committer | Jeff Hatch <jhatch@multitech.com> | 2019-08-13 08:02:32 -0500 |
commit | 07eb755bbdc2700f31ff4e5fd9a7ac04a14e69e8 (patch) | |
tree | d1b30c78bbb2e81576cf193a7be809c0a2e0676b /src/MTS_IO_EG95Radio.cpp | |
parent | f6f7d0e174d2bf5eb4494e2508c17d3d7fbdc4e9 (diff) | |
parent | 4e5c4eb9d3b9a8974429810ebe5afc3387753643 (diff) | |
download | libmts-io-07eb755bbdc2700f31ff4e5fd9a7ac04a14e69e8.tar.gz libmts-io-07eb755bbdc2700f31ff4e5fd9a7ac04a14e69e8.tar.bz2 libmts-io-07eb755bbdc2700f31ff4e5fd9a7ac04a14e69e8.zip |
Merge branch 'MTX-2891-mpower-2g-3g-4g' into 'master'
Mtx 2891 mpower 2g 3g 4g
See merge request !2
Diffstat (limited to 'src/MTS_IO_EG95Radio.cpp')
-rw-r--r-- | src/MTS_IO_EG95Radio.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/MTS_IO_EG95Radio.cpp b/src/MTS_IO_EG95Radio.cpp index 5c9ed69..aff53d2 100644 --- a/src/MTS_IO_EG95Radio.cpp +++ b/src/MTS_IO_EG95Radio.cpp @@ -21,6 +21,11 @@ #include <mts/MTS_IO_EG95Radio.h> +#include <climits> + +#include <mts/MTS_Logger.h> +#include <mts/MTS_Text.h> + using namespace MTS::IO; const std::string EG95Radio::MODEL_NAME("EG95"); @@ -45,3 +50,41 @@ ICellularRadio::CODE EG95Radio::setRxDiversity(const Json::Value& jArgs) { return sendBasicCommand(sCmd); } + +ICellularRadio::CODE EG95Radio::getSupportedCellularModes(CELLULAR_MODES &networks) { + networks = static_cast<CELLULAR_MODES>(CELLULAR_MODE_2G | CELLULAR_MODE_3G | CELLULAR_MODE_4G); + return SUCCESS; +} + +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<<i & networks) { + case ICellularRadio::CELLULAR_MODE_2G: prefNet += "01" ; prefOnly = 1; break; + case ICellularRadio::CELLULAR_MODE_3G: prefNet += "0302"; prefOnly = 2; break; + case ICellularRadio::CELLULAR_MODE_4G: prefNet += "04" ; prefOnly = 3; break; + 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=\"nwscanmode\",0"; + } + std::string cmdResult = sendCommand(sCmd); + if (cmdResult.find(ICellularRadio::RSP_OK) == std::string::npos) { + 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) { + printError("%s| AT+QCFG=\"nwscanseq\" returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), cmdResult.c_str()); + return FAILURE; + } + return SUCCESS; +} |