diff options
author | Serhii Kostiuk <serhii.o.kostiuk@globallogic.com> | 2020-06-16 11:50:20 +0300 |
---|---|---|
committer | Serhii Kostiuk <serhii.o.kostiuk@globallogic.com> | 2020-06-16 12:57:08 +0300 |
commit | 7634bcfed0ea186175e9f59672a38d2a86fbf025 (patch) | |
tree | 291b10f75b01b0d49073e7f8c2b7902c74ba0e8a /src | |
parent | c34ebcd0df9c5bdbeb5638e9a5498cbee6bab628 (diff) | |
download | libmts-io-7634bcfed0ea186175e9f59672a38d2a86fbf025.tar.gz libmts-io-7634bcfed0ea186175e9f59672a38d2a86fbf025.tar.bz2 libmts-io-7634bcfed0ea186175e9f59672a38d2a86fbf025.zip |
GP-654: Add SIM card-based carrier detection
This commit adds implementation of the SIM-based carrier detection.
The goal for this implementation is to replace various places in the firmware
that previously relied on the ICCID-based carrier detection, provide some layer
of abstraction and forward compatibility for such places.
It is particularly useful for fwSwitch radios with AUTO firmware selection capability.
Diffstat (limited to 'src')
-rw-r--r-- | src/MTS_IO_CellularRadio.cpp | 43 | ||||
-rw-r--r-- | src/MTS_IO_ICellularRadio.cpp | 4 |
2 files changed, 47 insertions, 0 deletions
diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp index 648894f..bef15e9 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::getMtsSimCarrierCode(std::string& sCarrierCode) { + std::string sIccid; + CODE rc; + + printTrace("%s| Get MTS 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 = getMtsSimCarrierCode(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 MTS carrier code: [%s]", m_sName.c_str(), sCarrierCode.c_str()); + return rc; +} + +ICellularRadio::CODE CellularRadio::getMtsSimCarrierCode(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_MTS_CARRIER_CODE_VERIZON; + } else if (sIccid.find(ICCID_PREFIX_ATT) == 0) { + printTrace("%s| AT&T SIM detected", m_sName.c_str()); + sCarrierCode = VALUE_MTS_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..e83ce80 100644 --- a/src/MTS_IO_ICellularRadio.cpp +++ b/src/MTS_IO_ICellularRadio.cpp @@ -50,6 +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_MTS_SIM_CARRIER_CODE = "mtsSimCarrierCode"; //!< MTS-specific carrier code fetched from the SIM card //Dynamic Data const char *MTS::IO::ICellularRadio::KEY_ROAMING = "roaming"; //!< Indicates whether or not using Home Network @@ -112,6 +113,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_MTS_CARRIER_CODE_VERIZON = "vz"; +const char *MTS::IO::ICellularRadio::VALUE_MTS_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() |