diff options
author | Dan Williams <dcbw@redhat.com> | 2012-09-27 10:55:20 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-11-14 11:04:31 -0600 |
commit | 613e761373fd06aa69f332cc278a4c9cf5841829 (patch) | |
tree | 7b96a647edffbf51b417b76826a7769bf28b0a29 | |
parent | 6edd02de08f2876c249149559e11cef1e672f0b4 (diff) | |
download | ModemManager-613e761373fd06aa69f332cc278a4c9cf5841829.tar.gz |
qcdm: add qcdm_cmd_control_new() to set operating mode
-rw-r--r-- | libqcdm/src/commands.c | 29 | ||||
-rw-r--r-- | libqcdm/src/commands.h | 13 | ||||
-rw-r--r-- | libqcdm/src/dm-commands.h | 13 |
3 files changed, 55 insertions, 0 deletions
diff --git a/libqcdm/src/commands.c b/libqcdm/src/commands.c index a33269caa..e53c47320 100644 --- a/libqcdm/src/commands.c +++ b/libqcdm/src/commands.c @@ -366,6 +366,35 @@ qcdm_cmd_esn_result (const char *buf, size_t len, int *out_error) /**********************************************************************/ size_t +qcdm_cmd_control_new (char *buf, size_t len, u_int8_t mode) +{ + char cmdbuf[5]; + DMCmdControl *cmd = (DMCmdControl *) &cmdbuf[0]; + + qcdm_return_val_if_fail (buf != NULL, 0); + qcdm_return_val_if_fail (len >= sizeof (*cmd) + DIAG_TRAILER_LEN, 0); + + memset (cmd, 0, sizeof (*cmd)); + cmd->code = DIAG_CMD_CONTROL; + cmd->mode = htole16 ((u_int16_t) mode); + + return dm_encapsulate_buffer (cmdbuf, sizeof (*cmd), sizeof (cmdbuf), buf, len); +} + +QcdmResult * +qcdm_cmd_control_result (const char *buf, size_t len, int *out_error) +{ + qcdm_return_val_if_fail (buf != NULL, NULL); + + if (!check_command (buf, len, DIAG_CMD_CONTROL, sizeof (DMCmdControl), out_error)) + return NULL; + + return qcdm_result_new (); +} + +/**********************************************************************/ + +size_t qcdm_cmd_cdma_status_new (char *buf, size_t len) { char cmdbuf[3]; diff --git a/libqcdm/src/commands.h b/libqcdm/src/commands.h index 063152c69..d106ed03e 100644 --- a/libqcdm/src/commands.h +++ b/libqcdm/src/commands.h @@ -92,6 +92,19 @@ QcdmResult *qcdm_cmd_esn_result (const char *buf, /**********************************************************************/ +enum { + QCDM_CMD_CONTROL_MODE_OFFLINE = 1, + QCDM_CMD_CONTROL_MODE_RESET = 2, +}; + +size_t qcdm_cmd_control_new (char *buf, size_t len, u_int8_t mode); + +QcdmResult *qcdm_cmd_control_result (const char *buf, + size_t len, + int *out_error); + +/**********************************************************************/ + /* Values for QCDM_CMD_CDMA_STATUS_ITEM_RF_MODE */ enum { QCDM_CMD_CDMA_STATUS_RF_MODE_ANALOG = 0, diff --git a/libqcdm/src/dm-commands.h b/libqcdm/src/dm-commands.h index cc254bb7b..1be04e92d 100644 --- a/libqcdm/src/dm-commands.h +++ b/libqcdm/src/dm-commands.h @@ -246,6 +246,19 @@ struct DMCmdSubsysHeader { } __attribute__ ((packed)); typedef struct DMCmdSubsysHeader DMCmdSubsysHeader; +typedef enum { + DM_CONTROL_MODE_OFFLINE = 1, + DM_CONTROL_MODE_RESET = 2, +} DMControlMode; + +/* DIAG_CMD_CONTROL */ +struct DMCmdControl { + u_int8_t code; + /* DMControlMode */ + u_int16_t mode; +} __attribute__ ((packed)); +typedef struct DMCmdControl DMCmdControl; + /* DIAG_CMD_NV_READ / DIAG_CMD_NV_WRITE */ struct DMCmdNVReadWrite { u_int8_t code; |