diff options
author | Dan Williams <dcbw@redhat.com> | 2012-05-29 13:49:26 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-05-29 13:49:26 -0500 |
commit | e5f787d36486f20d728378ce0bd4e5027c7405b3 (patch) | |
tree | f67f21f16e1132f3a22157b8aa66558864eb0b71 | |
parent | 6fa3f0b0d7cb415ea642feda1e33462af7a941b1 (diff) | |
download | ModemManager-e5f787d36486f20d728378ce0bd4e5027c7405b3.tar.gz |
wmc: add command for setting global mode
-rw-r--r-- | libwmc/src/commands.c | 51 | ||||
-rw-r--r-- | libwmc/src/commands.h | 6 |
2 files changed, 57 insertions, 0 deletions
diff --git a/libwmc/src/commands.c b/libwmc/src/commands.c index 56bd11d7a..d3567e894 100644 --- a/libwmc/src/commands.c +++ b/libwmc/src/commands.c @@ -414,3 +414,54 @@ wmc_cmd_get_global_mode_result (const char *buf, size_t buflen) /**********************************************************************/ +static wmcbool +validate_mode (u_int8_t mode) +{ + switch (mode) { + case WMC_NETWORK_MODE_AUTO_CDMA: + case WMC_NETWORK_MODE_CDMA_ONLY: + case WMC_NETWORK_MODE_EVDO_ONLY: + case WMC_NETWORK_MODE_AUTO_GSM: + case WMC_NETWORK_MODE_GPRS_ONLY: + case WMC_NETWORK_MODE_UMTS_ONLY: + case WMC_NETWORK_MODE_AUTO: + case WMC_NETWORK_MODE_LTE_ONLY: + return TRUE; + default: + break; + } + return FALSE; +} + +size_t +wmc_cmd_set_global_mode_new (char *buf, size_t buflen, u_int8_t mode) +{ + WmcCmdSetGlobalMode *cmd = (WmcCmdSetGlobalMode *) buf; + + wmc_return_val_if_fail (buf != NULL, 0); + wmc_return_val_if_fail (buflen >= sizeof (*cmd), 0); + wmc_return_val_if_fail (validate_mode (mode) == TRUE, 0); + + memset (cmd, 0, sizeof (*cmd)); + cmd->hdr.marker = WMC_CMD_MARKER; + cmd->hdr.cmd = WMC_CMD_SET_GLOBAL_MODE; + cmd->_unknown1 = 0x01; + cmd->mode = mode; + cmd->_unknown2 = 0x05; + cmd->_unknown3 = 0x00; + return sizeof (*cmd); +} + +WmcResult * +wmc_cmd_set_global_mode_result (const char *buf, size_t buflen) +{ + wmc_return_val_if_fail (buf != NULL, NULL); + + if (check_command (buf, buflen, WMC_CMD_SET_GLOBAL_MODE, sizeof (WmcCmdGetGlobalModeRsp)) < 0) + return NULL; + + return wmc_result_new (); +} + +/**********************************************************************/ + diff --git a/libwmc/src/commands.h b/libwmc/src/commands.h index f8b0c44bd..3e5a483d0 100644 --- a/libwmc/src/commands.h +++ b/libwmc/src/commands.h @@ -107,4 +107,10 @@ WmcResult * wmc_cmd_get_global_mode_result (const char *buf, size_t len); /**********************************************************************/ +size_t wmc_cmd_set_global_mode_new (char *buf, size_t buflen, u_int8_t mode); + +WmcResult * wmc_cmd_set_global_mode_result (const char *buf, size_t len); + +/**********************************************************************/ + #endif /* LIBWMC_COMMANDS_H */ |