aboutsummaryrefslogtreecommitdiff
path: root/libqcdm/src
diff options
context:
space:
mode:
Diffstat (limited to 'libqcdm/src')
-rw-r--r--libqcdm/src/commands.c70
-rw-r--r--libqcdm/src/commands.h39
-rw-r--r--libqcdm/src/dm-commands.h23
3 files changed, 131 insertions, 1 deletions
diff --git a/libqcdm/src/commands.c b/libqcdm/src/commands.c
index a83776a5..8e526c9e 100644
--- a/libqcdm/src/commands.c
+++ b/libqcdm/src/commands.c
@@ -1536,6 +1536,76 @@ qcdm_cmd_nw_subsys_modem_snapshot_cdma_result (const char *buf, size_t len, int
/**********************************************************************/
+size_t
+qcdm_cmd_nw_subsys_eri_new (char *buf,
+ size_t len,
+ u_int8_t chipset)
+{
+ char cmdbuf[sizeof (DMCmdSubsysHeader) + 2];
+ DMCmdSubsysHeader *cmd = (DMCmdSubsysHeader *) &cmdbuf[0];
+
+ qcdm_return_val_if_fail (buf != NULL, 0);
+ qcdm_return_val_if_fail (len >= sizeof (*cmd) + DIAG_TRAILER_LEN, 0);
+
+ /* Validate chipset */
+ if (chipset != QCDM_NW_CHIPSET_6500 && chipset != QCDM_NW_CHIPSET_6800) {
+ qcdm_err (0, "Unknown Novatel chipset 0x%X", chipset);
+ return 0;
+ }
+
+ memset (cmd, 0, sizeof (*cmd));
+ cmd->code = DIAG_CMD_SUBSYS;
+ switch (chipset) {
+ case QCDM_NW_CHIPSET_6500:
+ cmd->subsys_id = DIAG_SUBSYS_NOVATEL_6500;
+ break;
+ case QCDM_NW_CHIPSET_6800:
+ cmd->subsys_id = DIAG_SUBSYS_NOVATEL_6800;
+ break;
+ default:
+ qcdm_assert_not_reached ();
+ }
+ cmd->subsys_cmd = htole16 (DIAG_SUBSYS_NOVATEL_ERI);
+
+ return dm_encapsulate_buffer (cmdbuf, sizeof (*cmd), sizeof (cmdbuf), buf, len);
+}
+
+QcdmResult *
+qcdm_cmd_nw_subsys_eri_result (const char *buf, size_t len, int *out_error)
+{
+ QcdmResult *result = NULL;
+ DMCmdSubsysNwEriRsp *rsp = (DMCmdSubsysNwEriRsp *) buf;
+ char str[50];
+
+ qcdm_return_val_if_fail (buf != NULL, NULL);
+
+ if (!check_command (buf, len, DIAG_CMD_SUBSYS, sizeof (DMCmdSubsysNwEriRsp), out_error))
+ return NULL;
+
+ /* FIXME: check 'status' when we know what it means */
+
+ result = qcdm_result_new ();
+
+ qcdm_result_add_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ROAM, rsp->roam);
+ qcdm_result_add_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_INDICATOR_ID, rsp->indicator_id);
+ qcdm_result_add_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ICON_ID, rsp->icon_id);
+ qcdm_result_add_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ICON_MODE, rsp->icon_mode);
+ qcdm_result_add_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_CALL_PROMPT_ID, rsp->call_prompt_id);
+ qcdm_result_add_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ALERT_ID, rsp->alert_id);
+
+ qcdm_warn_if_fail (rsp->text_len < sizeof (str));
+ if (rsp->text_len < sizeof (str)) {
+ qcdm_assert (sizeof (str) > sizeof (rsp->text));
+ memcpy (str, rsp->text, sizeof (rsp->text));
+ str[rsp->text_len] = '\0';
+ qcdm_result_add_string (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_TEXT, str);
+ }
+
+ return result;
+}
+
+/**********************************************************************/
+
static size_t
qcdm_cmd_log_config_new (char *buf,
size_t len,
diff --git a/libqcdm/src/commands.h b/libqcdm/src/commands.h
index c0dfc9ab..8b8e0bce 100644
--- a/libqcdm/src/commands.h
+++ b/libqcdm/src/commands.h
@@ -66,6 +66,19 @@ enum {
QCDM_HDR_REV_A = 0x02
};
+enum {
+ QCDM_ERI_ROAMING_ICON_ON = 0,
+ QCDM_ERI_ROAMING_ICON_OFF = 1,
+ QCDM_ERI_ROAMING_ICON_FLASH = 2,
+ /* Values greater than 2 are OEM defined */
+};
+
+enum {
+ /* Valid with QCDM_ERI_ROAMING_ICON_FLASH and greater */
+ QCDM_ERI_ROAMING_ICON_MODE_NORMAL = 0,
+ QCDM_ERI_ROAMING_ICON_MODE_FLASH = 1,
+};
+
/**********************************************************************/
#define QCDM_CMD_VERSION_INFO_ITEM_COMP_DATE "comp-date"
@@ -621,6 +634,32 @@ QcdmResult *qcdm_cmd_nw_subsys_modem_snapshot_cdma_result (const char *buf,
/**********************************************************************/
+#define QCDM_CMD_NW_SUBSYS_ERI_ITEM_ROAM "roam"
+
+#define QCDM_CMD_NW_SUBSYS_ERI_ITEM_INDICATOR_ID "indicator-id"
+
+/* One of QCDM_ERI_ROAMING_ICON_* */
+#define QCDM_CMD_NW_SUBSYS_ERI_ITEM_ICON_ID "icon-id"
+
+/* One of QCDM_ERI_ROAMING_ICON_MODE_* */
+#define QCDM_CMD_NW_SUBSYS_ERI_ITEM_ICON_MODE "icon-mode"
+
+#define QCDM_CMD_NW_SUBSYS_ERI_ITEM_CALL_PROMPT_ID "call-prompt-id"
+
+#define QCDM_CMD_NW_SUBSYS_ERI_ITEM_ALERT_ID "alert-id"
+
+#define QCDM_CMD_NW_SUBSYS_ERI_ITEM_TEXT "text"
+
+size_t qcdm_cmd_nw_subsys_eri_new (char *buf,
+ size_t len,
+ u_int8_t chipset);
+
+QcdmResult *qcdm_cmd_nw_subsys_eri_result (const char *buf,
+ size_t len,
+ int *out_error);
+
+/**********************************************************************/
+
#define QCDM_CMD_WCDMA_SUBSYS_STATE_INFO_ITEM_IMEI "imei"
#define QCDM_CMD_WCDMA_SUBSYS_STATE_INFO_ITEM_IMSI "imsi"
diff --git a/libqcdm/src/dm-commands.h b/libqcdm/src/dm-commands.h
index 36105136..d0966258 100644
--- a/libqcdm/src/dm-commands.h
+++ b/libqcdm/src/dm-commands.h
@@ -473,7 +473,7 @@ struct DMCmdSubsysNwSnapshotRsp {
u_int8_t response_code;
u_int32_t bitfield1;
u_int32_t bitfield2;
- u_int8_t data[100];
+ u_int8_t data[100]; /* DMCmdSubsysNwSnapshotCdma */
} __attribute__ ((packed));
typedef struct DMCmdSubsysNwSnapshotRsp DMCmdSubsysNwSnapshotRsp;
@@ -502,6 +502,27 @@ struct DMCmdSubsysNwSnapshotCdma {
} __attribute__ ((packed));
typedef struct DMCmdSubsysNwSnapshotCdma DMCmdSubsysNwSnapshotCdma;
+/* DIAG_SUBSYS_NOVATEL_MODEM_SNAPSHOT response */
+struct DMCmdSubsysNwEriRsp {
+ DMCmdSubsysHeader hdr;
+ u_int8_t status;
+ u_int16_t error;
+ u_int8_t roam;
+ u_int8_t eri_header[6];
+ u_int8_t eri_call_prompt[38];
+
+ /* Roaming Indicator */
+ u_int8_t indicator_id;
+ u_int8_t icon_id;
+ u_int8_t icon_mode;
+ u_int8_t call_prompt_id; /* Call Guard? */
+ u_int8_t alert_id; /* Ringer? */
+ u_int8_t encoding_type;
+ u_int8_t text_len;
+ u_int8_t text[32];
+} __attribute__ ((packed));
+typedef struct DMCmdSubsysNwEriRsp DMCmdSubsysNwEriRsp;
+
enum {
DIAG_CMD_LOG_CONFIG_OP_GET_RANGE = 0x01,
DIAG_CMD_LOG_CONFIG_OP_SET_MASK = 0x03,