diff --git a/tools/hcidump.c b/tools/hcidump.c
index f6b1f40..ac5c2ba 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
" -A, --audio=file Extract SCO audio data\n"
" -B, --btsnoop Use BTSnoop file format\n"
" -V, --verbose Verbose decoding\n"
+ " -Y, --novendor No vendor commands or events\n"
" -h, --help Give this help list\n"
" --usage Give a short usage message\n"
);
{ "audio", 1, 0, 'A' },
{ "btsnoop", 0, 0, 'B' },
{ "verbose", 0, 0, 'V' },
+ { "novendor", 0, 0, 'Y' },
+ { "nopermcheck", 0, 0, 'Z' },
{ "help", 0, 0, 'h' },
{ 0 }
};
printf("HCI sniffer - Bluetooth packet analyzer ver %s\n", VERSION);
- while ((opt=getopt_long(argc, argv, "i:l:p:m:w:r:s:n:taxXRC:H:O:A:BVZh", main_options, NULL)) != -1) {
+ while ((opt=getopt_long(argc, argv, "i:l:p:m:w:r:s:n:taxXRC:H:O:A:BVYZh", main_options, NULL)) != -1) {
switch(opt) {
case 'i':
if (strcasecmp(optarg, "none") && strcasecmp(optarg, "system"))
flags |= DUMP_VERBOSE;
break;
+ case 'Y':
+ flags |= DUMP_NOVENDOR;
+ break;
+
case 'Z':
permcheck = 0;
break;
diff --git a/tools/parser/hci.c b/tools/parser/hci.c
index ca4640f..2951780 100644
--- a/tools/parser/hci.c
+++ b/tools/parser/hci.c
if (p_filter(FILT_HCI))
return;
- p_indent(level, frm);
+ if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
+ return;
+ p_indent(level, frm);
printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n",
opcode2str(opcode), ogf, ocf, hdr->plen);
frm->ptr += HCI_COMMAND_HDR_SIZE;
frm->len -= HCI_COMMAND_HDR_SIZE;
- if (ogf == OGF_VENDOR_CMD && ocf == 0 && get_manufacturer() == 10) {
- csr_dump(level + 1, frm);
- return;
+ if (ogf == OGF_VENDOR_CMD) {
+ if (ocf == 0 && get_manufacturer() == 10) {
+ csr_dump(level + 1, frm);
+ return;
+ }
}
if (!(parser.flags & DUMP_VERBOSE)) {
uint16_t ogf = cmd_opcode_ogf(opcode);
uint16_t ocf = cmd_opcode_ocf(opcode);
+ if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
+ return;
+
p_indent(level, frm);
printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n",
opcode2str(opcode), ogf, ocf, evt->ncmd);
{
evt_cmd_status *evt = frm->ptr;
uint16_t opcode = btohs(evt->opcode);
+ uint16_t ogf = cmd_opcode_ogf(opcode);
+ uint16_t ocf = cmd_opcode_ocf(opcode);
+
+ if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
+ return;
p_indent(level, frm);
printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n",
- opcode2str(opcode), cmd_opcode_ogf(opcode),
- cmd_opcode_ocf(opcode), evt->status, evt->ncmd);
+ opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd);
if (evt->status > 0) {
p_indent(level, frm);
if (p_filter(FILT_HCI))
return;
- p_indent(level, frm);
-
if (event <= EVENT_NUM) {
+ p_indent(level, frm);
printf("HCI Event: %s (0x%2.2x) plen %d\n",
- event_str[hdr->evt], hdr->evt, hdr->plen);
+ event_str[hdr->evt], hdr->evt, hdr->plen);
} else if (hdr->evt == EVT_TESTING) {
+ p_indent(level, frm);
printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
} else if (hdr->evt == EVT_VENDOR) {
+ if (parser.flags & DUMP_NOVENDOR)
+ return;
+
+ p_indent(level, frm);
printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
+
if (get_manufacturer() == 10) {
frm->ptr += HCI_EVENT_HDR_SIZE;
frm->len -= HCI_EVENT_HDR_SIZE;
csr_dump(level + 1, frm);
return;
}
- } else
+ } else {
+ p_indent(level, frm);
printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen);
+ }
frm->ptr += HCI_EVENT_HDR_SIZE;
frm->len -= HCI_EVENT_HDR_SIZE;
return;
}
+ if (parser.flags & DUMP_NOVENDOR)
+ return;
+
if (get_manufacturer() == 12) {
bpa_dump(level, frm);
return;
diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index 42ed05b..1c4f80a 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
/* Parser flags */
#define DUMP_WIDTH 20
-#define DUMP_ASCII 0x01
-#define DUMP_HEX 0x02
-#define DUMP_EXT 0x04
-#define DUMP_RAW 0x08
-#define DUMP_BPA 0x10
-#define DUMP_BTSNOOP 0x20
-#define DUMP_VERBOSE 0x40
-#define DUMP_TSTAMP 0x80
+#define DUMP_ASCII 0x0001
+#define DUMP_HEX 0x0002
+#define DUMP_EXT 0x0004
+#define DUMP_RAW 0x0008
+#define DUMP_BPA 0x0010
+#define DUMP_TSTAMP 0x0100
+#define DUMP_VERBOSE 0x0200
+#define DUMP_BTSNOOP 0x1000
+#define DUMP_NOVENDOR 0x2000
#define DUMP_TYPE_MASK (DUMP_ASCII | DUMP_HEX | DUMP_EXT)
/* Parser filter */