summaryrefslogtreecommitdiff
path: root/libqcdm
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-09-27 10:55:20 -0500
committerDan Williams <dcbw@redhat.com>2012-09-27 10:55:20 -0500
commitfb65cba607eaebaccd9b1df64074297e6f197d1a (patch)
tree85473ce760ff205315459d720cc027d556c675d4 /libqcdm
parent1b5804895f9eeb81fc469acfaa316ba3ea1da86e (diff)
qcdm: add qcdm_cmd_control_new() to set operating mode
Diffstat (limited to 'libqcdm')
-rw-r--r--libqcdm/src/commands.c29
-rw-r--r--libqcdm/src/commands.h13
-rw-r--r--libqcdm/src/dm-commands.h13
3 files changed, 55 insertions, 0 deletions
diff --git a/libqcdm/src/commands.c b/libqcdm/src/commands.c
index 53d831e5..e5a94b0b 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 466645b4..20941be6 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 cc254bb7..1be04e92 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;