From 42d384984b2f760bc8f7a69c7ea3464c73f4d892 Mon Sep 17 00:00:00 2001
From: Serhii Kostiuk <serhii.o.kostiuk@globallogic.com>
Date: Tue, 2 Jun 2020 17:19:03 +0300
Subject: [GP-651] LNA7: Allow to start the OMA DM procedure when it is
 required

This commits adds support for the Quectel-specific OMA DM commands.
This allows to trigger OMA DM procedure om Verizon to fetch the corrent APN
values and other settings from the network.

Expected radio output on success:

```
+QODM: "DME",0,DM Start
+QODM: "DME",0,DM End
```

Other +QODM URC codes are also possible according to information from Quectel forum:
https://forums.quectel.com/t/what-is-the-meaning-of-qodm-fumo-report-failed/2444/5.

But only "DM Start" and "DM End" responses are expected, supported and treated
as correct in the libmts-io.
---
 include/mts/MTS_IO_CellularRadio.h  | 1 +
 include/mts/MTS_IO_ICellularRadio.h | 3 +++
 include/mts/MTS_IO_QuectelRadio.h   | 1 +
 3 files changed, 5 insertions(+)

(limited to 'include')

diff --git a/include/mts/MTS_IO_CellularRadio.h b/include/mts/MTS_IO_CellularRadio.h
index 56506af..7f4ed2b 100644
--- a/include/mts/MTS_IO_CellularRadio.h
+++ b/include/mts/MTS_IO_CellularRadio.h
@@ -100,6 +100,7 @@ namespace MTS {
                 CODE updateFumo(const Json::Value& jArgs, UpdateCb& stepCb) override;
                 CODE resetHfa(const Json::Value& jArgs, UpdateCb& stepCb) override;
                 CODE activate(const Json::Value& jArgs, UpdateCb& stepCb) override;
+                CODE startOmaDm(UpdateCb& stepCb) override;
                 CODE setActiveFirmware(const Json::Value& jArgs) override;
                 CODE getActiveFirmware(std::string& sFwId) override;
                 CODE getEcho(bool& bEnabled) override;
diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h
index 58d5076..c301191 100644
--- a/include/mts/MTS_IO_ICellularRadio.h
+++ b/include/mts/MTS_IO_ICellularRadio.h
@@ -431,6 +431,9 @@ namespace MTS {
                  *     "fwid" : "Firmware Image To Be Enabled: STRING"
                  * }
                  */
+
+                virtual CODE startOmaDm(UpdateCb& stepCb) = 0;
+
                 virtual CODE setActiveFirmware(const Json::Value& jArgs) = 0;
                 virtual CODE getActiveFirmware(std::string& sFwId) = 0;
 
diff --git a/include/mts/MTS_IO_QuectelRadio.h b/include/mts/MTS_IO_QuectelRadio.h
index df3b5b5..1dc45cd 100644
--- a/include/mts/MTS_IO_QuectelRadio.h
+++ b/include/mts/MTS_IO_QuectelRadio.h
@@ -41,6 +41,7 @@ namespace MTS {
                 CODE convertdBmToSignalStrength(const int32_t& dBm, int32_t& iRssi) override;
 
                 CODE setMdn(const Json::Value& jArgs) override;
+                CODE startOmaDm(ICellularRadio::UpdateCb& stepCb) override;
 
             protected:
                 QuectelRadio(const std::string& sName, const std::string& sRadioPort);
-- 
cgit v1.2.3


From 7634bcfed0ea186175e9f59672a38d2a86fbf025 Mon Sep 17 00:00:00 2001
From: Serhii Kostiuk <serhii.o.kostiuk@globallogic.com>
Date: Tue, 16 Jun 2020 11:50:20 +0300
Subject: 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.
---
 include/mts/MTS_IO_CellularRadio.h  |  4 ++++
 include/mts/MTS_IO_ICellularRadio.h | 21 +++++++++++++++++++++
 2 files changed, 25 insertions(+)

(limited to 'include')

diff --git a/include/mts/MTS_IO_CellularRadio.h b/include/mts/MTS_IO_CellularRadio.h
index 7f4ed2b..e65eb4e 100644
--- a/include/mts/MTS_IO_CellularRadio.h
+++ b/include/mts/MTS_IO_CellularRadio.h
@@ -81,6 +81,7 @@ namespace MTS {
                 CODE convertCellModesToString(CELLULAR_MODES eCellModes, std::string& sCellModes) override;
 
                 CODE unlockSimCard(const Json::Value& jArgs) override;
+                CODE getMtsSimCarrierCode(std::string& sCarrier) override;
 
                 CODE getMipProfile(Json::Value& jMipProfile) override;
                 CODE validateMsl(const Json::Value& jArgs) override;
@@ -164,6 +165,9 @@ namespace MTS {
                  */
                 virtual CODE getSimLockAttempts(int& iAttemptsPin, int& iAttemptsPuk) = 0;
 
+                //! Get MTS carrier code based on the SIM card ID (ICCID)
+                virtual CODE getMtsSimCarrierCode(const std::string& sIccid, std::string& sCarrier);
+
                 void initMipProfile(Json::Value& jData);
                 bool splitAndAssign(const std::string& sLine, const std::string& sKey, Json::Value& jParent, const std::string& sJsonKey, Json::ValueType eType = Json::ValueType::stringValue);
 
diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h
index c301191..98c886d 100644
--- a/include/mts/MTS_IO_ICellularRadio.h
+++ b/include/mts/MTS_IO_ICellularRadio.h
@@ -127,6 +127,7 @@ namespace MTS {
                 static const char *KEY_ICCID;         //!< Integrated Circuit Card Identifier
                 static const char *KEY_MSL;           //!< Master Subsidy Lock
                 static const char *KEY_SUPPORTED_CELL_MODES;  //!< Comma-separated list of all supported cellular modes (2g,3g,4g)
+                static const char *KEY_MTS_SIM_CARRIER_CODE;  //!< MTS-specific carrier code fetched from the SIM card
 
 
                 //Network Status Data
@@ -200,6 +201,10 @@ namespace MTS {
                 static const char *VALUE_ABND_DCS_1800;
                 static const char *VALUE_ABND_PCS_1900;
 
+                //Values - MTS carrier code
+                static const char *VALUE_MTS_CARRIER_CODE_VERIZON;
+                static const char *VALUE_MTS_CARRIER_CODE_ATT;
+
                 static const std::vector<std::string> DEFAULT_BAIL_STRINGS;
 
                 virtual ~ICellularRadio() = 0;
@@ -290,6 +295,22 @@ namespace MTS {
                  */
                 virtual CODE unlockSimCard(const Json::Value& jArgs) = 0;
 
+                /**
+                 * @brief getMtsSimCarrierCode - get MTS-specific carrier code from the SIM card.
+                 *
+                 * @param sCarrier - a string to be populated with one of the carrier codes:
+                 *
+                 *        - VALUE_MTS_CARRIER_CODE_VERIZON - Verizon
+                 *        - VALUE_MTS_CARRIER_CODE_ATT - AT&T
+                 *        - VALUE_UNKNOWN - Unknown carrier
+                 *        - other values may be defined in the future
+                 *
+                 * @return CODE::SUCCESS when carrier name retrieved,
+                 *         CODE::ERROR otherwise (i.e. when modem is not responding,
+                 *         when SIM card is removed or on any other error).
+                 */
+                virtual CODE getMtsSimCarrierCode(std::string& sCarrier) = 0;
+
                 //! Gather details of the radio's Mobile IP Profile
                 /*!
                  \param Json::Value object that will be populated with MIP data
-- 
cgit v1.2.3


From 747b898f36c4764475e61f20847ba4bbb3a81404 Mon Sep 17 00:00:00 2001
From: Serhii Kostiuk <serhii.o.kostiuk@globallogic.com>
Date: Tue, 16 Jun 2020 15:37:02 +0300
Subject: [GP-654] Add SIM card-based carrier detection

Changes after a code review:

- renamed "MTS Carrier Code" to the "Carrier Code";
- fixed descriptions for the new field and methods.
---
 include/mts/MTS_IO_CellularRadio.h  |  6 +++---
 include/mts/MTS_IO_ICellularRadio.h | 19 ++++++++++---------
 2 files changed, 13 insertions(+), 12 deletions(-)

(limited to 'include')

diff --git a/include/mts/MTS_IO_CellularRadio.h b/include/mts/MTS_IO_CellularRadio.h
index e65eb4e..ed87a24 100644
--- a/include/mts/MTS_IO_CellularRadio.h
+++ b/include/mts/MTS_IO_CellularRadio.h
@@ -81,7 +81,7 @@ namespace MTS {
                 CODE convertCellModesToString(CELLULAR_MODES eCellModes, std::string& sCellModes) override;
 
                 CODE unlockSimCard(const Json::Value& jArgs) override;
-                CODE getMtsSimCarrierCode(std::string& sCarrier) override;
+                CODE getSimCarrierCode(std::string& sCarrierCode) override;
 
                 CODE getMipProfile(Json::Value& jMipProfile) override;
                 CODE validateMsl(const Json::Value& jArgs) override;
@@ -165,8 +165,8 @@ namespace MTS {
                  */
                 virtual CODE getSimLockAttempts(int& iAttemptsPin, int& iAttemptsPuk) = 0;
 
-                //! Get MTS carrier code based on the SIM card ID (ICCID)
-                virtual CODE getMtsSimCarrierCode(const std::string& sIccid, std::string& sCarrier);
+                //! Get carrier code based on the SIM card ID (ICCID)
+                virtual CODE getSimCarrierCode(const std::string& sIccid, std::string& sCarrierCode);
 
                 void initMipProfile(Json::Value& jData);
                 bool splitAndAssign(const std::string& sLine, const std::string& sKey, Json::Value& jParent, const std::string& sJsonKey, Json::ValueType eType = Json::ValueType::stringValue);
diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h
index 98c886d..f2d4dfe 100644
--- a/include/mts/MTS_IO_ICellularRadio.h
+++ b/include/mts/MTS_IO_ICellularRadio.h
@@ -127,7 +127,7 @@ namespace MTS {
                 static const char *KEY_ICCID;         //!< Integrated Circuit Card Identifier
                 static const char *KEY_MSL;           //!< Master Subsidy Lock
                 static const char *KEY_SUPPORTED_CELL_MODES;  //!< Comma-separated list of all supported cellular modes (2g,3g,4g)
-                static const char *KEY_MTS_SIM_CARRIER_CODE;  //!< MTS-specific carrier code fetched from the SIM card
+                static const char *KEY_SIM_CARRIER_CODE;  //!< Unique carrier identifier based on the SIM card information.
 
 
                 //Network Status Data
@@ -201,9 +201,9 @@ namespace MTS {
                 static const char *VALUE_ABND_DCS_1800;
                 static const char *VALUE_ABND_PCS_1900;
 
-                //Values - MTS carrier code
-                static const char *VALUE_MTS_CARRIER_CODE_VERIZON;
-                static const char *VALUE_MTS_CARRIER_CODE_ATT;
+                //Values - Carrier code; abstraction over PLMN IDs, IINs and other identifiers
+                static const char *VALUE_CARRIER_CODE_VERIZON;
+                static const char *VALUE_CARRIER_CODE_ATT;
 
                 static const std::vector<std::string> DEFAULT_BAIL_STRINGS;
 
@@ -296,20 +296,21 @@ namespace MTS {
                 virtual CODE unlockSimCard(const Json::Value& jArgs) = 0;
 
                 /**
-                 * @brief getMtsSimCarrierCode - get MTS-specific carrier code from the SIM card.
+                 * @brief getSimCarrierCode - get unique carrier identifier based on
+                 *        the SIM card information.
                  *
                  * @param sCarrier - a string to be populated with one of the carrier codes:
                  *
-                 *        - VALUE_MTS_CARRIER_CODE_VERIZON - Verizon
-                 *        - VALUE_MTS_CARRIER_CODE_ATT - AT&T
+                 *        - VALUE_CARRIER_CODE_VERIZON - Verizon
+                 *        - VALUE_CARRIER_CODE_ATT - AT&T
                  *        - VALUE_UNKNOWN - Unknown carrier
                  *        - other values may be defined in the future
                  *
-                 * @return CODE::SUCCESS when carrier name retrieved,
+                 * @return CODE::SUCCESS when carrier code retrieved,
                  *         CODE::ERROR otherwise (i.e. when modem is not responding,
                  *         when SIM card is removed or on any other error).
                  */
-                virtual CODE getMtsSimCarrierCode(std::string& sCarrier) = 0;
+                virtual CODE getSimCarrierCode(std::string& sCarrierCode) = 0;
 
                 //! Gather details of the radio's Mobile IP Profile
                 /*!
-- 
cgit v1.2.3