Diff between 945cf43843a51e49b70623ac09b1951b3aa3eb11 and d693421f02e2b3e2af177814e32df76144e7a0fe

Changed Files

File Additions Deletions Status
monitor/bt.h +5 -0 modified
monitor/packet.c +124 -5 modified

Full Patch

diff --git a/monitor/bt.h b/monitor/bt.h
index 214e035..c8adb8d 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -427,6 +427,11 @@ struct bt_hci_rsp_le_read_local_features {
 	uint8_t  features[8];
 } __attribute__ ((packed));
 
+#define BT_HCI_CMD_LE_SET_RANDOM_ADDRESS	0x2005
+struct bt_hci_cmd_le_set_random_address {
+	uint8_t  bdaddr[6];
+} __attribute__ ((packed));
+
 #define BT_HCI_CMD_LE_READ_ADV_TX_POWER		0x2007
 struct bt_hci_rsp_le_read_adv_tx_power {
 	uint8_t  status;
diff --git a/monitor/packet.c b/monitor/packet.c
index 9edd0a8..26c0e9a 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -1133,6 +1133,13 @@ static void read_data_block_size_rsp(const void *data, uint8_t size)
 	print_field("Num blocks: %d", btohs(rsp->num_blocks));
 }
 
+static void le_set_event_mask_cmd(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_le_set_event_mask *cmd = data;
+
+	print_event_mask(cmd->mask);
+}
+
 static void le_read_buffer_size_rsp(const void *data, uint8_t size)
 {
 	const struct bt_hci_rsp_le_read_buffer_size *rsp = data;
@@ -1142,6 +1149,108 @@ static void le_read_buffer_size_rsp(const void *data, uint8_t size)
 	print_field("Num data packets: %d", rsp->le_max_pkt);
 }
 
+static void le_read_local_features_rsp(const void *data, uint8_t size)
+{
+	const struct bt_hci_rsp_le_read_local_features *rsp = data;
+
+	print_status(rsp->status);
+	print_features(rsp->features);
+}
+
+static void le_set_random_address_cmd(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_le_set_random_address *cmd = data;
+
+	print_bdaddr(cmd->bdaddr);
+}
+
+static void le_set_scan_parameters_cmd(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_le_set_scan_parameters *cmd = data;
+	const char *str;
+
+	switch (cmd->type) {
+	case 0x00:
+		str = "Passive";
+		break;
+	case 0x01:
+		str = "Active";
+		break;
+	default:
+		str = "Reserved";
+		break;
+	}
+
+	print_field("Type: %s (0x%2.2x)", str, cmd->type);
+
+	print_field("Interval: %.3f msec (0x%4.4x)",
+				cmd->interval * 0.625, cmd->interval);
+	print_field("Window: %.3f msec (0x%4.4x)",
+				cmd->window * 0.625, cmd->window);
+
+	switch (cmd->own_addr_type) {
+	case 0x00:
+		str = "Public";
+		break;
+	case 0x01:
+		str = "Random";
+		break;
+	default:
+		str = "Reserved";
+		break;
+	}
+
+	print_field("Own address type: %s (0x%2.2x)", str, cmd->own_addr_type);
+
+	switch (cmd->filter_policy) {
+	case 0x00:
+		str = "Accept all advertisement";
+		break;
+	case 0x01:
+		str = "Ignore not in white list";
+		break;
+	default:
+		str = "Reserved";
+		break;
+	}
+
+	print_field("Filter policy: %s (0x%2.2x)", str, cmd->filter_policy);
+}
+
+static void le_set_scan_enable_cmd(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_le_set_scan_enable *cmd = data;
+	const char *str;
+
+	switch (cmd->enable) {
+	case 0x00:
+		str = "Disabled";
+		break;
+	case 0x01:
+		str = "Enabled";
+		break;
+	default:
+		str = "Reserved";
+		break;
+	}
+
+	print_field("Scanning: %s (0x%2.2x)", str, cmd->enable);
+
+	switch (cmd->filter_dup) {
+	case 0x00:
+		str = "Disabled";
+		break;
+	case 0x01:
+		str = "Enabled";
+		break;
+	default:
+		str = "Reserved";
+		break;
+	}
+
+	print_field("Filter duplicates: %s (0x%2.2x)", str, cmd->filter_dup);
+}
+
 struct opcode_data {
 	uint16_t opcode;
 	const char *str;
@@ -1436,20 +1545,30 @@ static const struct opcode_data opcode_table[] = {
 	{ 0x140b, "Write Remote AMP ASSOC"		},
 
 	/* OGF 8 - LE Control */
-	{ 0x2001, "LE Set Event Mask"			},
+	{ 0x2001, "LE Set Event Mask",
+				le_set_event_mask_cmd, 8, true,
+				status_rsp, 1, true },
 	{ 0x2002, "LE Read Buffer Size",
 				null_cmd, 0, true,
 				le_read_buffer_size_rsp, 4, true },
-	{ 0x2003, "LE Read Local Supported Features"	},
+	{ 0x2003, "LE Read Local Supported Features",
+				null_cmd, 0, true,
+				le_read_local_features_rsp, 9, true },
 	/* reserved command */
-	{ 0x2005, "LE Set Random Address"		},
+	{ 0x2005, "LE Set Random Address",
+				le_set_random_address_cmd, 6, true,
+				status_rsp, 1, true },
 	{ 0x2006, "LE Set Advertising Parameters"	},
 	{ 0x2007, "LE Read Advertising Channel TX Power"},
 	{ 0x2008, "LE Set Advertising Data"		},
 	{ 0x2009, "LE Set Scan Response Data"		},
 	{ 0x200a, "LE Set Advertise Enable"		},
-	{ 0x200b, "LE Set Scan Parameters"		},
-	{ 0x200c, "LE Set Scan Enable"			},
+	{ 0x200b, "LE Set Scan Parameters",
+				le_set_scan_parameters_cmd, 7, true,
+				status_rsp, 1, true },
+	{ 0x200c, "LE Set Scan Enable",
+				le_set_scan_enable_cmd, 2, true,
+				status_rsp, 1, true },
 	{ 0x200d, "LE Create Connection"		},
 	{ 0x200e, "LE Create Connection Cancel"		},
 	{ 0x200f, "LE Read White List Size"		},