From 3cca42e312faaab962a0694a5a1bf10004a23e02 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 24 Feb 2005 17:21:32 +0000 Subject: [PATCH] hcidump: Display the handle and support FHS packets --- tools/parser/csr.c | 33 ++++++++++++++++++++++++++++----- tools/parser/lmp.c | 11 ++++++++--- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/tools/parser/csr.c b/tools/parser/csr.c index 0b67a0c12..c3a4b71fa 100644 --- a/tools/parser/csr.c +++ b/tools/parser/csr.c @@ -34,6 +34,10 @@ #include "parser.h" +#define CSR_U8(frm) (get_u8(frm)) +#define CSR_U16(frm) (btohs(htons(get_u16(frm)))) +#define CSR_U32(frm) (btohl(htonl(get_u32(frm)))) + static char *cid2str(uint8_t cid) { switch (cid & 0x3f) { @@ -91,23 +95,42 @@ static char *frag2str(uint8_t frag) void csr_dump(int level, struct frame *frm) { uint8_t desc, cid, type; + uint16_t handle, master, addr; - desc = get_u8(frm); + desc = CSR_U8(frm); cid = desc & 0x3f; if (cid == 20) { - type = get_u8(frm); + type = CSR_U8(frm); if (!p_filter(FILT_LMP)) { switch (type) { + case 0x0f: + frm->handle = ((uint8_t *) frm->ptr)[17]; + frm->master = 0; + frm->len--; + lmp_dump(level, frm); + return; case 0x10: + frm->handle = ((uint8_t *) frm->ptr)[17]; frm->master = 1; + frm->len--; lmp_dump(level, frm); return; - case 0x0f: - frm->master = 0; - lmp_dump(level, frm); + case 0x12: + handle = CSR_U16(frm); + master = CSR_U16(frm); + addr = CSR_U16(frm); + p_indent(level, frm); + printf("FHS: handle %d addr %d (%s)\n", handle, + addr, master ? "master" : "slave"); + if (!master) + raw_dump(level, frm); + return; + case 0x7b: + p_indent(level, frm); + printf("LMP(r): duplicate (same SEQN)\n"); return; } } diff --git a/tools/parser/lmp.c b/tools/parser/lmp.c index 745d83502..dc0116946 100644 --- a/tools/parser/lmp.c +++ b/tools/parser/lmp.c @@ -478,13 +478,18 @@ void lmp_dump(int level, struct frame *frm) opcode += tmp << 7; } - printf("LMP(%c): %s(%c): ", frm->master ? 'm' : 's', + printf("LMP(%c): %s(%c): ", frm->master ? 's' : 'r', opcode2str(opcode), tid ? 's' : 'm'); if (opcode > 123) - printf("op code %d/%d\n", opcode & 0x7f, opcode >> 7); + printf("op code %d/%d", opcode & 0x7f, opcode >> 7); else - printf("op code %d\n", opcode); + printf("op code %d", opcode); + + if (frm->handle > 17) + printf(" handle %d\n", frm->handle); + else + printf("\n"); if (!(parser.flags & DUMP_VERBOSE)) { raw_dump(level, frm); -- 2.47.3