diff --git a/tools/hcidump.c b/tools/hcidump.c
index fe78301..000be83 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
frm.len = frm.data_len;
switch (mode) {
- case RAW:
- /* Print raw dump */
- printf("%c ", (frm.in ? '>' : '<'));
- raw_dump(0, &frm);
- fflush(stdout);
- break;
-
case WRITE:
/* Save dump */
dh->len = __cpu_to_le16(frm.data_len);
break;
case 'R':
- flags |= DUMP_HEX;
- mode = RAW;
+ flags |= DUMP_RAW;
break;
case 'r':
filter = ~0L;
switch (mode) {
- case RAW:
case PARSE:
init_parser(flags, filter);
process_frames(device, open_socket(device), -1);
diff --git a/tools/parser/parser.c b/tools/parser/parser.c
index 5e0e5a9..aa828fd 100644
--- a/tools/parser/parser.c
+++ b/tools/parser/parser.c
void init_parser(unsigned long flags, unsigned long filter)
{
+ if ((flags & DUMP_RAW) && !(flags & DUMP_TYPE_MASK))
+ flags &= DUMP_HEX;
+
parser.flags = flags;
parser.filter = filter;
parser.state = 0;
}
-static inline void hex_dump(int level, unsigned char *buf, int len)
+static inline void hex_dump(int level, struct frame *frm)
{
+ unsigned char *buf = frm->ptr;
register int i,n;
- for (i=0, n=1; i<len; i++, n++) {
+ for (i=0, n=1; i<frm->len; i++, n++) {
if (n == 1)
- p_indent(level, 0);
+ p_indent(level, frm);
printf("%2.2X ", buf[i]);
if (n == DUMP_WIDTH) {
printf("\n");
printf("\n");
}
-static inline void ascii_dump(int level, unsigned char *buf, int len)
+static inline void ascii_dump(int level, struct frame *frm)
{
+ unsigned char *buf = frm->ptr;
register int i,n;
- for (i=0, n=1; i<len; i++, n++) {
+ for (i=0, n=1; i<frm->len; i++, n++) {
if (n == 1)
- p_indent(level, 0);
+ p_indent(level, frm);
printf("%1c ", isprint(buf[i]) ? buf[i] : '.');
if (n == DUMP_WIDTH) {
printf("\n");
return;
switch (parser.flags & DUMP_TYPE_MASK) {
- case DUMP_HEX:
- hex_dump(level, frm->ptr, frm->len);
+ case DUMP_ASCII:
+ ascii_dump(level, frm);
break;
- case DUMP_ASCII:
- ascii_dump(level, frm->ptr, frm->len);
+ case DUMP_HEX:
+ hex_dump(level, frm);
break;
+
}
}
diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index dae3a0f..d2662be 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
#define DUMP_ASCII 0x02
#define DUMP_TYPE_MASK (DUMP_HEX | DUMP_ASCII)
#define DUMP_TSTAMP 0x04
+#define DUMP_RAW 0x08
/* Parser filter */
#define FILT_HCI 0x0001
if (!parser.state) {
if (parser.flags & DUMP_TSTAMP)
printf("%ld.%ld ", f->ts.tv_sec, f->ts.tv_usec);
-
printf("%c ", (f->in ? '>' : '<'));
parser.state = 1;
} else
static inline void parse(struct frame *frm)
{
- p_indent(-1, 0);
- hci_dump(0, frm);
+ p_indent(-1, NULL);
+ if (parser.flags & DUMP_RAW)
+ raw_dump(0, frm);
+ else
+ hci_dump(0, frm);
fflush(stdout);
}