summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Hatch <jhatch@multitech.com>2021-04-16 10:57:54 -0500
committerJeff Hatch <jhatch@multitech.com>2021-04-16 10:57:54 -0500
commitbcd5443bcfff3e17ee120c305bbfd0ce2c812b21 (patch)
tree8baa012e02a30fb5eeb64e006db516da101cc8c8
parentb7f7d95092b87d0b278b1a74af53bfbc837b7acd (diff)
parentac88b70987f59e89ce5257941e61ad4f1021d65f (diff)
downloadlibmts-io-1.0.25.tar.gz
libmts-io-1.0.25.tar.bz2
libmts-io-1.0.25.zip
Merge branch 'ms/MTX-3998_quectel_set_cemode_2' into 'master' 1.0.25
[MTX-3998] mPower R. Apr 2021: +CEMODE shall be set to CEMODE=2 - Quectel - GP-1111 See merge request !38
-rw-r--r--include/mts/MTS_IO_CellularRadio.h4
-rw-r--r--include/mts/MTS_IO_ICellularRadio.h19
-rw-r--r--include/mts/MTS_IO_LE910Radio.h4
-rw-r--r--include/mts/MTS_IO_QuectelRadio.h12
-rw-r--r--src/MTS_IO_CellularRadio.cpp10
-rw-r--r--src/MTS_IO_ICellularRadio.cpp51
-rw-r--r--src/MTS_IO_LE910Radio.cpp70
-rw-r--r--src/MTS_IO_QuectelRadio.cpp155
8 files changed, 255 insertions, 70 deletions
diff --git a/include/mts/MTS_IO_CellularRadio.h b/include/mts/MTS_IO_CellularRadio.h
index 6840398..7e7454b 100644
--- a/include/mts/MTS_IO_CellularRadio.h
+++ b/include/mts/MTS_IO_CellularRadio.h
@@ -134,8 +134,8 @@ namespace MTS {
virtual std::string waitResponse(IsNeedMoreData& isNeedMoreData,
int32_t timeoutMillis = 100) override;
- CODE setUeModeOfOperation(UE_MODES_OF_OPERATION newmode) override;
- CODE getUeModeOfOperation(UE_MODES_OF_OPERATION& newmode) override;
+ CODE setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION mode) override;
+ CODE getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& mode) override;
protected:
diff --git a/include/mts/MTS_IO_ICellularRadio.h b/include/mts/MTS_IO_ICellularRadio.h
index e8ae891..e638e8b 100644
--- a/include/mts/MTS_IO_ICellularRadio.h
+++ b/include/mts/MTS_IO_ICellularRadio.h
@@ -70,18 +70,20 @@ namespace MTS {
enum UE_MODES_OF_OPERATION : uint8_t {
UNKNOWN_MODE = 0, // current mode of operation is not available
- PS_MODE1, // only EPS (LTE) services are allowed, the usage is “voice centric”
- PS_MODE2, // only EPS (LTE) services are allowed, the usage is “data centric”
- CS_PS_MODE1, // both EPS and non-EPS services are allowed, the usage is “voice centric”
- CS_PS_MODE2 // both EPS and non-EPS services are allowed, the usage is “data centric”
+ PS_MODE1, // only EPS (LTE) services are allowed, the usage is "voice centric"
+ PS_MODE2, // only EPS (LTE) services are allowed, the usage is "data centric"
+ CS_PS_MODE1, // both EPS and non-EPS services are allowed, the usage is "voice centric"
+ CS_PS_MODE2, // both EPS and non-EPS services are allowed, the usage is "data centric"
+ CS_MODE1, // only non-EPS services are allowed, the usage is "voice centric"
+ CS_MODE2 // only non-EPS services are allowed, the usage is "data centric"
};
static CODE convertModelToType(const std::string& sModel, std::string& sType);
static CODE convertModelToMtsShortCode(const std::string& sModel, std::string& sCode, ICellularRadio *radioObj = NULL);
static CODE convertServiceDomainToString(SERVICEDOMAIN eSd, std::string& sSd);
static CODE convertActiveBandToString(ACTIVEBAND eBand, std::string& sBand);
- static CODE convertUeModeToString(UE_MODES_OF_OPERATION mode, std::string& string);
- static CODE convertStringToUeMode(const std::string& sMode, UE_MODES_OF_OPERATION& mode);
+ static CODE convertUeModeToString(ICellularRadio::UE_MODES_OF_OPERATION mode, std::string& sMode);
+ static CODE convertStringToUeMode(const std::string& sMode, ICellularRadio::UE_MODES_OF_OPERATION& mode);
static std::string sendCommand(MTS::AutoPtr<MTS::IO::Connection>& apIo,
const std::string& sCmd,
@@ -572,9 +574,8 @@ namespace MTS {
virtual std::string waitResponse(IsNeedMoreData& isNeedMoreData,
int32_t timeoutMillis = 100) = 0;
-
- virtual CODE setUeModeOfOperation(UE_MODES_OF_OPERATION newmode) = 0;
- virtual CODE getUeModeOfOperation(UE_MODES_OF_OPERATION& newmode) = 0;
+ virtual CODE setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION mode) = 0;
+ virtual CODE getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& mode) = 0;
};
}
}
diff --git a/include/mts/MTS_IO_LE910Radio.h b/include/mts/MTS_IO_LE910Radio.h
index e8a0dec..2ba423d 100644
--- a/include/mts/MTS_IO_LE910Radio.h
+++ b/include/mts/MTS_IO_LE910Radio.h
@@ -45,8 +45,8 @@ namespace MTS {
CODE setRxDiversity(const Json::Value& jArgs);
CODE getModemLocation(std::string& sLocation);
- CODE setUeModeOfOperation(UE_MODES_OF_OPERATION newmode) override;
- CODE getUeModeOfOperation(UE_MODES_OF_OPERATION &newmode) override;
+ CODE setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION mode) override;
+ CODE getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& mode) override;
protected:
diff --git a/include/mts/MTS_IO_QuectelRadio.h b/include/mts/MTS_IO_QuectelRadio.h
index 9713f48..c46b39b 100644
--- a/include/mts/MTS_IO_QuectelRadio.h
+++ b/include/mts/MTS_IO_QuectelRadio.h
@@ -51,7 +51,16 @@ namespace MTS {
CODE fumoLocalCleanup() override;
CODE fumoLocalApply(UpdateCb& stepCb) override;
+ CODE setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION mode) override;
+ CODE getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& mode) override;
+
protected:
+ enum class UE_USAGE_SETTING : uint8_t {
+ UNKNOWN_MODE = 0, // Unknown mode
+ MODE_1, // Voice centric mode
+ MODE_2 // Data centric mode
+ };
+
QuectelRadio(const std::string& sName, const std::string& sRadioPort);
CODE getIsSimInserted(bool& bData) override;
@@ -64,6 +73,9 @@ namespace MTS {
virtual CODE removeFile(const std::string& sTargetFilename);
virtual CODE checkFile(bool& bFilePresent, const std::string& sTargetFilename);
+ virtual CODE getUeUsageSetting(QuectelRadio::UE_USAGE_SETTING& us);
+ virtual CODE convertToUeUsageSetting(const std::string& sSetting, QuectelRadio::UE_USAGE_SETTING& us);
+
private:
// private variable to save old firmware versions during FOTA
std::string m_sQuectelFirmware;
diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp
index 49bdcb4..c2fcfad 100644
--- a/src/MTS_IO_CellularRadio.cpp
+++ b/src/MTS_IO_CellularRadio.cpp
@@ -1379,13 +1379,13 @@ ICellularRadio::CODE CellularRadio::readChunk(int fd, char* pChunk, size_t dChun
return rc;
}
-ICellularRadio::CODE CellularRadio::setUeModeOfOperation(UE_MODES_OF_OPERATION newmode) {
+ICellularRadio::CODE CellularRadio::setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION mode) {
printTrace("%s| Set UE Mode Of Operation: not applicable", m_sName.c_str());
- return CODE::NOT_APPLICABLE;
+ return NOT_APPLICABLE;
}
-ICellularRadio::CODE CellularRadio::getUeModeOfOperation(UE_MODES_OF_OPERATION &newmode) {
+ICellularRadio::CODE CellularRadio::getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& mode) {
printTrace("%s| Get UE Mode Of Operation: not applicable", m_sName.c_str());
- newmode = UE_MODES_OF_OPERATION::UNKNOWN_MODE;
- return CODE::NOT_APPLICABLE;
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::UNKNOWN_MODE;
+ return NOT_APPLICABLE;
}
diff --git a/src/MTS_IO_ICellularRadio.cpp b/src/MTS_IO_ICellularRadio.cpp
index 9f63408..0483dc8 100644
--- a/src/MTS_IO_ICellularRadio.cpp
+++ b/src/MTS_IO_ICellularRadio.cpp
@@ -513,51 +513,64 @@ std::string MTS::IO::ICellularRadio::getCodeAsString(CODE eCode) {
}
}
-MTS::IO::ICellularRadio::CODE MTS::IO::ICellularRadio::convertUeModeToString(MTS::IO::ICellularRadio::UE_MODES_OF_OPERATION mode, std::string &string) {
+MTS::IO::ICellularRadio::CODE MTS::IO::ICellularRadio::convertUeModeToString(ICellularRadio::UE_MODES_OF_OPERATION mode, std::string& sMode) {
CODE rc;
switch (mode) {
case ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1:
- string = "ps_1";
- rc = CODE::SUCCESS;
+ sMode = "ps_1";
+ rc = SUCCESS;
break;
case ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2:
- string = "ps_2";
- rc = CODE::SUCCESS;
+ sMode = "ps_2";
+ rc = SUCCESS;
break;
case ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1:
- string = "csps_1";
- rc = CODE::SUCCESS;
+ sMode = "csps_1";
+ rc = SUCCESS;
break;
case ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2:
- string = "csps_2";
- rc = CODE::SUCCESS;
+ sMode = "csps_2";
+ rc = SUCCESS;
+ break;
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE1:
+ sMode = "cs_1";
+ rc = SUCCESS;
+ break;
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE2:
+ sMode = "cs_2";
+ rc = SUCCESS;
break;
default:
- string = MTS::IO::ICellularRadio::VALUE_UNKNOWN;
- rc = CODE::FAILURE;
+ sMode = ICellularRadio::VALUE_UNKNOWN;
+ rc = FAILURE;
break;
}
return rc;
}
-MTS::IO::ICellularRadio::CODE MTS::IO::ICellularRadio::convertStringToUeMode(const std::string &sMode, UE_MODES_OF_OPERATION& mode) {
- using namespace MTS::IO;
+MTS::IO::ICellularRadio::CODE MTS::IO::ICellularRadio::convertStringToUeMode(const std::string& sMode, ICellularRadio::UE_MODES_OF_OPERATION& mode) {
CODE rc;
if (sMode == "ps_1") {
mode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1;
- rc = CODE::SUCCESS;
+ rc = SUCCESS;
} else if (sMode == "ps_2") {
mode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2;
- rc = CODE::SUCCESS;
+ rc = SUCCESS;
} else if (sMode == "csps_1") {
mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1;
- rc = CODE::SUCCESS;
+ rc = SUCCESS;
} else if (sMode == "csps_2") {
mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2;
- rc = CODE::SUCCESS;
+ rc = SUCCESS;
+ } else if (sMode == "cs_1") {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE1;
+ rc = SUCCESS;
+ } else if (sMode == "cs_2") {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE2;
+ rc = SUCCESS;
} else {
- mode = ICellularRadio::UNKNOWN_MODE;
- rc = CODE::FAILURE;
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::UNKNOWN_MODE;
+ rc = FAILURE;
}
return rc;
}
diff --git a/src/MTS_IO_LE910Radio.cpp b/src/MTS_IO_LE910Radio.cpp
index 764ac5e..ba03c5e 100644
--- a/src/MTS_IO_LE910Radio.cpp
+++ b/src/MTS_IO_LE910Radio.cpp
@@ -78,51 +78,55 @@ ICellularRadio::CODE LE910Radio::getModemLocation(std::string& sLocation) {
return SUCCESS;
}
-ICellularRadio::CODE LE910Radio::setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION newmode) {
- uint8_t iValue;
+ICellularRadio::CODE LE910Radio::setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION mode) {
+ printTrace("%s| Set UE Mode Of Operation", getName().c_str());
- switch (newmode) {
- case UE_MODES_OF_OPERATION::PS_MODE1:
- iValue = 3;
+ std::string sValue;
+
+ switch (mode) {
+ case ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1:
+ sValue = "3";
break;
- case UE_MODES_OF_OPERATION::PS_MODE2:
- iValue = 0;
+ case ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2:
+ sValue = "0";
break;
- case UE_MODES_OF_OPERATION::CS_PS_MODE1:
- iValue = 1;
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1:
+ sValue = "1";
break;
- case UE_MODES_OF_OPERATION::CS_PS_MODE2:
- iValue = 2;
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2:
+ sValue = "2";
break;
default:
- printTrace("Set UE Mode Of Operation: invalid argument");
- return CODE::INVALID_ARGS;
+ printError("%s| Set UE Mode Of Operation: invalid argument", getName().c_str());
+ return INVALID_ARGS;
}
const int dTimeout = 1000; // ms
- const std::string sCommand = "AT+CEMODE=" + MTS::Text::format(iValue);
+ const std::string sCommand = "AT+CEMODE=" + sValue;
return sendBasicCommand(sCommand, dTimeout);
}
-ICellularRadio::CODE LE910Radio::getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& newmode) {
+ICellularRadio::CODE LE910Radio::getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& mode) {
+ printTrace("%s| Get UE Mode Of Operation", getName().c_str());
+
const std::string sCommand = "AT+CEMODE?";
const int dTimeout = 1000; // ms
std::string sResult = sendCommand(sCommand, ICellularRadio::DEFAULT_BAIL_STRINGS, dTimeout);
- printTrace("Got response from the radio: %s", sResult.c_str());
+ printTrace("%s| Got response from the radio: %s", getName().c_str(), sResult.c_str());
size_t end = sResult.rfind(ICellularRadio::RSP_OK);
if (std::string::npos == end) {
- printWarning("Unable to get UE Mode Of Operation from radio using command [%s]", sCommand.c_str());
- return CODE::FAILURE;
+ printError("%s| Unable to get UE Mode Of Operation from radio using command [%s]", getName().c_str(), sCommand.c_str());
+ return FAILURE;
}
const std::string sLabel = "+CEMODE: ";
size_t start = sResult.find(sLabel);
if (std::string::npos == start) {
- printWarning("Unable to get UE Mode Of Operation from radio using command [%s]", sCommand.c_str());
- return CODE::FAILURE;
+ printError("%s| Unable to get UE Mode Of Operation from radio using command [%s]", getName().c_str(), sCommand.c_str());
+ return FAILURE;
}
start += sLabel.length();
@@ -130,32 +134,32 @@ ICellularRadio::CODE LE910Radio::getUeModeOfOperation(ICellularRadio::UE_MODES_O
uint8_t uiValue;
if (!MTS::Text::parse(uiValue, sValue)) {
- printWarning("Unable to parse CEMODE from response [%s]", sResult.c_str());
- return CODE::FAILURE;
+ printError("%s| Unable to parse CEMODE from response [%s]", getName().c_str(), sResult.c_str());
+ return FAILURE;
}
CODE rc;
switch (uiValue) {
case 0:
- newmode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2;
- rc = CODE::SUCCESS;
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2;
+ rc = SUCCESS;
break;
case 1:
- newmode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1;
- rc = CODE::SUCCESS;
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1;
+ rc = SUCCESS;
break;
case 2:
- newmode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2;
- rc = CODE::SUCCESS;
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2;
+ rc = SUCCESS;
break;
case 3:
- newmode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1;
- rc = CODE::SUCCESS;
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1;
+ rc = SUCCESS;
break;
default:
- printWarning("Unable to parse CEMODE from response [%s]", sResult.c_str());
- newmode = ICellularRadio::UE_MODES_OF_OPERATION::UNKNOWN_MODE;
- rc = CODE::FAILURE;
+ printError("%s| Unable to parse CEMODE from response [%s]", getName().c_str(), sResult.c_str());
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::UNKNOWN_MODE;
+ rc = FAILURE;
break;
}
return rc;
diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp
index aeb06ab..b6eab80 100644
--- a/src/MTS_IO_QuectelRadio.cpp
+++ b/src/MTS_IO_QuectelRadio.cpp
@@ -1221,3 +1221,158 @@ ICellularRadio::CODE QuectelRadio::abortFileUpload() {
sleep(1);
return sendBasicCommand(CMD_ABORT_UPLOAD, 2000, 0x00);
}
+
+ICellularRadio::CODE QuectelRadio::setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION mode) {
+ printTrace("%s| Set UE Mode Of Operation", getName().c_str());
+
+ std::string sDomain, sPreference;
+
+ switch (mode) {
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE1:
+ sDomain = "0";
+ sPreference = "00";
+ break;
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE2:
+ sDomain = "0";
+ sPreference = "01";
+ break;
+ case ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1:
+ sDomain = "1";
+ sPreference = "00";
+ break;
+ case ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2:
+ sDomain = "1";
+ sPreference = "01";
+ break;
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1:
+ sDomain = "2";
+ sPreference = "00";
+ break;
+ case ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2:
+ sDomain = "2";
+ sPreference = "01";
+ break;
+ default:
+ printError("%s| Set UE Mode Of Operation: invalid argument", getName().c_str());
+ return INVALID_ARGS;
+ }
+
+ CODE rc;
+ const int dTimeout = 1000; // ms
+ std::string sCommand = "AT+QNVFW=\"/nv/item_files/modem/mmode/ue_usage_setting\"," + sPreference;
+
+ rc = sendBasicCommand(sCommand, dTimeout);
+ if (rc != SUCCESS) {
+ printError("%s| Voice/data preference configuration failed with code [%d]", getName().c_str(), rc);
+ return rc;
+ }
+
+ sCommand = "AT+QCFG=\"servicedomain\"," + sDomain + ",0";
+
+ rc = sendBasicCommand(sCommand, dTimeout);
+ if (rc != SUCCESS) {
+ printError("%s| Service domain configuration failed with code [%d]", getName().c_str(), rc);
+ return rc;
+ }
+
+ return SUCCESS;
+}
+
+ICellularRadio::CODE QuectelRadio::getUeUsageSetting(QuectelRadio::UE_USAGE_SETTING& us) {
+ printTrace("%s| Get UE Usage Setting", getName().c_str());
+
+ std::string sCmd("AT+QNVFR=\"/nv/item_files/modem/mmode/ue_usage_setting\"");
+ std::string sResult = sendCommand(sCmd);
+ size_t end = sResult.find(ICellularRadio::RSP_OK);
+
+ if (end == std::string::npos) {
+ printError("%s| Unable to get UE Usage Setting [%s]", getName().c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ // +QNVFR: <voice/data preference>
+ const std::string sLabel = "+QNVFR: ";
+ size_t start = sResult.find(sLabel);
+ if (start == std::string::npos) {
+ printError("%s| Failed to parse UE Usage Setting from output [%s]", getName().c_str(), sResult.c_str());
+ return FAILURE;
+ }
+
+ start += sLabel.length();
+ const std::string sPreference = MTS::Text::trim(sResult.substr(start, end - start));
+
+ if (convertToUeUsageSetting(sPreference, us) != SUCCESS) {
+ printError("%s| Unable to convert [%s] to UE Usage Setting", getName().c_str(), sPreference.c_str());
+ return FAILURE;
+ }
+
+ return SUCCESS;
+}
+
+ICellularRadio::CODE QuectelRadio::convertToUeUsageSetting(const std::string& sSetting, QuectelRadio::UE_USAGE_SETTING& us) {
+ if (sSetting == "00") {
+ us = QuectelRadio::UE_USAGE_SETTING::MODE_1;
+ return SUCCESS;
+ }
+
+ if (sSetting == "01") {
+ us = QuectelRadio::UE_USAGE_SETTING::MODE_2;
+ return SUCCESS;
+ }
+
+ us = QuectelRadio::UE_USAGE_SETTING::UNKNOWN_MODE;
+ return FAILURE;
+}
+
+ICellularRadio::CODE QuectelRadio::getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& mode) {
+ printTrace("%s| Get UE Mode Of Operation", getName().c_str());
+
+ SERVICEDOMAIN sd;
+ UE_USAGE_SETTING us;
+
+ if (getServiceDomain(sd) != SUCCESS) {
+ return FAILURE;
+ }
+
+ printTrace("%s| Retrieved servicedomain [%d]", getName().c_str(), sd);
+
+ if (getUeUsageSetting(us) != SUCCESS) {
+ return FAILURE;
+ }
+
+ printTrace("%s| Retrieved ue_usage_setting [%d]", getName().c_str(), us);
+
+ if (sd == ICellularRadio::SERVICEDOMAIN::CS_ONLY && us == QuectelRadio::UE_USAGE_SETTING::MODE_1) {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE1;
+ return SUCCESS;
+ }
+
+ if (sd == ICellularRadio::SERVICEDOMAIN::CS_ONLY && us == QuectelRadio::UE_USAGE_SETTING::MODE_2) {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_MODE2;
+ return SUCCESS;
+ }
+
+ if (sd == ICellularRadio::SERVICEDOMAIN::PS_ONLY && us == QuectelRadio::UE_USAGE_SETTING::MODE_1) {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1;
+ return SUCCESS;
+ }
+
+ if (sd == ICellularRadio::SERVICEDOMAIN::PS_ONLY && us == QuectelRadio::UE_USAGE_SETTING::MODE_2) {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2;
+ return SUCCESS;
+ }
+
+ if (sd == ICellularRadio::SERVICEDOMAIN::CSPS && us == QuectelRadio::UE_USAGE_SETTING::MODE_1) {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1;
+ return SUCCESS;
+ }
+
+ if (sd == ICellularRadio::SERVICEDOMAIN::CSPS && us == QuectelRadio::UE_USAGE_SETTING::MODE_2) {
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2;
+ return SUCCESS;
+ }
+
+ printError("%s| Unknown combination of servicedomain [%d] and ue_usage_setting [%d]", getName().c_str(), sd, us);
+ mode = ICellularRadio::UE_MODES_OF_OPERATION::UNKNOWN_MODE;
+ return FAILURE;
+}