From ebbf664e296e32f45b712da1276bc93d3980e6de Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 1 Nov 2005 14:43:57 +0000 Subject: [PATCH] hcidump: Add more missing LMP decodings --- tools/parser/lmp.c | 135 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 127 insertions(+), 8 deletions(-) diff --git a/tools/parser/lmp.c b/tools/parser/lmp.c index 2ddcc6601..d88d27452 100644 --- a/tools/parser/lmp.c +++ b/tools/parser/lmp.c @@ -470,20 +470,17 @@ static inline void hold_dump(int level, struct frame *frm) static inline void sniff_req_dump(int level, struct frame *frm) { - uint8_t flags = LMP_U8(frm); + uint8_t timing = LMP_U8(frm); uint16_t dsniff = LMP_U16(frm); uint16_t tsniff = LMP_U16(frm); uint16_t attempt = LMP_U16(frm); uint16_t timeout = LMP_U16(frm); p_indent(level, frm); - printf("timing control flags 0x%2.2x\n", flags); - - p_indent(level, frm); - printf("D_sniff %d\n", dsniff); + printf("timing control flags 0x%2.2x\n", timing); p_indent(level, frm); - printf("T_sniff %d\n", tsniff); + printf("D_sniff %d T_sniff %d\n", dsniff, tsniff); p_indent(level, frm); printf("sniff attempt %d\n", attempt); @@ -492,6 +489,80 @@ static inline void sniff_req_dump(int level, struct frame *frm) printf("sniff timeout %d\n", timeout); } +static inline void park_req_dump(int level, struct frame *frm) +{ + uint8_t timing = LMP_U8(frm); + uint16_t db = LMP_U16(frm); + uint16_t tb = LMP_U16(frm); + uint8_t nb = LMP_U8(frm); + uint8_t xb = LMP_U8(frm); + uint8_t pmaddr = LMP_U8(frm); + uint8_t araddr = LMP_U8(frm); + uint8_t nbsleep = LMP_U8(frm); + uint8_t dbsleep = LMP_U8(frm); + uint8_t daccess = LMP_U8(frm); + uint8_t taccess = LMP_U8(frm); + uint8_t nslots = LMP_U8(frm); + uint8_t npoll = LMP_U8(frm); + uint8_t access = LMP_U8(frm); + + p_indent(level, frm); + printf("timing control flags 0x%2.2x\n", timing); + + p_indent(level, frm); + printf("D_B %d T_B %d N_B %d X_B %d\n", db, tb, nb, xb); + + p_indent(level, frm); + printf("PM_ADDR %d AR_ADDR %d\n", pmaddr, araddr); + + p_indent(level, frm); + printf("N_Bsleep %d D_Bsleep %d\n", nbsleep, dbsleep); + + p_indent(level, frm); + printf("D_access %d T_access %d\n", daccess, taccess); + + p_indent(level, frm); + printf("N_acc-slots %d N_poll %d\n", nslots, npoll); + + p_indent(level, frm); + printf("M_access %d\n", access & 0x0f); + + p_indent(level, frm); + printf("access scheme 0x%2.2x\n", access >> 4); +} + +static inline void modify_beacon_dump(int level, struct frame *frm) +{ + uint8_t timing = LMP_U8(frm); + uint16_t db = LMP_U16(frm); + uint16_t tb = LMP_U16(frm); + uint8_t nb = LMP_U8(frm); + uint8_t xb = LMP_U8(frm); + uint8_t daccess = LMP_U8(frm); + uint8_t taccess = LMP_U8(frm); + uint8_t nslots = LMP_U8(frm); + uint8_t npoll = LMP_U8(frm); + uint8_t access = LMP_U8(frm); + + p_indent(level, frm); + printf("timing control flags 0x%2.2x\n", timing); + + p_indent(level, frm); + printf("D_B %d T_B %d N_B %d X_B %d\n", db, tb, nb, xb); + + p_indent(level, frm); + printf("D_access %d T_access %d\n", daccess, taccess); + + p_indent(level, frm); + printf("N_acc-slots %d N_poll %d\n", nslots, npoll); + + p_indent(level, frm); + printf("M_access %d\n", access & 0x0f); + + p_indent(level, frm); + printf("access scheme 0x%2.2x\n", access >> 4); +} + static inline void power_req_dump(int level, struct frame *frm) { uint8_t val = LMP_U8(frm); @@ -764,6 +835,45 @@ static inline void supervision_timeout_dump(int level, struct frame *frm) printf("supervision timeout %d\n", timeout); } +static inline void test_control_dump(int level, struct frame *frm) +{ + uint8_t scenario = LMP_U8(frm); + uint8_t hopping = LMP_U8(frm); + uint8_t txfreq = LMP_U8(frm); + uint8_t rxfreq = LMP_U8(frm); + uint8_t power = LMP_U8(frm); + uint8_t poll = LMP_U8(frm); + uint8_t packet = LMP_U8(frm); + uint16_t length = LMP_U16(frm); + + p_indent(level, frm); + printf("test scenario %d\n", scenario); + + p_indent(level, frm); + printf("hopping mode %d\n", hopping); + + p_indent(level, frm); + printf("TX frequency %d\n", txfreq); + + p_indent(level, frm); + printf("RX frequency %d\n", rxfreq); + + p_indent(level, frm); + printf("power control mode %d\n", power); + + p_indent(level, frm); + printf("poll period %d\n", poll); + + p_indent(level, frm); + printf("poll period %d\n", poll); + + p_indent(level, frm); + printf("packet type 0x%2.2x\n", packet); + + p_indent(level, frm); + printf("length of test data %d\n", length); +} + static inline void encryption_key_size_mask_res_dump(int level, struct frame *frm) { uint16_t mask = LMP_U16(frm); @@ -881,11 +991,11 @@ void lmp_dump(int level, struct frame *frm) p_indent(level, frm); - tmp = get_u8(frm); + tmp = LMP_U8(frm); tid = tmp & 0x01; opcode = (tmp & 0xfe) >> 1; if (opcode > 123) { - tmp = get_u8(frm); + tmp = LMP_U8(frm); opcode += tmp << 7; } @@ -966,6 +1076,12 @@ void lmp_dump(int level, struct frame *frm) case 23: sniff_req_dump(level + 1, frm); return; + case 25: + park_req_dump(level + 1, frm); + return; + case 28: + modify_beacon_dump(level + 1, frm); + return; case 31: case 32: power_req_dump(level + 1, frm); @@ -1008,6 +1124,9 @@ void lmp_dump(int level, struct frame *frm) case 55: supervision_timeout_dump(level + 1, frm); return; + case 57: + test_control_dump(level + 1, frm); + return; case 59: encryption_key_size_mask_res_dump(level + 1, frm); return; -- 2.47.3