From 0b7e61c68e2d6ed554efd3d8ef65661261acfdda Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 22 Aug 2005 20:39:59 +0000 Subject: [PATCH] hcidump: Add more detailed BCCMD decoding --- tools/parser/csr.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/tools/parser/csr.c b/tools/parser/csr.c index 669079ca1..06d596f01 100644 --- a/tools/parser/csr.c +++ b/tools/parser/csr.c @@ -37,6 +37,7 @@ #define CSR_U8(frm) (get_u8(frm)) #define CSR_U16(frm) (btohs(htons(get_u16(frm)))) #define CSR_U32(frm) ((CSR_U16(frm) << 16) + CSR_U16(frm)) +#define CSR_S16(frm) (btohs(htons(get_u16(frm)))) static char *type2str(uint16_t type) { @@ -52,6 +53,30 @@ static char *type2str(uint16_t type) } } +static inline void valueless_dump(int level, char *str, struct frame *frm) +{ + p_indent(level, frm); + printf("%s\n", str); +} + +static inline void complex_dump(int level, char *str, struct frame *frm) +{ + p_indent(level, frm); + printf("%s\n", str); + + raw_dump(level, frm); +} + +static inline void int8_dump(int level, char *str, struct frame *frm) +{ + int16_t value; + + value = CSR_S16(frm); + + p_indent(level, frm); + printf("%s: value %d (0x%2.2x)\n", str, value, value); +} + static inline void uint16_dump(int level, char *str, struct frame *frm) { uint16_t value; @@ -107,6 +132,18 @@ static inline void handle_length_dump(int level, char *str, struct frame *frm) printf("%s: handle %d length %d\n", str, handle, length); } +static inline void handle_clock_dump(int level, char *str, struct frame *frm) +{ + uint16_t handle; + uint32_t clock; + + handle = CSR_U16(frm); + clock = CSR_U32(frm); + + p_indent(level, frm); + printf("%s: handle %d clock 0x%4.4x\n", str, handle, clock); +} + static inline void pskey_dump(int level, struct frame *frm) { uint16_t key, length, stores; @@ -184,6 +221,9 @@ static inline void bccmd_dump(int level, struct frame *frm) } switch (varid) { + case 0x2801: + uint16_dump(level + 1, "BC01_STATUS", frm); + break; case 0x2819: uint16_dump(level + 1, "BUILDID", frm); break; @@ -214,6 +254,48 @@ static inline void bccmd_dump(int level, struct frame *frm) case 0x3008: handle_length_dump(level + 1, "CRYPT_KEY_LENGTH", frm); break; + case 0x3009: + handle_clock_dump(level + 1, "PICONET_INSTANCE", frm); + break; + case 0x300a: + complex_dump(level + 1, "GET_CLR_EVT", frm); + break; + case 0x300b: + complex_dump(level + 1, "GET_NEXT_BUILDDEF", frm); + break; + case 0x4001: + valueless_dump(level + 1, "COLD_RESET", frm); + break; + case 0x4002: + valueless_dump(level + 1, "WARM_RESET", frm); + break; + case 0x4003: + valueless_dump(level + 1, "COLD_HALT", frm); + break; + case 0x4004: + valueless_dump(level + 1, "WARM_HALT", frm); + break; + case 0x4005: + valueless_dump(level + 1, "INIT_BT_STACK", frm); + break; + case 0x4006: + valueless_dump(level + 1, "ACTIVATE_BT_STACK", frm); + break; + case 0x4007: + valueless_dump(level + 1, "ENABLE_TX", frm); + break; + case 0x4008: + valueless_dump(level + 1, "DISABLE_TX", frm); + break; + case 0x4009: + valueless_dump(level + 1, "RECAL", frm); + break; + case 0x4012: + valueless_dump(level + 1, "CANCEL_PAGE", frm); + break; + case 0x6000: + valueless_dump(level + 1, "NO_VARIABLE", frm); + break; case 0x481c: uint16_dump(level + 1, "MAP_SCO_PCM", frm); break; @@ -226,6 +308,12 @@ static inline void bccmd_dump(int level, struct frame *frm) case 0x6806: uint16_dump(level + 1, "FAULT_ARG", frm); break; + case 0x6827: + int8_dump(level + 1, "MAX_TX_POWER", frm); + break; + case 0x682b: + int8_dump(level + 1, "DEFAULT_TX_POWER", frm); + break; case 0x7003: pskey_dump(level + 1, frm); break; -- 2.47.3