summaryrefslogtreecommitdiff
path: root/libwmc
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-05-29 13:49:26 -0500
committerDan Williams <dcbw@redhat.com>2012-05-29 13:49:26 -0500
commite5f787d36486f20d728378ce0bd4e5027c7405b3 (patch)
treef67f21f16e1132f3a22157b8aa66558864eb0b71 /libwmc
parent6fa3f0b0d7cb415ea642feda1e33462af7a941b1 (diff)
downloadModemManager-e5f787d36486f20d728378ce0bd4e5027c7405b3.tar.gz
wmc: add command for setting global mode
Diffstat (limited to 'libwmc')
-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 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 */