aboutsummaryrefslogtreecommitdiff
path: root/parser/csr.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2005-02-24 17:21:32 +0000
committerMarcel Holtmann <marcel@holtmann.org>2005-02-24 17:21:32 +0000
commitcacf5a2aa6e2883cd8c80bdf1346ace2d476829e (patch)
tree65255c1ca7e265bf19d4e37d96b27c2aad2db6e8 /parser/csr.c
parenta03ec7705c3b8300a60fce4169819f8fda126e47 (diff)
downloadhcidump-cacf5a2aa6e2883cd8c80bdf1346ace2d476829e.tar.gz
Display the handle and support FHS packets
Diffstat (limited to 'parser/csr.c')
-rw-r--r--parser/csr.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/parser/csr.c b/parser/csr.c
index 0b67a0c..c3a4b71 100644
--- a/parser/csr.c
+++ b/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;
}
}