diff options
author | Dan Williams <dcbw@redhat.com> | 2012-01-23 18:06:04 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-01-23 18:54:28 -0600 |
commit | c386efee9c7057a89a054d79b7abb4aec446a9a7 (patch) | |
tree | 879164bc251abd5528cede87d5ad5be2ee9fc52c /libwmc | |
parent | 704489d660776b679434d5426d5f50a061fb536c (diff) |
wmc: decode more of DEVICE_INFO
CDMA MIN, home SID, PRL & ERI version
Diffstat (limited to 'libwmc')
-rw-r--r-- | libwmc/src/commands.c | 16 | ||||
-rw-r--r-- | libwmc/src/commands.h | 5 | ||||
-rw-r--r-- | libwmc/src/protocol.h | 73 | ||||
-rw-r--r-- | libwmc/tests/test-wmc-com.c | 35 |
4 files changed, 89 insertions, 40 deletions
diff --git a/libwmc/src/commands.c b/libwmc/src/commands.c index e617eabf..56bd11d7 100644 --- a/libwmc/src/commands.c +++ b/libwmc/src/commands.c @@ -181,7 +181,23 @@ wmc_cmd_device_info_result (const char *buf, size_t buflen) memcpy (tmp, rsp->hwrev, sizeof (rsp->hwrev)); wmc_result_add_string (r, WMC_CMD_DEVICE_INFO_ITEM_HW_REVISION, tmp); + /* MIN */ + memset (tmp, 0, sizeof (tmp)); + wmc_assert (sizeof (rsp->min) <= sizeof (tmp)); + memcpy (tmp, rsp->min, sizeof (rsp->min)); + wmc_result_add_string (r, WMC_CMD_DEVICE_INFO_ITEM_CDMA_MIN, tmp); + + wmc_result_add_u32 (r, WMC_CMD_DEVICE_INFO_ITEM_HOME_SID, le16toh (rsp->home_sid)); + wmc_result_add_u32 (r, WMC_CMD_DEVICE_INFO_ITEM_PRL_VERSION, le16toh (rsp->prlver)); + wmc_result_add_u32 (r, WMC_CMD_DEVICE_INFO_ITEM_ERI_VERSION, le16toh (rsp->eriver)); + if (rsp2) { + /* MEID */ + memset (tmp, 0, sizeof (tmp)); + wmc_assert (sizeof (rsp2->meid) <= sizeof (tmp)); + memcpy (tmp, rsp2->meid, sizeof (rsp2->meid)); + wmc_result_add_string (r, WMC_CMD_DEVICE_INFO_ITEM_MEID, tmp); + /* IMEI */ memset (tmp, 0, sizeof (tmp)); wmc_assert (sizeof (rsp2->imei) <= sizeof (tmp)); diff --git a/libwmc/src/commands.h b/libwmc/src/commands.h index d5f5cfc9..f8b0c44b 100644 --- a/libwmc/src/commands.h +++ b/libwmc/src/commands.h @@ -36,6 +36,11 @@ WmcResult * wmc_cmd_init_result (const char *buf, size_t len, int wmc2); #define WMC_CMD_DEVICE_INFO_ITEM_MODEL "model" #define WMC_CMD_DEVICE_INFO_ITEM_FW_REVISION "firmware-revision" #define WMC_CMD_DEVICE_INFO_ITEM_HW_REVISION "hardware-revision" +#define WMC_CMD_DEVICE_INFO_ITEM_CDMA_MIN "cdma-min" +#define WMC_CMD_DEVICE_INFO_ITEM_HOME_SID "home-sid" +#define WMC_CMD_DEVICE_INFO_ITEM_PRL_VERSION "prl-version" +#define WMC_CMD_DEVICE_INFO_ITEM_ERI_VERSION "eri-version" +#define WMC_CMD_DEVICE_INFO_ITEM_MEID "meid" #define WMC_CMD_DEVICE_INFO_ITEM_IMEI "imei" #define WMC_CMD_DEVICE_INFO_ITEM_ICCID "iccid" #define WMC_CMD_DEVICE_INFO_ITEM_MCC "mcc" diff --git a/libwmc/src/protocol.h b/libwmc/src/protocol.h index 77ec49c7..e341f56f 100644 --- a/libwmc/src/protocol.h +++ b/libwmc/src/protocol.h @@ -77,16 +77,21 @@ typedef struct WmcCmdInit2Rsp WmcCmdInit2Rsp; struct WmcCmdDeviceInfoRsp { WmcCmdHeader hdr; - u_int8_t _unknown1[27]; - char manf[64]; - char model[64]; - char fwrev[64]; - char hwrev[64]; - u_int8_t _unknown2[64]; - u_int8_t _unknown3[64]; - u_int8_t _unknown4[22]; - u_int8_t _unknown5[8]; - u_int8_t _unknown6[6]; + u_int8_t _unknown1[27]; + char manf[64]; + char model[64]; + char fwrev[64]; + char hwrev[64]; + u_int8_t _unknown2[64]; + u_int8_t _unknown3[64]; + char min[10]; /* CDMA2000/IS-95 MIN */ + u_int8_t _unknown4[12]; + u_int16_t home_sid; + u_int8_t _unknown5[2]; + u_int16_t prlver; + u_int8_t _unknown6[2]; + u_int16_t eriver; + u_int8_t _unknown7[4]; } __attribute__ ((packed)); typedef struct WmcCmdDeviceInfoRsp WmcCmdDeviceInfoRsp; @@ -99,21 +104,22 @@ struct WmcCmdDeviceInfo2Rsp { char hwrev[64]; u_int8_t _unknown2[64]; u_int8_t _unknown3[64]; - u_int8_t min[10]; /* CDMA2000/IS-95 MIN */ + u_int8_t min[10]; /* CDMA2000/IS-95 MIN */ u_int8_t _unknown4[12]; - u_int16_t home_sid; /* ? */ - u_int8_t _unknown5[6]; - u_int16_t eri_ver; /* ? */ - u_int8_t _unknown6[3]; - u_int8_t _unknown7[64]; - u_int8_t _unknown8; + u_int16_t home_sid; + u_int8_t _unknown5[2]; + u_int16_t prlver; + u_int8_t _unknown6[2]; + u_int16_t eriver; + u_int8_t _unknown7[4]; + u_int8_t _unknown8[64]; u_int8_t meid[14]; - u_int8_t _unknown9[6]; /* always zero */ - u_int8_t imei[16]; u_int8_t _unknown10[6]; /* always zero */ - u_int8_t _unknown11[16]; + u_int8_t imei[16]; + u_int8_t _unknown11[6]; /* always zero */ + u_int8_t _unknown12[16]; u_int8_t iccid[20]; - u_int8_t _unknown12[6]; + u_int8_t _unknown13[6]; } __attribute__ ((packed)); typedef struct WmcCmdDeviceInfo2Rsp WmcCmdDeviceInfo2Rsp; @@ -126,26 +132,27 @@ struct WmcCmdDeviceInfo3Rsp { char hwrev[64]; u_int8_t _unknown2[64]; u_int8_t _unknown3[64]; - u_int8_t min[10]; /* CDMA2000/IS-95 MIN */ + u_int8_t min[10]; /* CDMA2000/IS-95 MIN */ u_int8_t _unknown4[12]; - u_int16_t home_sid; /* ? */ - u_int8_t _unknown5[6]; - u_int16_t eri_ver; /* ? */ - u_int8_t _unknown6[3]; - u_int8_t _unknown7[64]; - u_int8_t _unknown8; + u_int16_t home_sid; + u_int8_t _unknown5[2]; + u_int16_t prlver; + u_int8_t _unknown6[2]; + u_int16_t eri_ver; + u_int8_t _unknown7[4]; + u_int8_t _unknown8[64]; u_int8_t meid[14]; - u_int8_t _unknown9[6]; /* always zero */ - u_int8_t imei[16]; u_int8_t _unknown10[6]; /* always zero */ - u_int8_t _unknown11[16]; + u_int8_t imei[16]; + u_int8_t _unknown11[6]; /* always zero */ + u_int8_t _unknown12[16]; u_int8_t iccid[20]; - u_int8_t _unknown12[6]; + u_int8_t _unknown13[6]; u_int8_t mcc[16]; u_int8_t mnc[16]; - u_int8_t _unknown13[4]; u_int8_t _unknown14[4]; u_int8_t _unknown15[4]; + u_int8_t _unknown16[4]; } __attribute__ ((packed)); typedef struct WmcCmdDeviceInfo3Rsp WmcCmdDeviceInfo3Rsp; diff --git a/libwmc/tests/test-wmc-com.c b/libwmc/tests/test-wmc-com.c index 2ce50698..31b4efcc 100644 --- a/libwmc/tests/test-wmc-com.c +++ b/libwmc/tests/test-wmc-com.c @@ -273,6 +273,7 @@ test_com_device_info (void *f, void *data) gint len; WmcResult *result; size_t reply_len; + guint32 u32; len = wmc_cmd_device_info_new (buf, sizeof (buf)); g_assert (len == 2); @@ -292,33 +293,53 @@ test_com_device_info (void *f, void *data) str = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_MANUFACTURER, &str); - g_message ("%s: Manufacturer: %s", __func__, str); + g_message ("%s: Manuf: %s", __func__, str); str = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_MODEL, &str); - g_message ("%s: Model: %s", __func__, str); + g_message ("%s: Model: %s", __func__, str); str = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_FW_REVISION, &str); - g_message ("%s: FW Revision: %s", __func__, str); + g_message ("%s: FW Rev: %s", __func__, str); str = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_HW_REVISION, &str); - g_message ("%s: HW Revision: %s", __func__, str); + g_message ("%s: HW Rev: %s", __func__, str); + + str = NULL; + wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_CDMA_MIN, &str); + g_message ("%s: CDMA MIN: %s", __func__, str); + + u32 = 0; + wmc_result_get_u32 (result, WMC_CMD_DEVICE_INFO_ITEM_HOME_SID, &u32); + g_message ("%s: Home SID: %d", __func__, u32); + + u32 = 0; + wmc_result_get_u32 (result, WMC_CMD_DEVICE_INFO_ITEM_PRL_VERSION, &u32); + g_message ("%s: PRL Ver: %d", __func__, u32); + + u32 = 0; + wmc_result_get_u32 (result, WMC_CMD_DEVICE_INFO_ITEM_ERI_VERSION, &u32); + g_message ("%s: ERI Ver: %d", __func__, u32); + + str = NULL; + wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_MEID, &str); + g_message ("%s: MEID: %s", __func__, str ? str : "(none)"); str = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_IMEI, &str); - g_message ("%s: IMEI: %s", __func__, str ? str : "(none)"); + g_message ("%s: IMEI: %s", __func__, str ? str : "(none)"); str = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_ICCID, &str); - g_message ("%s: ICCID: %s", __func__, str ? str : "(none)"); + g_message ("%s: ICCID: %s", __func__, str ? str : "(none)"); str = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_MCC, &str); str2 = NULL; wmc_result_get_string (result, WMC_CMD_DEVICE_INFO_ITEM_MNC, &str2); - g_message ("%s: MCC/MNC: %s %s", __func__, + g_message ("%s: MCC/MNC: %s %s", __func__, str ? str : "(none)", str2 ? str2 : "(none)"); |