Diff between 63dd921d07db84e235d9d8f0f0a03982354bf11c and e32890d327f9429ddf4bb54e6b774877a91fb816

Changed Files

File Additions Deletions Status
tools/parser/hci.c +57 -0 modified

Full Patch

diff --git a/tools/parser/hci.c b/tools/parser/hci.c
index 4f785be..4ab0a15 100644
--- a/tools/parser/hci.c
+++ b/tools/parser/hci.c
@@ -426,6 +426,22 @@ static char *mode2str(uint8_t mode)
 	}
 }
 
+static char *airmode2str(uint8_t mode)
+{
+	switch (mode) {
+	case 0x00:
+		return "u-law log";
+	case 0x01:
+		return "A-law log";
+	case 0x02:
+		return "CVSD";
+	case 0x04:
+		return "Transparent data";
+	default:
+		return "Reserved";
+	}
+}
+
 static inline void generic_command_dump(int level, struct frame *frm)
 {
 	uint16_t handle = btohs(htons(get_u16(frm)));
@@ -1637,6 +1653,41 @@ static inline void read_remote_ext_features_complete_dump(int level, struct fram
 	}
 }
 
+static inline void sync_conn_complete_dump(int level, struct frame *frm)
+{
+	evt_sync_conn_complete *evt = frm->ptr;
+	char addr[18];
+
+	ba2str(&evt->bdaddr, addr);
+
+	p_indent(level, frm);
+	printf("status 0x%2.2x handle %d bdaddr %s type %s\n",
+		evt->status, btohs(evt->handle), addr,
+		evt->link_type == 0 ? "SCO" : "eSCO");
+
+	if (evt->status > 0) {
+		p_indent(level, frm);
+		printf("Error: %s\n", status2str(evt->status));
+	} else {
+		p_indent(level, frm);
+		printf("Air mode: %s\n", airmode2str(evt->air_mode));
+	}
+}
+
+static inline void sync_conn_changed_dump(int level, struct frame *frm)
+{
+	evt_sync_conn_changed *evt = frm->ptr;
+
+	p_indent(level, frm);
+	printf("status 0x%2.2x handle %d\n",
+		evt->status, btohs(evt->handle));
+
+	if (evt->status > 0) {
+		p_indent(level, frm);
+		printf("Error: %s\n", status2str(evt->status));
+	}
+}
+
 static inline void event_dump(int level, struct frame *frm)
 {
 	hci_event_hdr *hdr = frm->ptr;
@@ -1776,6 +1827,12 @@ static inline void event_dump(int level, struct frame *frm)
 	case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE:
 		read_remote_ext_features_complete_dump(level + 1, frm);
 		break;
+	case EVT_SYNC_CONN_COMPLETE:
+		sync_conn_complete_dump(level + 1, frm);
+		break;
+	case EVT_SYNC_CONN_CHANGED:
+		sync_conn_changed_dump(level + 1, frm);
+		break;
 	default:
 		raw_dump(level, frm);
 		break;