diff options
author | Brandon Bayer <bbayer@multitech.com> | 2016-03-15 14:44:14 -0500 |
---|---|---|
committer | Brandon Bayer <bbayer@multitech.com> | 2016-03-16 11:39:41 -0500 |
commit | a07abd74684cdbd6413cd4489627a236018725c8 (patch) | |
tree | 7d28f6f27d8a72add42e8805c14f2f33246205cb /src | |
parent | 57f3714c9ae1287e842fa32f14832d3e4d15e96d (diff) | |
download | libmts-io-a07abd74684cdbd6413cd4489627a236018725c8.tar.gz libmts-io-a07abd74684cdbd6413cd4489627a236018725c8.tar.bz2 libmts-io-a07abd74684cdbd6413cd4489627a236018725c8.zip |
fix: set CGREG back to original setting instead of 00.3
Diffstat (limited to 'src')
-rw-r--r-- | src/MTS_IO_CellularRadio.cpp | 72 |
1 files changed, 49 insertions, 23 deletions
diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp index 7234a98..6954368 100644 --- a/src/MTS_IO_CellularRadio.cpp +++ b/src/MTS_IO_CellularRadio.cpp @@ -1046,29 +1046,7 @@ CellularRadio::CODE CellularRadio::getNetworkStatus(Json::Value& jData) { RadioBandMap radioBandMap(vParts[1], CellularRadio::VALUE_TYPE_LTE); jData[KEY_ABND] = radioBandMap.getRadioBandName(); - // Get the LAC for the LTE radio that's not in the #RFSTS response - // Temporarily set CGREG=2 to get more info - sCmd = "AT+CGREG=2"; - sResult = sendCommand(sCmd); - if (sResult.find("OK") == std::string::npos) { - printDebug("%s| AT#CGREG=2 returned unexpected response: [%s][%s]", m_sName.c_str(), sCmd.c_str(), sResult.c_str()); - } - sCmd = "AT+CGREG?"; - sResult = sendCommand(sCmd); - if (sResult.find("+CGREG:") == std::string::npos) { - printDebug("%s| AT#CGREG? returned unexpected response: [%s][%s]", m_sName.c_str(), sCmd.c_str(), sResult.c_str()); - jData[KEY_LAC] = CellularRadio::VALUE_UNKNOWN; - } else { - size_t start = sResult.find(":") + 1; //Position right after "#RFSTS:" - std::vector<std::string> vParts = MTS::Text::split(MTS::Text::trim(sResult.substr(start)), ","); - jData[KEY_LAC] = MTS::Text::strip(vParts[2], '"'); - } - // Revert CGREG to default - sCmd = "AT+CGREG=0"; - sResult = sendCommand(sCmd); - if (sResult.find("OK") == std::string::npos) { - printDebug("%s| AT#CGREG=0 returned unexpected response: [%s][%s]", m_sName.c_str(), sCmd.c_str(), sResult.c_str()); - } + jData[KEY_LAC] = queryLteLac(); if(MTS::Text::parse(iValue, vParts[14]) && convertServiceDomainToString((SERVICEDOMAIN)iValue, sValue) == SUCCESS) { jDebug[KEY_SD] = sValue; @@ -1084,6 +1062,54 @@ CellularRadio::CODE CellularRadio::getNetworkStatus(Json::Value& jData) { return SUCCESS; } +// Get the LAC for the LTE radio that's not in the #RFSTS response +std::string CellularRadio::queryLteLac() { + std::string CGREGstring; + std::string originalCGREG; + std::string result; + + CGREGstring = queryCGREGstring(); + if (CGREGstring == RSP_ERROR) { + originalCGREG = "0"; + } else { + originalCGREG = CGREGstring.at(CGREGstring.find(",") - 1); //Position right before first comma ("+CGREG: 0,1") + } + + // Temporarily set CGREG=2 to get more info + setCGREG("2"); + + CGREGstring = queryCGREGstring(); + if (CGREGstring == RSP_ERROR) { + result = CellularRadio::VALUE_UNKNOWN; + } else { + size_t start = CGREGstring.find(":") + 1; //Position right after "#RFSTS:" + std::vector<std::string> vParts = MTS::Text::split(MTS::Text::trim(CGREGstring.substr(start)), ","); + result = MTS::Text::strip(vParts[2], '"'); + } + + setCGREG(originalCGREG); + + return result; +} + +void CellularRadio::setCGREG(std::string value) { + std::string sCmd("AT+CGREG=" + value); + std::string cmdResult(sendCommand(sCmd)); + if (cmdResult.find("OK") == std::string::npos) { + printDebug("%s| AT#CGREG=%s returned unexpected response: [%s][%s]", m_sName.c_str(), value.c_str(), sCmd.c_str(), cmdResult.c_str()); + } +} + +std::string CellularRadio::queryCGREGstring() { + std::string sCmd("AT+CGREG?"); + std::string cmdResult(sendCommand(sCmd)); + if (cmdResult.find("+CGREG:") == std::string::npos) { + printDebug("%s| AT#CGREG? returned unexpected response: [%s][%s]", m_sName.c_str(), sCmd.c_str(), cmdResult.c_str()); + return RSP_ERROR; + } + return cmdResult; +} + void CellularRadio::getCommonNetworkStats(Json::Value& jData) { bool bRoaming = false; |