Diff between f6a3c30d3c1e493f2cf1f0f68daf470a8fa3ad8e and 04b7d39504e13d25bf8f0a6e0e8e04e0b77074af

Changed Files

File Additions Deletions Status
tools/parser/hci.c +53 -9 modified

Full Patch

diff --git a/tools/parser/hci.c b/tools/parser/hci.c
index ae48f77..84fabbf 100644
--- a/tools/parser/hci.c
+++ b/tools/parser/hci.c
@@ -455,6 +455,53 @@ static char *airmode2str(uint8_t mode)
 	}
 }
 
+static inline void ext_inquiry_response_dump(int level, struct frame *frm)
+{
+	void *ptr = frm->ptr;
+	uint32_t len = frm->len;
+	uint8_t type, length;
+	char *str;
+	int i;
+
+	length = get_u8(frm);
+
+	while (length > 0) {
+		type = get_u8(frm);
+		length--;
+
+		switch (type) {
+		case 0x08:
+		case 0x09:
+			str = malloc(length + 1);
+			if (str) {
+				snprintf(str, length + 1, "%s", frm->ptr);
+				for (i = 0; i < length; i++)
+				if (!isprint(str[i]))
+					str[i] = '.';
+				p_indent(level, frm);
+				printf("%s local name: \'%s\'\n",
+					type == 0x08 ? "Shortened" : "Complete", str);
+				free(str);
+			}
+			break;
+
+		default:
+			p_indent(level, frm);
+			printf("Unknown type 0x%02x with %d bytes data\n",
+								type, length);
+			break;
+		}
+
+		frm->ptr += length;
+		frm->len -= length;
+
+		length = get_u8(frm);
+	}
+
+	frm->ptr = ptr + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
+	frm->len = len + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
+}
+
 static inline void generic_command_dump(int level, struct frame *frm)
 {
 	uint16_t handle = btohs(htons(get_u16(frm)));
@@ -475,7 +522,7 @@ static inline void bdaddr_command_dump(int level, struct frame *frm)
 
 	p_indent(level, frm);
 	ba2str(bdaddr, addr);
-        printf("bdaddr %s\n", addr);
+	printf("bdaddr %s\n", addr);
 
 	raw_dump(level, frm);
 }
@@ -643,8 +690,8 @@ static inline void read_remote_ext_features_dump(int level, struct frame *frm)
 {
 	read_remote_ext_features_cp *cp = frm->ptr;
 
-        p_indent(level, frm);
-        printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);
+	p_indent(level, frm);
+	printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);
 }
 
 static inline void write_link_policy_dump(int level, struct frame *frm)
@@ -867,7 +914,7 @@ static inline void write_ext_inquiry_response_dump(int level, struct frame *frm)
 	frm->ptr++;
 	frm->len--;
 
-	raw_dump(level, frm);
+	ext_inquiry_response_dump(level, frm);
 }
 
 static inline void request_transmit_power_level_dump(int level, struct frame *frm)
@@ -1401,7 +1448,7 @@ static inline void read_ext_inquiry_response_dump(int level, struct frame *frm)
 		frm->ptr += 2;
 		frm->len -= 2;
 
-		raw_dump(level, frm);
+		ext_inquiry_response_dump(level, frm);
 	}
 }
 
@@ -2256,10 +2303,7 @@ static inline void extended_inq_result_dump(int level, struct frame *frm)
 		frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
 		frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
 
-		raw_dump(level, frm);
-
-		frm->ptr += EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE;
-		frm->len -= EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE;
+		ext_inquiry_response_dump(level, frm);
 	}
 }