diff options
author | Dan Williams <dcbw@redhat.com> | 2012-05-29 13:49:26 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-05-31 17:25:16 -0500 |
commit | 289b3587deba6943ea340f53e1fc5c48c4aa9a72 (patch) | |
tree | f4aee0efffc16465c6159d4f9a9bc821394668ae | |
parent | bd28fdfbfb567ac71cb5682254ea869d4aadb46e (diff) |
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 56bd11d7..d3567e89 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 f8b0c44b..3e5a483d 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 */ |