aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-05-29 13:49:26 -0500
committerDan Williams <dcbw@redhat.com>2012-05-31 17:25:16 -0500
commit289b3587deba6943ea340f53e1fc5c48c4aa9a72 (patch)
treef4aee0efffc16465c6159d4f9a9bc821394668ae
parentbd28fdfbfb567ac71cb5682254ea869d4aadb46e (diff)
wmc: add command for setting global mode
-rw-r--r--libwmc/src/commands.c51
-rw-r--r--libwmc/src/commands.h6
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 */