From d52d19afe28b5d244d67ff786df3e0b57ca4bb96 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 6 Jul 2005 17:58:05 +0000 Subject: [PATCH] hcidump: Handle system events and commands --- tools/hcidump.c | 4 +++- tools/parser/hci.c | 13 +++++++++++++ tools/parser/l2cap.c | 19 ++++++++++--------- tools/parser/obex.c | 1 + tools/parser/parser.h | 1 + tools/parser/sdp.c | 19 ++++++++++--------- 6 files changed, 38 insertions(+), 19 deletions(-) diff --git a/tools/hcidump.c b/tools/hcidump.c index b7f3e1031..f966c366d 100644 --- a/tools/hcidump.c +++ b/tools/hcidump.c @@ -190,7 +190,7 @@ static void process_frames(int dev, int sock, int fd, unsigned long flags) exit(1); } - if (device == HCI_DEV_NONE) + if (dev == HCI_DEV_NONE) printf("system: "); else printf("device: hci%d ", dev); @@ -216,7 +216,9 @@ static void process_frames(int dev, int sock, int fd, unsigned long flags) /* Process control message */ frm.data_len = len; + frm.dev_id = dev; frm.in = 0; + cmsg = CMSG_FIRSTHDR(&msg); while (cmsg) { switch (cmsg->cmsg_type) { diff --git a/tools/parser/hci.c b/tools/parser/hci.c index dfcd973d1..c41dec28b 100644 --- a/tools/parser/hci.c +++ b/tools/parser/hci.c @@ -2389,6 +2389,19 @@ static inline void vendor_dump(int level, struct frame *frm) if (p_filter(FILT_HCI)) return; + if (frm->dev_id == HCI_DEV_NONE) { + uint16_t type = btohs(htons(get_u16(frm))); + uint16_t plen = btohs(htons(get_u16(frm))); + + p_indent(level, frm); + + printf("System %s: type 0x%2.2x plen %d\n", + frm->in ? "event" : "command", type, plen); + + raw_dump(level, frm); + return; + } + if (get_manufacturer() == 12) { bpa_dump(level, frm); return; diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c index 7332967d5..168ad6f25 100644 --- a/tools/parser/l2cap.c +++ b/tools/parser/l2cap.c @@ -860,15 +860,16 @@ void l2cap_dump(int level, struct frame *frm) } memcpy(fr->data, frm->ptr, frm->len); fr->data_len = dlen + L2CAP_HDR_SIZE; - fr->len = frm->len; - fr->ptr = fr->data; - fr->in = frm->in; - fr->ts = frm->ts; - fr->handle = frm->handle; - fr->cid = frm->cid; - fr->num = frm->num; - fr->dlci = frm->dlci; - fr->channel = frm->channel; + fr->len = frm->len; + fr->ptr = fr->data; + fr->dev_id = frm->dev_id; + fr->in = frm->in; + fr->ts = frm->ts; + fr->handle = frm->handle; + fr->cid = frm->cid; + fr->num = frm->num; + fr->dlci = frm->dlci; + fr->channel = frm->channel; } else { if (!(fr = get_frame(frm->handle))) { fprintf(stderr, "Not enough connection handles\n"); diff --git a/tools/parser/obex.c b/tools/parser/obex.c index 65baf4a24..9e5a509d9 100644 --- a/tools/parser/obex.c +++ b/tools/parser/obex.c @@ -104,6 +104,7 @@ static struct frame *add_frame(struct frame *frm) fr->data_len = fr->len + frm->len; fr->len = fr->data_len; fr->ptr = fr->data; + fr->dev_id = frm->dev_id; fr->in = frm->in; fr->ts = frm->ts; fr->handle = frm->handle; diff --git a/tools/parser/parser.h b/tools/parser/parser.h index d807a94a7..d515ddd43 100644 --- a/tools/parser/parser.h +++ b/tools/parser/parser.h @@ -37,6 +37,7 @@ struct frame { uint32_t data_len; void *ptr; uint32_t len; + uint16_t dev_id; uint8_t in; uint8_t master; uint16_t handle; diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c index 3f0f5c59a..034e496fe 100644 --- a/tools/parser/sdp.c +++ b/tools/parser/sdp.c @@ -597,16 +597,17 @@ static int add_frame(struct frame *frm, int count) if (fr->data) free(fr->data); - fr->data = data; + fr->data = data; fr->data_len = len + count; - fr->len = fr->data_len; - fr->ptr = fr->data; - fr->in = frm->in; - fr->ts = frm->ts; - fr->handle = frm->handle; - fr->cid = frm->cid; - fr->num = frm->num; - fr->channel = frm->channel; + fr->len = fr->data_len; + fr->ptr = fr->data; + fr->dev_id = frm->dev_id; + fr->in = frm->in; + fr->ts = frm->ts; + fr->handle = frm->handle; + fr->cid = frm->cid; + fr->num = frm->num; + fr->channel = frm->channel; return pos; } -- 2.47.3