hcidump reads raw HCI data coming from and going to a Bluetooth device and prints to screen commands, events and data in a human-readable form. Optionally, the dump can be written to a file rather than parsed, and the dump file can be parsed in a subsequent moment. NetBSD support added and packaged by Iain D. Hibbert, via pkgsrc-wip.
175 lines
4.4 KiB
Text
175 lines
4.4 KiB
Text
$NetBSD: patch-ag,v 1.1.1.1 2006/07/25 16:28:47 salo Exp $
|
|
|
|
NetBSD compatibility changes
|
|
|
|
--- parser/hci.c.orig 2003-09-13 00:38:11.000000000 +0100
|
|
+++ parser/hci.c
|
|
@@ -25,9 +25,13 @@
|
|
*/
|
|
|
|
#include <sys/types.h>
|
|
+#include <sys/time.h>
|
|
#include <sys/endian.h>
|
|
-#include <netgraph/bluetooth/include/ng_hci.h>
|
|
#include <stdio.h>
|
|
+#include <string.h>
|
|
+
|
|
+#include <netbt/bluetooth.h>
|
|
+#include <netbt/hci.h>
|
|
|
|
#include "parser.h"
|
|
|
|
@@ -215,56 +219,56 @@ char *cmd_status_map[] = {
|
|
|
|
static void command_dump(int level, struct frame *frm)
|
|
{
|
|
- ng_hci_cmd_pkt_t *hdr = frm->ptr;
|
|
+ hci_cmd_hdr_t *hdr = (hci_cmd_hdr_t *)frm->ptr;
|
|
uint16_t opcode = le16toh(hdr->opcode);
|
|
- uint16_t ogf = NG_HCI_OGF(opcode);
|
|
- uint16_t ocf = NG_HCI_OCF(opcode);
|
|
+ uint16_t ogf = HCI_OGF(opcode);
|
|
+ uint16_t ocf = HCI_OCF(opcode);
|
|
char *cmd;
|
|
|
|
if (p_filter(FILT_HCI))
|
|
return;
|
|
|
|
switch (ogf) {
|
|
- case NG_HCI_OGF_INFO:
|
|
+ case HCI_OGF_INFO:
|
|
if (ocf <= CMD_INFO_NUM)
|
|
cmd = cmd_info_map[ocf];
|
|
else
|
|
cmd = "Unknown";
|
|
break;
|
|
|
|
- case NG_HCI_OGF_HC_BASEBAND:
|
|
+ case HCI_OGF_HC_BASEBAND:
|
|
if (ocf <= CMD_HOSTCTL_NUM)
|
|
cmd = cmd_hostctl_map[ocf];
|
|
else
|
|
cmd = "Unknown";
|
|
break;
|
|
|
|
- case NG_HCI_OGF_LINK_CONTROL:
|
|
+ case HCI_OGF_LINK_CONTROL:
|
|
if (ocf <= CMD_LINKCTL_NUM)
|
|
cmd = cmd_linkctl_map[ocf];
|
|
else
|
|
cmd = "Unknown";
|
|
break;
|
|
|
|
- case NG_HCI_OGF_LINK_POLICY:
|
|
+ case HCI_OGF_LINK_POLICY:
|
|
if (ocf <= CMD_LINKPOL_NUM)
|
|
cmd = cmd_linkpol_map[ocf];
|
|
else
|
|
cmd = "Unknown";
|
|
break;
|
|
|
|
- case NG_HCI_OGF_STATUS:
|
|
+ case HCI_OGF_STATUS:
|
|
if (ocf <= CMD_STATUS_NUM)
|
|
cmd = cmd_status_map[ocf];
|
|
else
|
|
cmd = "Unknown";
|
|
break;
|
|
|
|
- case NG_HCI_OGF_BT_LOGO:
|
|
+ case HCI_OGF_BT_LOGO:
|
|
cmd = "Testing";
|
|
break;
|
|
|
|
- case NG_HCI_OGF_VENDOR:
|
|
+ case HCI_OGF_VENDOR:
|
|
cmd = "Vendor";
|
|
break;
|
|
|
|
@@ -286,7 +290,7 @@ static void command_dump(int level, stru
|
|
|
|
static void event_dump(int level, struct frame *frm)
|
|
{
|
|
- ng_hci_event_pkt_t *hdr = frm->ptr;
|
|
+ hci_event_hdr_t *hdr = (hci_event_hdr_t *)frm->ptr;
|
|
|
|
if (p_filter(FILT_HCI))
|
|
return;
|
|
@@ -296,9 +300,9 @@ static void event_dump(int level, struct
|
|
if (hdr->event <= EVENT_NUM)
|
|
printf("HCI Event: %s(0x%2.2x) plen %d\n",
|
|
event_map[hdr->event], hdr->event, hdr->length);
|
|
- else if (hdr->event == NG_HCI_EVENT_BT_LOGO)
|
|
+ else if (hdr->event == HCI_EVENT_BT_LOGO)
|
|
printf("HCI Event: Testing(0x%2.2x) plen %d\n", hdr->event, hdr->length);
|
|
- else if (hdr->event == NG_HCI_EVENT_VENDOR)
|
|
+ else if (hdr->event == HCI_EVENT_VENDOR)
|
|
printf("HCI Event: Vendor(0x%2.2x) plen %d\n", hdr->event, hdr->length);
|
|
else
|
|
printf("HCI Event: code 0x%2.2x plen %d\n", hdr->event, hdr->length);
|
|
@@ -311,7 +315,7 @@ static void event_dump(int level, struct
|
|
|
|
static void acl_dump(int level, struct frame *frm)
|
|
{
|
|
- ng_hci_acldata_pkt_t *hdr = (void *) frm->ptr;
|
|
+ hci_acldata_hdr_t *hdr = (void *) frm->ptr;
|
|
uint16_t handle = le16toh(hdr->con_handle);
|
|
uint16_t dlen = le16toh(hdr->length);
|
|
uint8_t flags = (handle >> 12); /* flags */
|
|
@@ -319,14 +323,14 @@ static void acl_dump(int level, struct f
|
|
if (!p_filter(FILT_HCI)) {
|
|
p_indent(level, frm);
|
|
printf("ACL data: handle 0x%4.4x flags 0x%2.2x dlen %d\n",
|
|
- NG_HCI_CON_HANDLE(handle), flags, dlen);
|
|
+ HCI_CON_HANDLE(handle), flags, dlen);
|
|
level++;
|
|
}
|
|
|
|
frm->ptr += sizeof(*hdr);
|
|
frm->len -= sizeof(*hdr);
|
|
frm->flags = flags;
|
|
- frm->handle = NG_HCI_CON_HANDLE(handle);
|
|
+ frm->handle = HCI_CON_HANDLE(handle);
|
|
|
|
if (parser.filter & ~FILT_HCI)
|
|
l2cap_dump(level, frm);
|
|
@@ -336,13 +340,13 @@ static void acl_dump(int level, struct f
|
|
|
|
static void sco_dump(int level, struct frame *frm)
|
|
{
|
|
- ng_hci_scodata_pkt_t *hdr = (void *) frm->ptr;
|
|
+ hci_scodata_hdr_t *hdr = (void *) frm->ptr;
|
|
uint16_t handle = le16toh(hdr->con_handle);
|
|
|
|
if (!p_filter(FILT_SCO)) {
|
|
p_indent(level, frm);
|
|
printf("SCO data: handle 0x%4.4x dlen %d\n",
|
|
- NG_HCI_CON_HANDLE(handle), hdr->length);
|
|
+ HCI_CON_HANDLE(handle), hdr->length);
|
|
level++;
|
|
|
|
frm->ptr += sizeof(*hdr);
|
|
@@ -356,19 +360,19 @@ void hci_dump(int level, struct frame *f
|
|
uint8_t type = *(uint8_t *)frm->ptr;
|
|
|
|
switch (type) {
|
|
- case NG_HCI_CMD_PKT:
|
|
+ case HCI_CMD_PKT:
|
|
command_dump(level, frm);
|
|
break;
|
|
|
|
- case NG_HCI_EVENT_PKT:
|
|
+ case HCI_EVENT_PKT:
|
|
event_dump(level, frm);
|
|
break;
|
|
|
|
- case NG_HCI_ACL_DATA_PKT:
|
|
+ case HCI_ACL_DATA_PKT:
|
|
acl_dump(level, frm);
|
|
break;
|
|
|
|
- case NG_HCI_SCO_DATA_PKT:
|
|
+ case HCI_SCO_DATA_PKT:
|
|
sco_dump(level, frm);
|
|
break;
|
|
|