Diff between 2a233e5e2663813a01d58cbe06e9dd77ca8e33d0 and 481cd0ba67ef6e920e08d2739f0c9b2b245b8d84

Changed Files

File Additions Deletions Status
tools/hcidump.c +1 -10 modified
tools/parser/parser.c +16 -10 modified
tools/parser/parser.h +6 -3 modified

Full Patch

diff --git a/tools/hcidump.c b/tools/hcidump.c
index fe78301..000be83 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 5e0e5a9..aa828fd 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; 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");
@@ -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; 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");
@@ -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 dae3a0f..d2662be 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);
 }