qcdm: add Novatel ERI subsystem support
Returns various ERI information like Indicator ID/Index, Icon ID/Index, Icon Mode, and banner.
This commit is contained in:
@@ -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,
|
||||
|
@@ -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"
|
||||
|
@@ -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,
|
||||
|
@@ -1701,6 +1701,66 @@ test_com_nw_subsys_modem_snapshot_cdma (void *f, void *data)
|
||||
qcdm_result_unref (result);
|
||||
}
|
||||
|
||||
void
|
||||
test_com_nw_subsys_eri (void *f, void *data)
|
||||
{
|
||||
TestComData *d = data;
|
||||
gboolean success;
|
||||
int err = QCDM_SUCCESS;
|
||||
char buf[200];
|
||||
gint len;
|
||||
QcdmResult *result;
|
||||
gsize reply_len;
|
||||
guint8 num8 = 0;
|
||||
const char *str = NULL;
|
||||
|
||||
len = qcdm_cmd_nw_subsys_eri_new (buf, sizeof (buf), QCDM_NW_CHIPSET_6800);
|
||||
g_assert_cmpint (len, ==, 7);
|
||||
|
||||
/* Send the command */
|
||||
success = send_command (d, buf, len);
|
||||
g_assert (success);
|
||||
|
||||
/* Get a response */
|
||||
reply_len = wait_reply (d, buf, sizeof (buf));
|
||||
|
||||
g_print ("\n");
|
||||
|
||||
/* Parse the response into a result structure */
|
||||
result = qcdm_cmd_nw_subsys_eri_result (buf, reply_len, &err);
|
||||
if (!result) {
|
||||
/* Obviously not all devices implement this command */
|
||||
if ( err == -QCDM_ERROR_RESPONSE_BAD_COMMAND
|
||||
|| err == -QCDM_ERROR_RESPONSE_BAD_LENGTH)
|
||||
return;
|
||||
g_assert_cmpint (err, ==, QCDM_SUCCESS);
|
||||
}
|
||||
g_assert (result);
|
||||
|
||||
qcdm_result_get_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ROAM, &num8);
|
||||
g_message ("%s: Roam: %d", __func__, num8);
|
||||
|
||||
qcdm_result_get_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_INDICATOR_ID, &num8);
|
||||
g_message ("%s: Indicator ID: %d", __func__, num8);
|
||||
|
||||
qcdm_result_get_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ICON_ID, &num8);
|
||||
g_message ("%s: Icon ID: %d", __func__, num8);
|
||||
|
||||
qcdm_result_get_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ICON_MODE, &num8);
|
||||
g_message ("%s: Icon Mode: %d", __func__, num8);
|
||||
|
||||
qcdm_result_get_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_CALL_PROMPT_ID, &num8);
|
||||
g_message ("%s: Call Prompt ID: %d", __func__, num8);
|
||||
|
||||
qcdm_result_get_u8 (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_ALERT_ID, &num8);
|
||||
g_message ("%s: Alert ID: %d", __func__, num8);
|
||||
|
||||
qcdm_result_get_string (result, QCDM_CMD_NW_SUBSYS_ERI_ITEM_TEXT, &str);
|
||||
g_message ("%s: Banner: '%s'", __func__, str);
|
||||
|
||||
qcdm_result_unref (result);
|
||||
}
|
||||
|
||||
void
|
||||
test_com_wcdma_subsys_state_info (void *f, void *data)
|
||||
{
|
||||
|
@@ -59,6 +59,8 @@ void test_com_zte_subsys_status (void *f, void *data);
|
||||
|
||||
void test_com_nw_subsys_modem_snapshot_cdma (void *f, void *data);
|
||||
|
||||
void test_com_nw_subsys_eri (void *f, void *data);
|
||||
|
||||
void test_com_wcdma_subsys_state_info (void *f, void *data);
|
||||
|
||||
void test_com_gsm_subsys_state_info (void *f, void *data);
|
||||
|
@@ -116,6 +116,7 @@ int main (int argc, char **argv)
|
||||
g_test_suite_add (suite, TESTCASE (test_com_log_config, data->com_data));
|
||||
g_test_suite_add (suite, TESTCASE (test_com_zte_subsys_status, data->com_data));
|
||||
g_test_suite_add (suite, TESTCASE (test_com_nw_subsys_modem_snapshot_cdma, data->com_data));
|
||||
g_test_suite_add (suite, TESTCASE (test_com_nw_subsys_eri, data->com_data));
|
||||
g_test_suite_add (suite, TESTCASE (test_com_wcdma_subsys_state_info, data->com_data));
|
||||
g_test_suite_add (suite, TESTCASE (test_com_gsm_subsys_state_info, data->com_data));
|
||||
}
|
||||
|
Reference in New Issue
Block a user