From 481cd0ba67ef6e920e08d2739f0c9b2b245b8d84 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Thu, 7 Feb 2002 04:47:36 +0000 Subject: [PATCH] hcidump: RAW mode fixes. Indentation fixes. Cleanup. --- tools/hcidump.c | 11 +---------- tools/parser/parser.c | 26 ++++++++++++++++---------- tools/parser/parser.h | 9 ++++++--- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/tools/hcidump.c b/tools/hcidump.c index fe78301d9..000be83dd 100644 --- a/tools/hcidump.c +++ b/tools/hcidump.c @@ -115,13 +115,6 @@ static void process_frames(int dev, int sock, int file) 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); @@ -303,8 +296,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) break; case 'R': - flags |= DUMP_HEX; - mode = RAW; + flags |= DUMP_RAW; break; case 'r': @@ -345,7 +337,6 @@ int main(int argc, char *argv[]) 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 5e0e5a9b9..aa828fd79 100644 --- a/tools/parser/parser.c +++ b/tools/parser/parser.c @@ -39,18 +39,22 @@ struct parser_t parser; 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; ilen; i++, n++) { if (n == 1) - p_indent(level, 0); + p_indent(level, frm); printf("%2.2X ", buf[i]); if (n == DUMP_WIDTH) { printf("\n"); @@ -61,13 +65,14 @@ static inline void hex_dump(int level, unsigned char *buf, int len) 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; ilen; 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"); @@ -84,12 +89,13 @@ void raw_dump(int level, struct frame *frm) 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 dae3a0f9b..d2662be15 100644 --- a/tools/parser/parser.h +++ b/tools/parser/parser.h @@ -41,6 +41,7 @@ struct frame { #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 @@ -74,7 +75,6 @@ static inline void p_indent(int level, struct frame *f) 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 @@ -92,7 +92,10 @@ void sdp_dump(int level, struct frame *frm); 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); } -- 2.47.3