Diff between 3e5ef668356f85fcb84041e70429f4abb020ae44 and 1b89af163bd10ebdf07ba0ab9917a54060457e66

Changed Files

File Additions Deletions Status
tools/parser/hci.c +27 -2 modified

Full Patch

diff --git a/tools/parser/hci.c b/tools/parser/hci.c
index a0e13cc..7787dd0 100644
--- a/tools/parser/hci.c
+++ b/tools/parser/hci.c
@@ -521,14 +521,34 @@ static inline void ext_inquiry_response_dump(int level, struct frame *frm)
 		length--;
 
 		switch (type) {
+		case 0x01:
+			p_indent(level, frm);
+			printf("Flags:");
+			for (i = 0; i < length; i++)
+				printf(" 0x%2.2x", *((uint8_t *) (frm->ptr + i)));
+			printf("\n");
+			break;
+
+		case 0x02:
+		case 0x03:
+			p_indent(level, frm);
+			printf("%s service classes:",
+					type == 0x02 ? "Shortened" : "Complete");
+			for (i = 0; i < length / 2; i++) {
+				uint16_t val = btohs(bt_get_unaligned((uint16_t *) (frm->ptr + (i * 2))));
+				printf(" 0x%4.4x", val);
+			}
+			printf("\n");
+			break;
+
 		case 0x08:
 		case 0x09:
 			str = malloc(length + 1);
 			if (str) {
 				snprintf(str, length + 1, "%s", (char *) frm->ptr);
 				for (i = 0; i < length; i++)
-				if (!isprint(str[i]))
-					str[i] = '.';
+					if (!isprint(str[i]))
+						str[i] = '.';
 				p_indent(level, frm);
 				printf("%s local name: \'%s\'\n",
 					type == 0x08 ? "Shortened" : "Complete", str);
@@ -536,6 +556,11 @@ static inline void ext_inquiry_response_dump(int level, struct frame *frm)
 			}
 			break;
 
+		case 0x0a:
+			p_indent(level, frm);
+			printf("TX power level: %d\n", *((uint8_t *) frm->ptr));
+			break;
+
 		default:
 			p_indent(level, frm);
 			printf("Unknown type 0x%02x with %d bytes data\n",