summaryrefslogtreecommitdiff
path: root/src/MTS_IO_LE910Radio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/MTS_IO_LE910Radio.cpp')
-rw-r--r--src/MTS_IO_LE910Radio.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/MTS_IO_LE910Radio.cpp b/src/MTS_IO_LE910Radio.cpp
index ea905a8..764ac5e 100644
--- a/src/MTS_IO_LE910Radio.cpp
+++ b/src/MTS_IO_LE910Radio.cpp
@@ -29,6 +29,7 @@
#include <mts/MTS_IO_LE910Radio.h>
#include <mts/MTS_Logger.h>
+#include <mts/MTS_Text.h>
using namespace MTS::IO;
@@ -76,3 +77,87 @@ ICellularRadio::CODE LE910Radio::getModemLocation(std::string& sLocation) {
return SUCCESS;
}
+
+ICellularRadio::CODE LE910Radio::setUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION newmode) {
+ uint8_t iValue;
+
+ switch (newmode) {
+ case UE_MODES_OF_OPERATION::PS_MODE1:
+ iValue = 3;
+ break;
+ case UE_MODES_OF_OPERATION::PS_MODE2:
+ iValue = 0;
+ break;
+ case UE_MODES_OF_OPERATION::CS_PS_MODE1:
+ iValue = 1;
+ break;
+ case UE_MODES_OF_OPERATION::CS_PS_MODE2:
+ iValue = 2;
+ break;
+ default:
+ printTrace("Set UE Mode Of Operation: invalid argument");
+ return CODE::INVALID_ARGS;
+ }
+
+ const int dTimeout = 1000; // ms
+ const std::string sCommand = "AT+CEMODE=" + MTS::Text::format(iValue);
+
+ return sendBasicCommand(sCommand, dTimeout);
+}
+
+ICellularRadio::CODE LE910Radio::getUeModeOfOperation(ICellularRadio::UE_MODES_OF_OPERATION& newmode) {
+ 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());
+
+ 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;
+ }
+
+ 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;
+ }
+
+ start += sLabel.length();
+ const std::string sValue = MTS::Text::trim(sResult.substr(start, end - start));
+ uint8_t uiValue;
+
+ if (!MTS::Text::parse(uiValue, sValue)) {
+ printWarning("Unable to parse CEMODE from response [%s]", sResult.c_str());
+ return CODE::FAILURE;
+ }
+
+ CODE rc;
+ switch (uiValue) {
+ case 0:
+ newmode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE2;
+ rc = CODE::SUCCESS;
+ break;
+ case 1:
+ newmode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE1;
+ rc = CODE::SUCCESS;
+ break;
+ case 2:
+ newmode = ICellularRadio::UE_MODES_OF_OPERATION::CS_PS_MODE2;
+ rc = CODE::SUCCESS;
+ break;
+ case 3:
+ newmode = ICellularRadio::UE_MODES_OF_OPERATION::PS_MODE1;
+ rc = CODE::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;
+ break;
+ }
+ return rc;
+}
+