summaryrefslogtreecommitdiff
path: root/src/MTS_IO_QuectelRadio.cpp
diff options
context:
space:
mode:
authorSerhii Kostiuk <serhii.o.kostiuk@globallogic.com>2019-06-24 11:30:51 +0300
committerSerhii Kostiuk <serhii.o.kostiuk@globallogic.com>2019-06-24 11:47:11 +0300
commit83c86fe26b69439f75c893618114d16be0d1d2e8 (patch)
tree4608bf8e5b881016fd74d2caa5a426ba9f9ad438 /src/MTS_IO_QuectelRadio.cpp
parent143feb6a4587817d28c77e4df3a1b594b855f5e5 (diff)
parent28ce5eaaa648670a2c83d583ebff2dc517af002e (diff)
downloadlibmts-io-83c86fe26b69439f75c893618114d16be0d1d2e8.tar.gz
libmts-io-83c86fe26b69439f75c893618114d16be0d1d2e8.tar.bz2
libmts-io-83c86fe26b69439f75c893618114d16be0d1d2e8.zip
Merge branch 'mtr-mtq-sim-status' into quectel-radio
Diffstat (limited to 'src/MTS_IO_QuectelRadio.cpp')
-rw-r--r--src/MTS_IO_QuectelRadio.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp
index 50185b3..8ac9bac 100644
--- a/src/MTS_IO_QuectelRadio.cpp
+++ b/src/MTS_IO_QuectelRadio.cpp
@@ -478,6 +478,85 @@ bool QuectelRadio::getHardwareVersionFromFirmware(const std::string& sFirmware,
return false;
}
+CellularRadio::CODE QuectelRadio::getIsSimInserted(bool& bData) {
+ printTrace("%s| Get SIM insertion status", getName().c_str());
+ std::string sCmd("AT+QSIMSTAT?");
+ std::string sResult = sendCommand(sCmd);
+
+ const std::string sPrefix = "+QSIMSTAT: ";
+ size_t start = sResult.find(sPrefix);
+ size_t end = sResult.rfind(ICellularRadio::RSP_OK);
+
+ if (end == std::string::npos) {
+ printWarning("%s| Unable to get SIM insertion status from radio using command [%s]", getName().c_str(), sCmd.c_str());
+ return FAILURE;
+ }
+
+ if (start == std::string::npos) {
+ printDebug("%s| AT+QSIMSTAT? returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ // +QSIMSTAT: <enable>,<inserted_status>
+ start += sPrefix.size();
+ std::vector<std::string> vParts = MTS::Text::split(MTS::Text::trim(sResult.substr(start, end-start)), ',');
+
+ if(vParts.size() != 2) {
+ printWarning("%s| Unable to parse SIM insertion status from response [%s]", getName().c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ if (vParts[1] == "1") { // Inserted
+ bData = true;
+ } else { // Removed or Unknown, before (U)SIM initialization
+ bData = false;
+ }
+
+ return SUCCESS;
+}
+
+CellularRadio::CODE QuectelRadio::getSimLockAttempts(int& iAttemptsPin, int& iAttemptsPuk) {
+ printTrace("%s| Get SIM unlock attempts left", getName().c_str());
+ std::string sCmd("AT+QPINC=\"SC\"");
+ std::string sResult = sendCommand(sCmd);
+
+ const std::string sPrefix = "+QPINC: \"SC\",";
+ size_t start = sResult.find(sPrefix);
+ size_t end = sResult.rfind(ICellularRadio::RSP_OK);
+
+ if (end == std::string::npos) {
+ printWarning("%s| Unable to get SIM unlock attempts from radio using command [%s]", getName().c_str(), sCmd.c_str());
+ return FAILURE;
+ }
+
+ if (start == std::string::npos) {
+ printDebug("%s| AT+QPINC returned unexpected response: [%s][%s]", getName().c_str(), sCmd.c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ // +QPINC: <facility>,<pincounter>,<pukcounter>
+ // [x] ,[0] ,[1]
+ start += sPrefix.size();
+ std::vector<std::string> vParts = MTS::Text::split(MTS::Text::trim(sResult.substr(start, end-start)), ',');
+
+ if(vParts.size() != 2) {
+ printWarning("%s| Unable to parse SIM unlock attempts left from response [%s]", getName().c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ if (!MTS::Text::parse(iAttemptsPin, vParts[0])) {
+ printWarning("%s| Unable to parse SIM PIM unlock attempts from response [%s]", getName().c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ if (!MTS::Text::parse(iAttemptsPuk, vParts[1])) {
+ printWarning("%s| Unable to parse SIM PUK unlock attempts from response [%s]", getName().c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ return SUCCESS;
+}
+
CellularRadio::CODE QuectelRadio::convertToActiveBand(const std::string& sQuectelBand, ICellularRadio::ACTIVEBAND& band) {
int iQuectelBand = -1;