summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeff Hatch <jhatch@multitech.com>2020-06-17 07:57:52 -0500
committerJeff Hatch <jhatch@multitech.com>2020-06-17 07:57:52 -0500
commita949739583abb1fe30895edfda216e83ffdbef52 (patch)
treeb104891745ea1206f5ae5e6d8728228583441112 /src
parentc34ebcd0df9c5bdbeb5638e9a5498cbee6bab628 (diff)
parent747b898f36c4764475e61f20847ba4bbb3a81404 (diff)
downloadlibmts-io-a949739583abb1fe30895edfda216e83ffdbef52.tar.gz
libmts-io-a949739583abb1fe30895edfda216e83ffdbef52.tar.bz2
libmts-io-a949739583abb1fe30895edfda216e83ffdbef52.zip
Merge branch 'sk/sim-carrier-detect' into 'mpower-5.2-lna7'
[GP-654] Add SIM card-based carrier detection See merge request !24
Diffstat (limited to 'src')
-rw-r--r--src/MTS_IO_CellularRadio.cpp43
-rw-r--r--src/MTS_IO_ICellularRadio.cpp5
2 files changed, 47 insertions, 1 deletions
diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp
index 648894f..b18478e 100644
--- a/src/MTS_IO_CellularRadio.cpp
+++ b/src/MTS_IO_CellularRadio.cpp
@@ -912,6 +912,49 @@ ICellularRadio::CODE CellularRadio::unlockSimCard(const Json::Value& jArgs) {
return SUCCESS;
}
+ICellularRadio::CODE CellularRadio::getSimCarrierCode(std::string& sCarrierCode) {
+ std::string sIccid;
+ CODE rc;
+
+ printTrace("%s| Get carrier code from the SIM card installed", m_sName.c_str());
+
+ rc = getIccid(sIccid);
+ if (rc != SUCCESS) {
+ printError("%s| Unable to determine SIM carrier: Failed to fetch SIM identifier", m_sName.c_str());
+ return rc;
+ }
+
+ printTrace("%s| Fetched ICCID: [%s]", m_sName.c_str(), sIccid.c_str());
+
+ rc = getSimCarrierCode(sIccid, sCarrierCode);
+ if (rc != SUCCESS) {
+ printError("%s| Unable to determine SIM carrier: Unable to extract carrier from the SIM identifier", m_sName.c_str());
+ return rc;
+ }
+
+ printTrace("%s| Detected carrier code: [%s]", m_sName.c_str(), sCarrierCode.c_str());
+ return rc;
+}
+
+ICellularRadio::CODE CellularRadio::getSimCarrierCode(const std::string& sIccid, std::string& sCarrierCode) {
+ const char* ICCID_PREFIX_VZW = "891480";
+ const char* ICCID_PREFIX_ATT = "8901410";
+
+ if (sIccid.find(ICCID_PREFIX_VZW) == 0) {
+ printTrace("%s| Verizon SIM detected", m_sName.c_str());
+ sCarrierCode = VALUE_CARRIER_CODE_VERIZON;
+ } else if (sIccid.find(ICCID_PREFIX_ATT) == 0) {
+ printTrace("%s| AT&T SIM detected", m_sName.c_str());
+ sCarrierCode = VALUE_CARRIER_CODE_ATT;
+ } else {
+ // All other carriers for which ICCID prefixes are not defined
+ printWarning("%s| Carrier is unknown for this SIM ID: [%s]", m_sName.c_str(), sIccid.c_str());
+ sCarrierCode = VALUE_UNKNOWN;
+ }
+
+ return SUCCESS; // no error cases for now
+}
+
ICellularRadio::CODE CellularRadio::validateMsl(const Json::Value&) {
printTrace("%s| Validate MSL", m_sName.c_str());
diff --git a/src/MTS_IO_ICellularRadio.cpp b/src/MTS_IO_ICellularRadio.cpp
index 53c8faa..12d7916 100644
--- a/src/MTS_IO_ICellularRadio.cpp
+++ b/src/MTS_IO_ICellularRadio.cpp
@@ -50,7 +50,7 @@ const char *MTS::IO::ICellularRadio::KEY_MDN = "mdn"; //!< Mobile Dir
const char *MTS::IO::ICellularRadio::KEY_ICCID = "iccid"; //!< Integrated Circuit Card Identifier
const char *MTS::IO::ICellularRadio::KEY_MSL = "msl"; //!< Master Subsidy Lock
const char *MTS::IO::ICellularRadio::KEY_SUPPORTED_CELL_MODES = "supportedCellularModes"; //!< Comma-separated list of all supported cellular modes (2g,3g,4g)
-
+const char *MTS::IO::ICellularRadio::KEY_SIM_CARRIER_CODE = "simCarrierCode"; //!< Unique carrier identifier based on the SIM card information.
//Dynamic Data
const char *MTS::IO::ICellularRadio::KEY_ROAMING = "roaming"; //!< Indicates whether or not using Home Network
const char *MTS::IO::ICellularRadio::KEY_DATETIME = "datetime"; //!< Date and Time from tower
@@ -112,6 +112,9 @@ const char *MTS::IO::ICellularRadio::VALUE_ABND_GSM_900 = "GSM 900";
const char *MTS::IO::ICellularRadio::VALUE_ABND_DCS_1800 = "DCS 1800";
const char *MTS::IO::ICellularRadio::VALUE_ABND_PCS_1900 = "PCS 1900";
+const char *MTS::IO::ICellularRadio::VALUE_CARRIER_CODE_VERIZON = "vz";
+const char *MTS::IO::ICellularRadio::VALUE_CARRIER_CODE_ATT = "att";
+
const std::vector<std::string> MTS::IO::ICellularRadio::DEFAULT_BAIL_STRINGS = { MTS::IO::ICellularRadio::RSP_OK, MTS::IO::ICellularRadio::RSP_ERROR };
MTS::IO::ICellularRadio::~ICellularRadio()