From 4210d68ee7f11599e5d414193390b7ae65f0cfb4 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Thu, 25 Jul 2019 18:09:24 +0300 Subject: MTX-2891 mpower: 2-3-4g switch implementation --- main.cpp | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index d72faee..85c7563 100644 --- a/main.cpp +++ b/main.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include "Version.h" const std::string DEFAULT_PORT("/dev/modem_at1"); @@ -68,6 +69,7 @@ std::string g_sConfigFile; Json::Value g_jData; std::string g_sRadioMode; std::string g_sSimPin; +std::string g_sPreferredNetworks; MTS::AutoPtr g_apRadio; @@ -75,7 +77,7 @@ int32_t g_iOptions = 0; const uint32_t OPT_INDIVIDUAL = 0x01FFFFFF; const uint32_t OPT_SUMMARY = 0x7E000000; -const uint32_t OPT_INITIALIZE = 0x10000000; +const uint32_t OPT_INITIALIZE = 0x80000000; const uint32_t OPT_TIMEOUT = 0x00000001; const uint32_t OPT_DEVICE = 0x00000002; @@ -109,6 +111,11 @@ const uint32_t OPT_SET_RADIOMODE = 0x10000000; const uint32_t OPT_UNLOCK_SIM_CARD = 0x20000000; const uint32_t OPT_RESET_RADIO = 0x40000000; +int32_t g_iAuxOptions = 0; +const uint32_t AOPT_GET_AVAIL_PREF_NET = 0x00000001; +const uint32_t AOPT_GET_PREFERRED_NET = 0x00000002; +const uint32_t AOPT_SET_PREFERRED_NET = 0x00000004; + void handle_sigterm(int signum); void printHelp(const std::string& sApp); void parseOptions(int argc, char** argv); @@ -118,6 +125,8 @@ const char *code2str(MTS::IO::ICellularRadio::CODE code); std::string loadImeiFromDeviceInfo(); MTS::IO::ICellularRadio::RADIO_NETWORK_MODE radioModeEnum(const std::string &mode); const char* radioModeStr(MTS::IO::ICellularRadio::RADIO_NETWORK_MODE mode); +std::string preferredNetworksStr(MTS::IO::ICellularRadio::PREFERRED_NETWORKS networks); +MTS::IO::ICellularRadio::PREFERRED_NETWORKS preferredNetworksFlags(const std::string networks); static int iOption = 0; @@ -154,6 +163,9 @@ static struct option long_options[] = { { "init-prl", no_argument, &iOption, OPT_INIT_PRL }, { "init-activation", no_argument, &iOption, OPT_INIT_ACTIVATION }, { "factory-default", no_argument, &iOption, OPT_INIT_RTN }, + { "get-preferred-networks", no_argument, 0, 'a' }, + { "get-available-preferred-networks", no_argument, 0, 'e' }, + { "set-preferred-networks", required_argument, 0, 'w' }, { 0, 0, 0, 0 } }; @@ -387,6 +399,30 @@ int main(int argc, char** argv) { bool ret = g_apRadio->resetRadio(); result = (ret) ? ICellularRadio::CODE::SUCCESS : ICellularRadio::CODE::FAILURE; printf("%s\n", code2str(result)); + } else if(g_iAuxOptions & AOPT_GET_AVAIL_PREF_NET) { + ICellularRadio::PREFERRED_NETWORKS networks; + result = g_apRadio->getAvailablePreferredNetworks(networks); + if (result == ICellularRadio::SUCCESS) { + printf("%s\n", preferredNetworksStr(networks).c_str()); + } else { + printf("%s\n", code2str(result)); + } + } else if(g_iAuxOptions & AOPT_GET_PREFERRED_NET) { + ICellularRadio::PREFERRED_NETWORKS networks; + result = g_apRadio->getPreferredNetworks(networks); + if (result == ICellularRadio::SUCCESS) { + printf("%s\n", preferredNetworksStr(networks).c_str()); + } else { + printf("%s\n", code2str(result)); + } + } else if(g_iAuxOptions & AOPT_SET_PREFERRED_NET) { + ICellularRadio::PREFERRED_NETWORKS networks = preferredNetworksFlags(g_sPreferredNetworks); + if (networks != ICellularRadio::PREFERRED_NETWORK_NA) { + result = g_apRadio->setPreferredNetworks(networks); + printf("%s\n", code2str(result)); + } else { + printf("Invalid argument: %s\n", g_sPreferredNetworks.c_str()); + } } shutdown(); @@ -607,6 +643,20 @@ void parseOptions(int argc, char** argv) g_iOptions |= OPT_UNLOCK_SIM_CARD; break; + case 'a': + g_iAuxOptions |= AOPT_GET_PREFERRED_NET; + break; + + case 'e': + g_iAuxOptions |= AOPT_GET_AVAIL_PREF_NET; + break; + + case 'w': + if (optarg) + g_sPreferredNetworks = optarg; + g_iAuxOptions |= AOPT_SET_PREFERRED_NET; + break; + default: printf("OPTION: [%d] ABORTING!!\n", c); abort(); @@ -653,6 +703,9 @@ void printHelp(const std::string& sApp) { printf("\t--set-rx-diversity : set RX Diversity\n"); printf("\t--get-radio-network-mode : get selected cellular network\n"); printf("\t--set-radio-network-mode {auto|gsm|umts} : set cellular network\n"); + printf("\t--get-preferred-networks : get currently preferred network\n"); + printf("\t--get-available-preferred-networks : get supported networks to switch\n"); + printf("\t--set-preferred-networks : set preferred networks\n"); // Applicable for LTE910-NA1 dual FW images only // printf("\t--set-active-firmware : switch to a specific firmware image\n"); printf("\t--factory-default [ --msl ] : reset to factory defaults\n"); @@ -709,3 +762,41 @@ const char* radioModeStr(MTS::IO::ICellularRadio::RADIO_NETWORK_MODE mode) default : return ""; } } + +std::string preferredNetworksStr(MTS::IO::ICellularRadio::PREFERRED_NETWORKS networks) +{ + using namespace MTS::IO; + std::string result; + for (size_t i = 0; i &items = MTS::Text::split(networks, ","); + for (const auto &it: items) { + if (it == "2g") { + result |= ICellularRadio::PREFERRED_NETWORK_2G; + } else if (it == "3g") { + result |= ICellularRadio::PREFERRED_NETWORK_3G; + } else if (it == "4g") { + result |= ICellularRadio::PREFERRED_NETWORK_4G; + } else if (it == "5g") { + result |= ICellularRadio::PREFERRED_NETWORK_5G; + } else { + result = ICellularRadio::PREFERRED_NETWORK_NA; + break; + } + } + return static_cast(result); +} -- cgit v1.2.3 From ba6621b8bbe21c6dbef290cffd4a816970b2b079 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Tue, 30 Jul 2019 10:24:06 +0300 Subject: MTX-2891 mpower 2-3-4g: refactoring names, split functionality with radio-query, adopt api changes --- main.cpp | 88 +++++++++++++++------------------------------------------------- 1 file changed, 20 insertions(+), 68 deletions(-) diff --git a/main.cpp b/main.cpp index 85c7563..a30335a 100644 --- a/main.cpp +++ b/main.cpp @@ -34,7 +34,6 @@ #include #include #include -#include #include "Version.h" const std::string DEFAULT_PORT("/dev/modem_at1"); @@ -69,7 +68,7 @@ std::string g_sConfigFile; Json::Value g_jData; std::string g_sRadioMode; std::string g_sSimPin; -std::string g_sPreferredNetworks; +std::string g_sCellularMode; MTS::AutoPtr g_apRadio; @@ -112,9 +111,7 @@ const uint32_t OPT_UNLOCK_SIM_CARD = 0x20000000; const uint32_t OPT_RESET_RADIO = 0x40000000; int32_t g_iAuxOptions = 0; -const uint32_t AOPT_GET_AVAIL_PREF_NET = 0x00000001; -const uint32_t AOPT_GET_PREFERRED_NET = 0x00000002; -const uint32_t AOPT_SET_PREFERRED_NET = 0x00000004; +const uint32_t AOPT_SET_CELLULAR_MODE = 0x00000001; void handle_sigterm(int signum); void printHelp(const std::string& sApp); @@ -125,8 +122,7 @@ const char *code2str(MTS::IO::ICellularRadio::CODE code); std::string loadImeiFromDeviceInfo(); MTS::IO::ICellularRadio::RADIO_NETWORK_MODE radioModeEnum(const std::string &mode); const char* radioModeStr(MTS::IO::ICellularRadio::RADIO_NETWORK_MODE mode); -std::string preferredNetworksStr(MTS::IO::ICellularRadio::PREFERRED_NETWORKS networks); -MTS::IO::ICellularRadio::PREFERRED_NETWORKS preferredNetworksFlags(const std::string networks); +MTS::IO::ICellularRadio::CELLULAR_MODES cellularModeFlags(const std::string networks); static int iOption = 0; @@ -163,9 +159,7 @@ static struct option long_options[] = { { "init-prl", no_argument, &iOption, OPT_INIT_PRL }, { "init-activation", no_argument, &iOption, OPT_INIT_ACTIVATION }, { "factory-default", no_argument, &iOption, OPT_INIT_RTN }, - { "get-preferred-networks", no_argument, 0, 'a' }, - { "get-available-preferred-networks", no_argument, 0, 'e' }, - { "set-preferred-networks", required_argument, 0, 'w' }, + { "set-cellular-mode", required_argument, 0, 'w' }, { 0, 0, 0, 0 } }; @@ -399,29 +393,13 @@ int main(int argc, char** argv) { bool ret = g_apRadio->resetRadio(); result = (ret) ? ICellularRadio::CODE::SUCCESS : ICellularRadio::CODE::FAILURE; printf("%s\n", code2str(result)); - } else if(g_iAuxOptions & AOPT_GET_AVAIL_PREF_NET) { - ICellularRadio::PREFERRED_NETWORKS networks; - result = g_apRadio->getAvailablePreferredNetworks(networks); - if (result == ICellularRadio::SUCCESS) { - printf("%s\n", preferredNetworksStr(networks).c_str()); - } else { - printf("%s\n", code2str(result)); - } - } else if(g_iAuxOptions & AOPT_GET_PREFERRED_NET) { - ICellularRadio::PREFERRED_NETWORKS networks; - result = g_apRadio->getPreferredNetworks(networks); - if (result == ICellularRadio::SUCCESS) { - printf("%s\n", preferredNetworksStr(networks).c_str()); - } else { - printf("%s\n", code2str(result)); - } - } else if(g_iAuxOptions & AOPT_SET_PREFERRED_NET) { - ICellularRadio::PREFERRED_NETWORKS networks = preferredNetworksFlags(g_sPreferredNetworks); - if (networks != ICellularRadio::PREFERRED_NETWORK_NA) { - result = g_apRadio->setPreferredNetworks(networks); + } else if(g_iAuxOptions & AOPT_SET_CELLULAR_MODE) { + ICellularRadio::CELLULAR_MODES networks = cellularModeFlags(g_sCellularMode); + if (networks != ICellularRadio::CELLULAR_MODE_NA) { + result = g_apRadio->setCellularMode(networks); printf("%s\n", code2str(result)); } else { - printf("Invalid argument: %s\n", g_sPreferredNetworks.c_str()); + printf("Invalid argument: %s\n", g_sCellularMode.c_str()); } } @@ -643,18 +621,10 @@ void parseOptions(int argc, char** argv) g_iOptions |= OPT_UNLOCK_SIM_CARD; break; - case 'a': - g_iAuxOptions |= AOPT_GET_PREFERRED_NET; - break; - - case 'e': - g_iAuxOptions |= AOPT_GET_AVAIL_PREF_NET; - break; - case 'w': if (optarg) - g_sPreferredNetworks = optarg; - g_iAuxOptions |= AOPT_SET_PREFERRED_NET; + g_sCellularMode = optarg; + g_iAuxOptions |= AOPT_SET_CELLULAR_MODE; break; default: @@ -703,9 +673,7 @@ void printHelp(const std::string& sApp) { printf("\t--set-rx-diversity : set RX Diversity\n"); printf("\t--get-radio-network-mode : get selected cellular network\n"); printf("\t--set-radio-network-mode {auto|gsm|umts} : set cellular network\n"); - printf("\t--get-preferred-networks : get currently preferred network\n"); - printf("\t--get-available-preferred-networks : get supported networks to switch\n"); - printf("\t--set-preferred-networks : set preferred networks\n"); + printf("\t--set-cellular-mode : set preferred networks eg. 2g,3g,4g\n"); // Applicable for LTE910-NA1 dual FW images only // printf("\t--set-active-firmware : switch to a specific firmware image\n"); printf("\t--factory-default [ --msl ] : reset to factory defaults\n"); @@ -763,40 +731,24 @@ const char* radioModeStr(MTS::IO::ICellularRadio::RADIO_NETWORK_MODE mode) } } -std::string preferredNetworksStr(MTS::IO::ICellularRadio::PREFERRED_NETWORKS networks) -{ - using namespace MTS::IO; - std::string result; - for (size_t i = 0; i &items = MTS::Text::split(networks, ","); for (const auto &it: items) { if (it == "2g") { - result |= ICellularRadio::PREFERRED_NETWORK_2G; + result |= ICellularRadio::CELLULAR_MODE_2G; } else if (it == "3g") { - result |= ICellularRadio::PREFERRED_NETWORK_3G; + result |= ICellularRadio::CELLULAR_MODE_3G; } else if (it == "4g") { - result |= ICellularRadio::PREFERRED_NETWORK_4G; + result |= ICellularRadio::CELLULAR_MODE_4G; } else if (it == "5g") { - result |= ICellularRadio::PREFERRED_NETWORK_5G; + result |= ICellularRadio::CELLULAR_MODE_5G; } else { - result = ICellularRadio::PREFERRED_NETWORK_NA; + result = ICellularRadio::CELLULAR_MODE_NA; break; } } - return static_cast(result); + return static_cast(result); } -- cgit v1.2.3 From 2dcf326dc4c3094ffd65d3c6da2113312761054b Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Wed, 31 Jul 2019 14:52:55 +0300 Subject: MTX-2891 mpower 2-3-4g switch: removed obsolete parameters Use set-cellular-mode and 'radio-query --get-cellular-mode' instead Reverted commits: ba09313666f3139be6c468c583ecc68da3ac2390 [MTS-MTQ] updated help for new option 425d8bf72dd3d43896da1aa9374c137b69d89c0f [MTS-MTQ] added set-radio-mode/get-radio-mode options --- main.cpp | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/main.cpp b/main.cpp index a30335a..d65204d 100644 --- a/main.cpp +++ b/main.cpp @@ -66,7 +66,6 @@ std::string g_sRxDiversity; std::string g_sActiveFirmware; std::string g_sConfigFile; Json::Value g_jData; -std::string g_sRadioMode; std::string g_sSimPin; std::string g_sCellularMode; @@ -105,8 +104,6 @@ const uint32_t OPT_MSID = 0x00800000; const uint32_t OPT_SETRXDIVERSITY = 0x01000000; const uint32_t OPT_SETACTIVEFIRMWARE = 0x02000000; const uint32_t OPT_CONFIG_FILE = 0x04000000; -const uint32_t OPT_GET_RADIOMODE = 0x08000000; -const uint32_t OPT_SET_RADIOMODE = 0x10000000; const uint32_t OPT_UNLOCK_SIM_CARD = 0x20000000; const uint32_t OPT_RESET_RADIO = 0x40000000; @@ -120,8 +117,6 @@ void initializeCache(); void shutdown(); const char *code2str(MTS::IO::ICellularRadio::CODE code); std::string loadImeiFromDeviceInfo(); -MTS::IO::ICellularRadio::RADIO_NETWORK_MODE radioModeEnum(const std::string &mode); -const char* radioModeStr(MTS::IO::ICellularRadio::RADIO_NETWORK_MODE mode); MTS::IO::ICellularRadio::CELLULAR_MODES cellularModeFlags(const std::string networks); @@ -151,8 +146,6 @@ static struct option long_options[] = { { "set-mip-mn-aaa-ss", required_argument, 0, '8' }, { "set-mip-mn-ha-ss", required_argument, 0, '9' }, { "unlock-sim-card", required_argument, 0, OPT_UNLOCK_SIM_CARD }, - { "get-radio-network-mode", no_argument, &iOption, OPT_GET_RADIOMODE }, - { "set-radio-network-mode", required_argument, 0, OPT_SET_RADIOMODE }, { "reset-radio", no_argument, &iOption, OPT_RESET_RADIO }, { "init-dc", no_argument, &iOption, OPT_INIT_DC }, { "init-fumo", no_argument, &iOption, OPT_INIT_FUMO }, @@ -377,13 +370,6 @@ int main(int argc, char** argv) { jArgs["fwid"] = g_sActiveFirmware; result = g_apRadio->setActiveFirmware(jArgs); printf("%s\n", code2str(result)); - } else if(g_iOptions & OPT_GET_RADIOMODE) { - ICellularRadio::RADIO_NETWORK_MODE mode; - g_apRadio->getRadioNetworkMode(mode); - printf("%s\n", radioModeStr(mode)); - } else if(g_iOptions & OPT_SET_RADIOMODE) { - ICellularRadio::CODE res = g_apRadio->setRadioNetworkMode(radioModeEnum(g_sRadioMode)); - printf("%s\n", code2str(res)); } else if(g_iOptions & OPT_UNLOCK_SIM_CARD) { Json::Value jArgs(Json::objectValue); jArgs["pin"] = g_sSimPin; @@ -608,12 +594,6 @@ void parseOptions(int argc, char** argv) g_iOptions |= OPT_SETMIPMNHASS; break; - case OPT_SET_RADIOMODE: - if (optarg) - g_sRadioMode = optarg; - g_iOptions |= OPT_SET_RADIOMODE; - break; - case OPT_UNLOCK_SIM_CARD: if(optarg != 0) { g_sSimPin = optarg; @@ -671,8 +651,6 @@ void printHelp(const std::string& sApp) { printf("\t--set-mip-mn-aaa-ss : set MIP MN AAA SS\n"); printf("\t--set-mip-mn-ha-ss : set MIP MN HA SS\n"); printf("\t--set-rx-diversity : set RX Diversity\n"); - printf("\t--get-radio-network-mode : get selected cellular network\n"); - printf("\t--set-radio-network-mode {auto|gsm|umts} : set cellular network\n"); printf("\t--set-cellular-mode : set preferred networks eg. 2g,3g,4g\n"); // Applicable for LTE910-NA1 dual FW images only // printf("\t--set-active-firmware : switch to a specific firmware image\n"); @@ -706,31 +684,6 @@ const char *code2str(MTS::IO::ICellularRadio::CODE code) { return "Unknown"; } -MTS::IO::ICellularRadio::RADIO_NETWORK_MODE radioModeEnum(const std::string &mode) -{ - using namespace MTS::IO; - if (mode == "auto") - return ICellularRadio::RADIO_NETWORK_MODE_AUTO; - else if (mode == "gsm") - return ICellularRadio::RADIO_NETWORK_MODE_GSM_ONLY; - else if (mode == "umts") - return ICellularRadio::RADIO_NETWORK_MODE_UMTS_ONLY; - else - return ICellularRadio::RADIO_NETWORK_MODE_UNKNOWN; - -} - -const char* radioModeStr(MTS::IO::ICellularRadio::RADIO_NETWORK_MODE mode) -{ - using namespace MTS::IO; - switch (mode) { - case ICellularRadio::RADIO_NETWORK_MODE_GSM_ONLY : return "gsm"; - case ICellularRadio::RADIO_NETWORK_MODE_UMTS_ONLY: return "umts"; - case ICellularRadio::RADIO_NETWORK_MODE_AUTO : return "auto"; - default : return ""; - } -} - MTS::IO::ICellularRadio::CELLULAR_MODES cellularModeFlags(const std::string networks) { using namespace MTS::IO; -- cgit v1.2.3 From f7ed3b6a0c21a9345a2d1707c77be4212b03c385 Mon Sep 17 00:00:00 2001 From: Maksym Telychko Date: Thu, 8 Aug 2019 12:54:39 +0300 Subject: MTX-2891 mpower 2-3-4g: rid of aux options --- main.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index d65204d..5169d4e 100644 --- a/main.cpp +++ b/main.cpp @@ -104,11 +104,10 @@ const uint32_t OPT_MSID = 0x00800000; const uint32_t OPT_SETRXDIVERSITY = 0x01000000; const uint32_t OPT_SETACTIVEFIRMWARE = 0x02000000; const uint32_t OPT_CONFIG_FILE = 0x04000000; +const uint32_t OPT_SET_CELLULAR_MODE = 0x08000000; const uint32_t OPT_UNLOCK_SIM_CARD = 0x20000000; const uint32_t OPT_RESET_RADIO = 0x40000000; -int32_t g_iAuxOptions = 0; -const uint32_t AOPT_SET_CELLULAR_MODE = 0x00000001; void handle_sigterm(int signum); void printHelp(const std::string& sApp); @@ -379,7 +378,7 @@ int main(int argc, char** argv) { bool ret = g_apRadio->resetRadio(); result = (ret) ? ICellularRadio::CODE::SUCCESS : ICellularRadio::CODE::FAILURE; printf("%s\n", code2str(result)); - } else if(g_iAuxOptions & AOPT_SET_CELLULAR_MODE) { + } else if(g_iOptions & OPT_SET_CELLULAR_MODE) { ICellularRadio::CELLULAR_MODES networks = cellularModeFlags(g_sCellularMode); if (networks != ICellularRadio::CELLULAR_MODE_NA) { result = g_apRadio->setCellularMode(networks); @@ -604,7 +603,7 @@ void parseOptions(int argc, char** argv) case 'w': if (optarg) g_sCellularMode = optarg; - g_iAuxOptions |= AOPT_SET_CELLULAR_MODE; + g_iOptions |= OPT_SET_CELLULAR_MODE; break; default: -- cgit v1.2.3