diff --git a/tools/hcidump.c b/tools/hcidump.c
index 0734927..701fc88 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
int action = ANALYZE;
char * hci_pkt_type[] = {
- "Unknown ",
- "Command ",
+ "Unknown",
+ "Command",
"ACL Data",
"SCO Data",
- "Event "
+ "Event"
};
void usage(void)
{
hci_command_hdr *hdr = ptr;
__u16 opcode = __le16_to_cpu(hdr->opcode);
- printf(" ogf: 0x%x ocf 0x%x plen: %d\n",
+ printf("ogf 0x%x ocf 0x%x plen %d\n",
cmd_opcode_ogf(opcode), cmd_opcode_ocf(opcode), hdr->plen);
}
void inline event_dump(void *ptr, int len)
{
hci_event_hdr *hdr = ptr;
- printf(" code: 0x%x plen: %d\n", hdr->evt, hdr->plen);
+ printf("code 0x%2.2x plen %d\n", hdr->evt, hdr->plen);
}
void inline l2cap_dump(void *ptr, int len)
__u16 dlen = __le16_to_cpu(hdr->len);
__u16 cid = __le16_to_cpu(hdr->cid);
- printf(" L2CAP: cid: 0x%x len: %d\n", cid, dlen);
+ printf(" L2CAP: cid 0x%x len %d\n", cid, dlen);
ptr += L2CAP_HDR_SIZE;
if (cid == 0x1) {
l2cap_cmd_hdr *hdr = ptr;
__u16 len = __le16_to_cpu(hdr->len);
- printf(" signaling: code: 0x%x ident: %d len: %d\n",
+ printf(" signaling: code 0x%x ident %d len %d\n",
hdr->code, hdr->ident, len);
}
}
__u16 handle = __le16_to_cpu(hdr->handle);
__u16 dlen = __le16_to_cpu(hdr->dlen);
- printf(" handle: 0x%x flags: 0x%x dlen: %d\n",
+ printf("handle 0x%x flags 0x%x dlen %d\n",
acl_handle(handle), acl_flags(handle), dlen);
ptr += HCI_ACL_HDR_SIZE;
case HCI_ACLDATA_PKT:
acl_dump(ptr, len);
break;
+
+ default:
+ printf("\n");
+ break;
}
}
char data[HCI_MAX_FRAME_SIZE], ctrl[100], *ptr;
int s, len, type, opt, dev, in;
struct sockaddr_hci addr;
+ struct hci_filter flt;
struct cmsghdr *cmsg;
struct msghdr msg;
struct iovec iv;
exit(1);
}
+ /* Setup filter */
+ flt.type_mask = ~0; // All packet types
+ flt.event_mask[0] = ~0L; // All events
+ flt.event_mask[1] = ~0L;
+ if (setsockopt(s, SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) {
+ perror("Can't set HCI filter");
+ exit(1);
+ }
+
/* Bind socket to the HCI device */
addr.hci_family = AF_BLUETOOTH;
addr.hci_dev = dev;
if( type < 0 || type > 4 )
type = 0;
- printf("%c %s(0x%2.2x), len %d\n",
- (in ? '>' : '<'), hci_pkt_type[type], (__u8)type, len);
-
- switch( action ){
+ switch (action) {
case ANALYZE:
+ printf("%c %s: ", (in ? '>' : '<'),
+ hci_pkt_type[type] );
+
analyze(type, ptr, len);
break;
case HEXDUMP:
+ printf("%c type 0x%2.2x len %d\n",
+ (in ? '>' : '<'),
+ (__u8) type, len);
+
hex_dump(" ", ptr, len);
break;
}