diff options
Diffstat (limited to 'libwmc/src/protocol.h')
-rw-r--r-- | libwmc/src/protocol.h | 71 |
1 files changed, 69 insertions, 2 deletions
diff --git a/libwmc/src/protocol.h b/libwmc/src/protocol.h index 3eabe2bf..2ee803aa 100644 --- a/libwmc/src/protocol.h +++ b/libwmc/src/protocol.h @@ -21,6 +21,8 @@ #define WMC_CMD_MARKER ((u_int8_t) 0xC8) enum { + WMC_CMD_GET_GLOBAL_MODE = 0x03, + WMC_CMD_SET_GLOBAL_MODE = 0x04, WMC_CMD_DEVICE_INFO = 0x06, WMC_CMD_IP_INFO = 0x0A, WMC_CMD_NET_INFO = 0x0B, @@ -93,12 +95,32 @@ struct WmcCmdDeviceInfo2Rsp { } __attribute__ ((packed)); typedef struct WmcCmdDeviceInfo2Rsp WmcCmdDeviceInfo2Rsp; +/*****************************************************/ + +enum { + WMC_SERVICE_NONE = 0, + WMC_SERVICE_AMPS = 1, + WMC_SERVICE_IS95A = 2, + WMC_SERVICE_IS95B = 3, + WMC_SERVICE_GSM = 4, + WMC_SERVICE_GPRS = 5, + WMC_SERVICE_1XRTT = 6, + WMC_SERVICE_1XEVDO_0 = 7, + WMC_SERVICE_UMTS = 8, + WMC_SERVICE_1XEVDO_A = 9, + WMC_SERVICE_EDGE = 10, + WMC_SERVICE_HSDPA = 11, + WMC_SERVICE_HSUPA = 12, + WMC_SERVICE_HSPA = 13, + WMC_SERVICE_LTE = 14 +}; + /* Shorter response used by earlier devices like PC5740 */ struct WmcCmdNetworkInfoRsp { WmcCmdHeader hdr; u_int8_t _unknown1; u_int8_t _unknown2[3]; /* Always zero */ - u_int8_t _unknown3; /* Always 0x06 */ + u_int8_t service; /* One of WMC_SERVICE_* */ u_int8_t _unknown4; /* Either 0x00 or 0x01 */ u_int8_t magic[10]; u_int16_t counter1; /* A timestamp/counter? */ @@ -115,7 +137,7 @@ struct WmcCmdNetworkInfo2Rsp { WmcCmdHeader hdr; u_int8_t _unknown1; /* 0x00 on LTE, 0x07 or 0x1F on CDMA */ u_int8_t _unknown2[3]; /* Always zero */ - u_int8_t _unknown3; /* 0x0E on LTE, 0x0F on CDMA */ + u_int8_t service; /* One of WMC_SERVICE_* */ u_int8_t _unknown4; u_int8_t magic[10]; /* Whatever was passed in WMC_CMD_INIT with some changes */ u_int16_t counter1; /* A timestamp/counter? */ @@ -139,6 +161,8 @@ struct WmcCmdNetworkInfo2Rsp { } __attribute__ ((packed)); typedef struct WmcCmdNetworkInfo2Rsp WmcCmdNetworkInfo2Rsp; +/*****************************************************/ + struct WmcCmdConnectionInfoRsp { WmcCmdHeader hdr; u_int32_t rx_bytes; @@ -152,4 +176,47 @@ struct WmcCmdConnectionInfoRsp { } __attribute__ ((packed)); typedef struct WmcCmdConnectionInfoRsp WmcCmdConnectionInfoRsp; +/*****************************************************/ + +enum { + WMC_GLOBAL_MODE_CDMA = 0x00, + WMC_GLOBAL_MODE_GSM = 0x0A, + WMC_GLOBAL_MODE_AUTO = 0x14, +}; + +struct WmcCmdGetGlobalMode { + WmcCmdHeader hdr; + u_int8_t _unknown1; /* always 0 */ +} __attribute__ ((packed)); +typedef struct WmcCmdGetGlobalMode WmcCmdGetGlobalMode; + +struct WmcCmdGetGlobalModeRsp { + WmcCmdHeader hdr; + u_int8_t _unknown1; /* always 0x01 */ + u_int8_t mode; /* one of WMC_GLOBAL_MODE_* */ + u_int8_t _unknown2; /* always 0x05 */ + u_int8_t _unknown3; /* always 0x00 */ +} __attribute__ ((packed)); +typedef struct WmcCmdGetGlobalModeRsp WmcCmdGetGlobalModeRsp; + +/*****************************************************/ + +struct WmcCmdSetGlobalMode { + WmcCmdHeader hdr; + u_int8_t _unknown1; /* always 0x01 */ + u_int8_t mode; /* one of WMC_GLOBAL_MODE_* */ + u_int8_t _unknown2; /* always 0x05 */ + u_int8_t _unknown3; /* always 0x00 */ +} __attribute__ ((packed)); +typedef struct WmcCmdSetGlobalMode WmcCmdSetGlobalMode; + +struct WmcCmdSetGlobalModeRsp { + WmcCmdHeader hdr; + u_int8_t _unknown1; /* always 0x01 */ + u_int32_t _unknown2; /* always zero */ +} __attribute__ ((packed)); +typedef struct WmcCmdSetGlobalModeRsp WmcCmdSetGlobalModeRsp; + +/*****************************************************/ + #endif /* LIBWMC_PROTOCOL_H */ |