All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/8] monitor: Update periodic sync commands.
@ 2020-01-08 11:47 Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 2/8] monitor: Decode LE Periodic Advertising Sync Transfer Received Event Szymon Czapracki
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

Change fields in periodic_adv_(create/term)_sync_cmd, according to their
description with 5.1 specification.

< HCI Command: LE Periodic Advertising Create Sync (0x08|0x0044) plen 14
        Options: 0x0001
        Use Periodic Advertiser List
        Reporting initially enabled
        SID: 0x00
        Adv address type: Public (0x00)
        Adv address: 00:00:00:00:00:00 (OUI 00-00-00)
        Skip: 0x0000
        Sync timeout: 0 msec (0x0000)
        Sync CTE type: 0x0000
> HCI Event: Command Status (0x0f) plen 4
      LE Periodic Advertising Create Sync (0x08|0x0044) ncmd 1
        Status: Unknown HCI Command (0x01)
---
 monitor/bt.h     |  6 +--
 monitor/packet.c | 96 ++++++++++++++++++++++++++++++++++++++++--------
 2 files changed, 83 insertions(+), 19 deletions(-)

diff --git a/monitor/bt.h b/monitor/bt.h
index 8edc895e8..ecf3782c9 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2371,13 +2371,13 @@ struct bt_hci_le_ext_create_conn {
 
 #define BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC		0x2044
 struct bt_hci_cmd_le_periodic_adv_create_sync {
-	uint8_t  filter_policy;
+	uint8_t  options;
 	uint8_t  sid;
 	uint8_t  addr_type;
 	uint8_t  addr[6];
 	uint16_t skip;
 	uint16_t sync_timeout;
-	uint8_t  unused;
+	uint8_t  sync_cte_type;
 } __attribute__ ((packed));
 
 #define BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC_CANCEL		0x2045
@@ -3108,7 +3108,7 @@ struct bt_hci_le_per_adv_report {
 	uint16_t handle;
 	uint8_t  tx_power;
 	int8_t   rssi;
-	uint8_t  unused;
+	uint8_t  cte_type;
 	uint8_t  data_status;
 	uint8_t  data_len;
 	uint8_t  data[0];
diff --git a/monitor/packet.c b/monitor/packet.c
index ab8bbdee5..64f75cf8e 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -7321,24 +7321,70 @@ static void le_ext_create_conn_cmd(const void *data, uint8_t size)
 	print_ext_conn_phys(cmd->data, cmd->phys);
 }
 
-static void le_periodic_adv_create_sync_cmd(const void *data, uint8_t size)
+static const struct bitfield_data create_sync_cte_type[] = {
+	{  0, "Do not sync to packets with AoA CTE"	},
+	{  1, "Do not sync to packets with AoD CTE 1us"	},
+	{  2, "Do not sync to packets with AoD CTE 2us"	},
+	{  3, "Do not sync to packets with type 3 AoD"	},
+	{  4, "Do not sync to packets without CTE"	},
+	{ },
+};
+
+static const struct bitfield_data create_sync_options[] = {
+	{  0, "Use Periodic Advertiser List"	},
+	{  1, "Reporting initially disabled"	},
+	{ },
+};
+
+static const struct bitfield_data create_sync_options_alt[] = {
+	{  0, "Use advertising SID, Advertiser Address Type and address"},
+	{  1, "Reporting initially enabled"				},
+	{ },
+};
+
+static void print_create_sync_cte_type(uint8_t flags)
 {
-	const struct bt_hci_cmd_le_periodic_adv_create_sync *cmd = data;
-	const char *str;
+	uint8_t mask = flags;
 
-	switch (cmd->filter_policy) {
-	case 0x00:
-		str = "Use specified advertising parameters";
-		break;
-	case 0x01:
-		str = "Use Periodic Advertiser List";
-		break;
-	default:
-		str = "Reserved";
-		break;
+	print_field("Sync CTE type: 0x%4.4x", flags);
+
+	mask = print_bitfield(2, flags, create_sync_cte_type);
+
+	if (mask) {
+		print_text(COLOR_UNKNOWN_ADV_FLAG,
+				"Unknown sync CTE type properties (0x%4.4x)",
+									mask);
 	}
+}
 
-	print_field("Filter policy: %s (0x%2.2x)", str, cmd->filter_policy);
+static void print_create_sync_options(uint8_t flags)
+{
+	uint8_t mask = flags;
+	int i;
+
+	print_field("Options: 0x%4.4x", flags);
+
+	for (i = 0; create_sync_options[i].str; i++) {
+		if (flags & (1 << create_sync_options[i].bit)) {
+			print_field("%s", create_sync_options[i].str);
+			mask  &= ~(1 << create_sync_options[i].bit);
+		} else {
+			print_field("%s", create_sync_options_alt[i].str);
+			mask  &= ~(1 << create_sync_options_alt[i].bit);
+		}
+	}
+
+	if (mask) {
+		print_text(COLOR_UNKNOWN_ADV_FLAG,
+					"  Unknown options (0x%4.4x)", mask);
+	}
+}
+
+static void le_periodic_adv_create_sync_cmd(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_le_periodic_adv_create_sync *cmd = data;
+
+	print_create_sync_options(cmd->options);
 	print_field("SID: 0x%2.2x", cmd->sid);
 	print_addr_type("Adv address type", cmd->addr_type);
 	print_addr("Adv address", cmd->addr, cmd->addr_type);
@@ -7346,7 +7392,7 @@ static void le_periodic_adv_create_sync_cmd(const void *data, uint8_t size)
 	print_field("Sync timeout: %d msec (0x%4.4x)",
 					le16_to_cpu(cmd->sync_timeout) * 10,
 					le16_to_cpu(cmd->sync_timeout));
-	print_field("Unused: 0x%2.2x", cmd->unused);
+	print_create_sync_cte_type(cmd->sync_cte_type);
 }
 
 static void le_periodic_adv_term_sync_cmd(const void *data, uint8_t size)
@@ -9648,7 +9694,25 @@ static void le_per_adv_report_evt(const void *data, uint8_t size)
 	else
 		print_field("RSSI: reserved (0x%2.2x)",
 						(uint8_t) evt->rssi);
-	print_field("Unused: (0x%2.2x)", evt->unused);
+
+	switch (evt->cte_type) {
+	case 0x00:
+		str = "AoA Constant Tone Extension";
+		break;
+	case 0x01:
+		str = "AoA Constant Tone Extension with 1us slots";
+		break;
+	case 0x02:
+		str = "AoD Constant Tone Extension with 2us slots";
+		break;
+	case 0xff:
+		str = "No Constant Tone Extension";
+		break;
+	default:
+		str = "Reserved";
+		color_on = COLOR_RED;
+		break;
+	}
 
 	switch (evt->data_status) {
 	case 0x00:
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 2/8] monitor: Decode LE Periodic Advertising Sync Transfer Received Event
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
@ 2020-01-08 11:47 ` Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 3/8] monitor: Decode LE Set Periodic Advertising Receive Enable command Szymon Czapracki
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

---
 monitor/bt.h     | 14 ++++++++++++++
 monitor/packet.c | 21 +++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index ecf3782c9..e14c1771f 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -3140,6 +3140,20 @@ struct bt_hci_evt_le_chan_select_alg {
 	uint8_t  algorithm;
 } __attribute__ ((packed));
 
+#define BT_HCI_EVT_LE_PER_ADV_SYNC_TRANS_REC		0x18
+struct bt_hci_evt_le_per_adv_sync_trans_rec {
+	uint8_t  status;
+	uint16_t handle;
+	uint16_t service_data;
+	uint16_t sync_handle;
+	uint8_t  sid;
+	uint8_t  addr_type;
+	uint8_t  addr[6];
+	uint8_t  phy;
+	uint16_t interval;
+	uint8_t  clock_accuracy;
+} __attribute__ ((packed));
+
 #define BT_HCI_ERR_SUCCESS			0x00
 #define BT_HCI_ERR_UNKNOWN_COMMAND		0x01
 #define BT_HCI_ERR_UNKNOWN_CONN_ID		0x02
diff --git a/monitor/packet.c b/monitor/packet.c
index 64f75cf8e..8e5219bef 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -9788,6 +9788,24 @@ static void le_chan_select_alg_evt(const void *data, uint8_t size)
 	print_field("Algorithm: %s (0x%2.2x)", str, evt->algorithm);
 }
 
+static void le_per_adv_sync_trans_rec_evt(const void *data, uint8_t size)
+{
+	const struct bt_hci_evt_le_per_adv_sync_trans_rec *evt = data;
+
+	print_status(evt->status);
+	print_field("Handle: %d", evt->handle);
+	print_field("Connection handle: %d", evt->handle);
+	print_field("Service data: 0x%4.4x", evt->service_data);
+	print_field("Sync handle: %d", evt->sync_handle);
+	print_field("SID: 0x%2.2x", evt->sid);
+	print_peer_addr_type("Address type:", evt->addr_type);
+	print_addr("Addres:", evt->addr, evt->addr_type);
+	print_le_phy("PHY:", evt->phy);
+	print_field("Periodic advertising Interval: %.3f",
+							1.25 * evt->interval);
+	print_clock_accuracy(evt->clock_accuracy);
+}
+
 struct subevent_data {
 	uint8_t subevent;
 	const char *str;
@@ -9871,6 +9889,9 @@ static const struct subevent_data le_meta_event_table[] = {
 				le_scan_req_received_evt, 8, true},
 	{ 0x14, "LE Channel Selection Algorithm",
 				le_chan_select_alg_evt, 3, true},
+	{ 0x18, "LE Periodic Advertising Sync Transfer Received",
+					le_per_adv_sync_trans_rec_evt, 19,
+					true},
 	{ }
 };
 
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 3/8] monitor: Decode LE Set Periodic Advertising Receive Enable command
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 2/8] monitor: Decode LE Periodic Advertising Sync Transfer Received Event Szymon Czapracki
@ 2020-01-08 11:47 ` Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 4/8] monitor: Decode LE Periodic Advertising Sync Transfer command Szymon Czapracki
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

< HCI Command: LE Periodic Advertising Receive Enable (0x08|0x0059) plen 3
        Sync handle: 0
        Reporting: Enabled (0x01)
> HCI Event: Command Status (0x0f) plen 4
      LE Periodic Advertising Receive Enable (0x08|0x0059) ncmd 1
        Status: Unknown HCI Command (0x01)
---
 monitor/bt.h     |  6 ++++++
 monitor/packet.c | 11 +++++++++++
 2 files changed, 17 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index e14c1771f..bb373b528 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2461,6 +2461,12 @@ struct bt_hci_cmd_le_tx_test_v3 {
 	uint8_t  antenna_ids[0];
 } __attribute__ ((packed));
 
+#define BT_HCI_CMD_SET_PERIODIC_ADV_REC_ENABLE	0x2059
+struct bt_hci_cmd_set_periodic_adv_rec_enable {
+	uint16_t sync_handle;
+	uint8_t  enable;
+} __attribute__ ((packed));
+
 #define BT_HCI_EVT_INQUIRY_COMPLETE		0x01
 struct bt_hci_evt_inquiry_complete {
 	uint8_t  status;
diff --git a/monitor/packet.c b/monitor/packet.c
index 8e5219bef..e5681b5ff 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -7584,6 +7584,14 @@ static void le_tx_test_cmd_v3(const void *data, uint8_t size)
 		print_field("  Antenna ID: %u", cmd->antenna_ids[i]);
 }
 
+static void le_periodic_adv_rec_enable(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_le_set_periodic_adv_enable *cmd = data;
+
+	print_field("Sync handle: %d", cmd->handle);
+	print_enable("Reporting", cmd->enable);
+}
+
 struct opcode_data {
 	uint16_t opcode;
 	int bit;
@@ -8377,6 +8385,9 @@ static const struct opcode_data opcode_table[] = {
 	{ 0x2050, 316, "LE Transmitter Test command [v3]",
 				le_tx_test_cmd_v3, 9, false,
 				status_rsp, 1, true },
+	{ 0x2059, 325, "LE Periodic Advertising Receive Enable",
+				le_periodic_adv_rec_enable, 3, true,
+				status_rsp, 1, true },
 	{ }
 };
 
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 4/8] monitor: Decode LE Periodic Advertising Sync Transfer command
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 2/8] monitor: Decode LE Periodic Advertising Sync Transfer Received Event Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 3/8] monitor: Decode LE Set Periodic Advertising Receive Enable command Szymon Czapracki
@ 2020-01-08 11:47 ` Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 5/8] monitor: Decode LE Periodic Advertising Set Info " Szymon Czapracki
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

< HCI Command: LE Periodic Advertising Sync Transfer (0x08|0x005a) plen 6
        Connection handle: 1
        Service data: 0x0001
        Sync handle: 1
> HCI Event: Command Status (0x0f) plen 4
      LE Periodic Advertising Sync Transfer (0x08|0x005a) ncmd 1
        Status: Unknown HCI Command (0x01)
---
 monitor/bt.h     |  7 +++++++
 monitor/packet.c | 20 ++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index bb373b528..efaf80f55 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2467,6 +2467,13 @@ struct bt_hci_cmd_set_periodic_adv_rec_enable {
 	uint8_t  enable;
 } __attribute__ ((packed));
 
+#define BT_HCI_CMD_PERIODIC_SYNC_TRANS	0x205a
+struct bt_hci_cmd_periodic_sync_trans {
+	uint16_t handle;
+	uint16_t service_data;
+	uint16_t sync_handle;
+} __attribute__ ((packed));
+
 #define BT_HCI_EVT_INQUIRY_COMPLETE		0x01
 struct bt_hci_evt_inquiry_complete {
 	uint8_t  status;
diff --git a/monitor/packet.c b/monitor/packet.c
index e5681b5ff..23eb48374 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -4019,6 +4019,14 @@ static void status_rsp(const void *data, uint8_t size)
 	print_status(status);
 }
 
+static void status_handle_rsp(const void *data, uint8_t size)
+{
+	uint8_t status = *((const uint8_t *) data);
+
+	print_status(status);
+	print_field("Connection handle: %d", get_u8(data + 1));
+}
+
 static void status_bdaddr_rsp(const void *data, uint8_t size)
 {
 	uint8_t status = *((const uint8_t *) data);
@@ -7592,6 +7600,15 @@ static void le_periodic_adv_rec_enable(const void *data, uint8_t size)
 	print_enable("Reporting", cmd->enable);
 }
 
+static void le_periodic_adv_sync_trans(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_periodic_sync_trans *cmd = data;
+
+	print_field("Connection handle: %d", cmd->handle);
+	print_field("Service data: 0x%4.4x", cmd->service_data);
+	print_field("Sync handle: %d", cmd->sync_handle);
+}
+
 struct opcode_data {
 	uint16_t opcode;
 	int bit;
@@ -8388,6 +8405,9 @@ static const struct opcode_data opcode_table[] = {
 	{ 0x2059, 325, "LE Periodic Advertising Receive Enable",
 				le_periodic_adv_rec_enable, 3, true,
 				status_rsp, 1, true },
+	{ 0x205a, 326, "LE Periodic Advertising Sync Transfer",
+				le_periodic_adv_sync_trans, 6, true,
+				status_handle_rsp, 3, true },
 	{ }
 };
 
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 5/8] monitor: Decode LE Periodic Advertising Set Info Transfer command
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
                   ` (2 preceding siblings ...)
  2020-01-08 11:47 ` [PATCH v2 4/8] monitor: Decode LE Periodic Advertising Sync Transfer command Szymon Czapracki
@ 2020-01-08 11:47 ` Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 6/8] monitor: Decode LE Set Periodic Adv Sync Transfer Parameterers command Szymon Czapracki
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

< HCI Command: LE Periodic Advertising Set Info Transfer (0x08|0x005b) plen 5
       Connection handle: 1
       Service data: 0x0000
       Advertising handle: 0
> HCI Event: Command Status (0x0f) plen 4
     LE Periodic Advertising Set Info Transfer (0x08|0x005b) ncmd 1
       Status: Unknown HCI Command (0x01)
---
 monitor/bt.h     |  7 +++++++
 monitor/packet.c | 12 ++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index efaf80f55..f8422ccc9 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2474,6 +2474,13 @@ struct bt_hci_cmd_periodic_sync_trans {
 	uint16_t sync_handle;
 } __attribute__ ((packed));
 
+#define BT_HCI_CMD_PERIODIC_ADV_SET_INFO_TRANS	0x205b
+struct bt_hci_cmd_periodic_adv_set_info_trans {
+	uint16_t handle;
+	uint16_t service_data;
+	uint16_t adv_handle;
+} __attribute__ ((packed));
+
 #define BT_HCI_EVT_INQUIRY_COMPLETE		0x01
 struct bt_hci_evt_inquiry_complete {
 	uint8_t  status;
diff --git a/monitor/packet.c b/monitor/packet.c
index 23eb48374..34b3d1895 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -7609,6 +7609,15 @@ static void le_periodic_adv_sync_trans(const void *data, uint8_t size)
 	print_field("Sync handle: %d", cmd->sync_handle);
 }
 
+static void le_periodic_adv_set_info_trans(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_periodic_adv_set_info_trans *cmd = data;
+
+	print_field("Connection handle: %d", cmd->handle);
+	print_field("Service data: 0x%4.4x", cmd->service_data);
+	print_field("Advertising handle: %d", cmd->adv_handle);
+}
+
 struct opcode_data {
 	uint16_t opcode;
 	int bit;
@@ -8408,6 +8417,9 @@ static const struct opcode_data opcode_table[] = {
 	{ 0x205a, 326, "LE Periodic Advertising Sync Transfer",
 				le_periodic_adv_sync_trans, 6, true,
 				status_handle_rsp, 3, true },
+	{ 0x205b, 327, "LE Periodic Advertising Set Info Transfer",
+				le_periodic_adv_set_info_trans, 5, true,
+				status_handle_rsp, 3, true },
 	{ }
 };
 
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 6/8] monitor: Decode LE Set Periodic Adv Sync Transfer Parameterers command
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
                   ` (3 preceding siblings ...)
  2020-01-08 11:47 ` [PATCH v2 5/8] monitor: Decode LE Periodic Advertising Set Info " Szymon Czapracki
@ 2020-01-08 11:47 ` Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 7/8] monitor: Decode LE Set Default Periodic Adv Sync Transfer Params. command Szymon Czapracki
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

< HCI Command: LE Periodic Advertising Sync Transfer Parameters (0x08|0x005c) plen 8
        Connection handle: 1
        Mode: Disabled (0x00)
        Skip: 0x00
        Sync timeout: 0 msec (0x0000)
        Sync CTE type: 0x0000
> HCI Event: Command Status (0x0f) plen 4
      LE Periodic Advertising Sync Transfer Parameters (0x08|0x005c) ncmd 1
        Status: Unknown HCI Command (0x01)
---
 monitor/bt.h     |  9 +++++++++
 monitor/packet.c | 38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index f8422ccc9..2ec2ea0a7 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2481,6 +2481,15 @@ struct bt_hci_cmd_periodic_adv_set_info_trans {
 	uint16_t adv_handle;
 } __attribute__ ((packed));
 
+#define BT_HCI_CMD_PERIODIC_ADV_SYNC_TRANS_PARAMS	0x205c
+struct bt_hci_cmd_periodic_adv_sync_trans_params {
+	uint16_t  handle;
+	uint8_t   mode;
+	uint16_t  skip;
+	uint16_t  sync_timeout;
+	uint8_t   cte_type;
+} __attribute__ ((packed));
+
 #define BT_HCI_EVT_INQUIRY_COMPLETE		0x01
 struct bt_hci_evt_inquiry_complete {
 	uint8_t  status;
diff --git a/monitor/packet.c b/monitor/packet.c
index 34b3d1895..74c73f145 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -7618,6 +7618,41 @@ static void le_periodic_adv_set_info_trans(const void *data, uint8_t size)
 	print_field("Advertising handle: %d", cmd->adv_handle);
 }
 
+static void print_sync_mode(uint8_t mode)
+{
+	const char *str;
+
+	switch (mode) {
+	case 0x00:
+		str = "Disabled";
+		break;
+	case 0x01:
+		str = "Enabled with report events disabled";
+		break;
+	case 0x02:
+		str = "Enabled with report events enabled";
+		break;
+	default:
+		str = "RFU";
+		break;
+	}
+
+	print_field("Mode: %s (0x%2.2x)", str, mode);
+}
+
+static void le_periodic_adv_sync_trans_params(const void *data, uint8_t size)
+{
+	const struct bt_hci_cmd_periodic_adv_sync_trans_params *cmd = data;
+
+	print_field("Connection handle: %d", cmd->handle);
+	print_sync_mode(cmd->mode);
+	print_field("Skip: 0x%2.2x", cmd->skip);
+	print_field("Sync timeout: %d msec (0x%4.4x)",
+					le16_to_cpu(cmd->sync_timeout) * 10,
+					le16_to_cpu(cmd->sync_timeout));
+	print_create_sync_cte_type(cmd->cte_type);
+}
+
 struct opcode_data {
 	uint16_t opcode;
 	int bit;
@@ -8420,6 +8455,9 @@ static const struct opcode_data opcode_table[] = {
 	{ 0x205b, 327, "LE Periodic Advertising Set Info Transfer",
 				le_periodic_adv_set_info_trans, 5, true,
 				status_handle_rsp, 3, true },
+	{ 0x205c, 328, "LE Periodic Advertising Sync Transfer Parameters",
+				le_periodic_adv_sync_trans_params, 8, true,
+				status_handle_rsp, 3, true},
 	{ }
 };
 
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 7/8] monitor: Decode LE Set Default Periodic Adv Sync Transfer Params. command
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
                   ` (4 preceding siblings ...)
  2020-01-08 11:47 ` [PATCH v2 6/8] monitor: Decode LE Set Periodic Adv Sync Transfer Parameterers command Szymon Czapracki
@ 2020-01-08 11:47 ` Szymon Czapracki
  2020-01-08 11:47 ` [PATCH v2 8/8] monitor: Decode LE CTE Request Failed event Szymon Czapracki
  2020-01-09 10:39 ` [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Janc
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

< HCI Command: LE Set Default Periodic Advertisng Sync Transfer Parameters (0x08|0x005d) plen 6
        Mode: Enabled with report events disabled (0x01)
        Skip: 0x00
        Sync timeout: 0 msec (0x0000)
        Sync CTE type: 0x0000
> HCI Event: Command Status (0x0f) plen 4
      LE Set Default Periodic Advertisng Sync Transfer Parameters (0x08|0x005d) ncmd 1
        Status: Unknown HCI Command (0x01)
---
 monitor/bt.h     |  8 ++++++++
 monitor/packet.c | 17 +++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index 2ec2ea0a7..1859dfb21 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2490,6 +2490,14 @@ struct bt_hci_cmd_periodic_adv_sync_trans_params {
 	uint8_t   cte_type;
 } __attribute__ ((packed));
 
+#define BT_HCI_CMD_DEFAULT_PERIODIC_ADV_SYNC_TRANS_PARAMS	0x205d
+struct bt_hci_cmd_default_periodic_adv_sync_trans_params {
+	uint8_t  mode;
+	uint16_t skip;
+	uint16_t sync_timeout;
+	uint8_t  cte_type;
+} __attribute__ ((packed));
+
 #define BT_HCI_EVT_INQUIRY_COMPLETE		0x01
 struct bt_hci_evt_inquiry_complete {
 	uint8_t  status;
diff --git a/monitor/packet.c b/monitor/packet.c
index 74c73f145..9d22dfc15 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -7653,6 +7653,19 @@ static void le_periodic_adv_sync_trans_params(const void *data, uint8_t size)
 	print_create_sync_cte_type(cmd->cte_type);
 }
 
+static void le_set_default_periodic_adv_sync_trans_params(const void *data,
+								uint8_t size)
+{
+	const struct bt_hci_cmd_default_periodic_adv_sync_trans_params *cmd = data;
+
+	print_sync_mode(cmd->mode);
+	print_field("Skip: 0x%2.2x", cmd->skip);
+	print_field("Sync timeout: %d msec (0x%4.4x)",
+					le16_to_cpu(cmd->sync_timeout) * 10,
+					le16_to_cpu(cmd->sync_timeout));
+	print_create_sync_cte_type(cmd->cte_type);
+}
+
 struct opcode_data {
 	uint16_t opcode;
 	int bit;
@@ -8458,6 +8471,10 @@ static const struct opcode_data opcode_table[] = {
 	{ 0x205c, 328, "LE Periodic Advertising Sync Transfer Parameters",
 				le_periodic_adv_sync_trans_params, 8, true,
 				status_handle_rsp, 3, true},
+	{ 0x205d, 329, "LE Set Default Periodic Advertisng Sync Transfer "
+				"Parameters",
+				le_set_default_periodic_adv_sync_trans_params,
+				6, true, status_rsp, 1, true},
 	{ }
 };
 
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 8/8] monitor: Decode LE CTE Request Failed event
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
                   ` (5 preceding siblings ...)
  2020-01-08 11:47 ` [PATCH v2 7/8] monitor: Decode LE Set Default Periodic Adv Sync Transfer Params. command Szymon Czapracki
@ 2020-01-08 11:47 ` Szymon Czapracki
  2020-01-09 10:39 ` [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Janc
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Czapracki @ 2020-01-08 11:47 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Czapracki

---
 monitor/bt.h     |  6 ++++++
 monitor/packet.c | 10 ++++++++++
 2 files changed, 16 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index 1859dfb21..b31e6c5c5 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -3177,6 +3177,12 @@ struct bt_hci_evt_le_chan_select_alg {
 	uint8_t  algorithm;
 } __attribute__ ((packed));
 
+#define BT_HCI_EVT_LE_CTE_REQUEST_FAILED	0x17
+struct bt_hci_evt_le_cte_request_failed {
+	uint8_t  status;
+	uint16_t handle;
+} __attribute__ ((packed));
+
 #define BT_HCI_EVT_LE_PER_ADV_SYNC_TRANS_REC		0x18
 struct bt_hci_evt_le_per_adv_sync_trans_rec {
 	uint8_t  status;
diff --git a/monitor/packet.c b/monitor/packet.c
index 9d22dfc15..415a6abfa 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -9886,6 +9886,14 @@ static void le_chan_select_alg_evt(const void *data, uint8_t size)
 	print_field("Algorithm: %s (0x%2.2x)", str, evt->algorithm);
 }
 
+static void le_cte_request_failed_evt(const void *data, uint8_t size)
+{
+	const struct bt_hci_evt_le_cte_request_failed *evt = data;
+
+	print_status(evt->status);
+	print_field("Connection handle: %d", evt->handle);
+}
+
 static void le_per_adv_sync_trans_rec_evt(const void *data, uint8_t size)
 {
 	const struct bt_hci_evt_le_per_adv_sync_trans_rec *evt = data;
@@ -9987,6 +9995,8 @@ static const struct subevent_data le_meta_event_table[] = {
 				le_scan_req_received_evt, 8, true},
 	{ 0x14, "LE Channel Selection Algorithm",
 				le_chan_select_alg_evt, 3, true},
+	{ 0x17, "LE CTE Request Failed",
+				le_cte_request_failed_evt, 3, true},
 	{ 0x18, "LE Periodic Advertising Sync Transfer Received",
 					le_per_adv_sync_trans_rec_evt, 19,
 					true},
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/8] monitor: Update periodic sync commands.
  2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
                   ` (6 preceding siblings ...)
  2020-01-08 11:47 ` [PATCH v2 8/8] monitor: Decode LE CTE Request Failed event Szymon Czapracki
@ 2020-01-09 10:39 ` Szymon Janc
  7 siblings, 0 replies; 9+ messages in thread
From: Szymon Janc @ 2020-01-09 10:39 UTC (permalink / raw)
  To: Szymon Czapracki; +Cc: linux-bluetooth

Hi Szymon,

On Wednesday, 8 January 2020 12:47:45 CET Szymon Czapracki wrote:
> Change fields in periodic_adv_(create/term)_sync_cmd, according to their
> description with 5.1 specification.
> 
> < HCI Command: LE Periodic Advertising Create Sync (0x08|0x0044) plen 14
>         Options: 0x0001
>         Use Periodic Advertiser List
>         Reporting initially enabled
>         SID: 0x00
>         Adv address type: Public (0x00)
>         Adv address: 00:00:00:00:00:00 (OUI 00-00-00)
>         Skip: 0x0000
>         Sync timeout: 0 msec (0x0000)
>         Sync CTE type: 0x0000
> 
> > HCI Event: Command Status (0x0f) plen 4
> 
>       LE Periodic Advertising Create Sync (0x08|0x0044) ncmd 1
>         Status: Unknown HCI Command (0x01)
> ---
>  monitor/bt.h     |  6 +--
>  monitor/packet.c | 96 ++++++++++++++++++++++++++++++++++++++++--------
>  2 files changed, 83 insertions(+), 19 deletions(-)
> 
> diff --git a/monitor/bt.h b/monitor/bt.h
> index 8edc895e8..ecf3782c9 100644
> --- a/monitor/bt.h
> +++ b/monitor/bt.h
> @@ -2371,13 +2371,13 @@ struct bt_hci_le_ext_create_conn {
> 
>  #define BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC		0x2044
>  struct bt_hci_cmd_le_periodic_adv_create_sync {
> -	uint8_t  filter_policy;
> +	uint8_t  options;
>  	uint8_t  sid;
>  	uint8_t  addr_type;
>  	uint8_t  addr[6];
>  	uint16_t skip;
>  	uint16_t sync_timeout;
> -	uint8_t  unused;
> +	uint8_t  sync_cte_type;
>  } __attribute__ ((packed));
> 
>  #define BT_HCI_CMD_LE_PERIODIC_ADV_CREATE_SYNC_CANCEL		0x2045
> @@ -3108,7 +3108,7 @@ struct bt_hci_le_per_adv_report {
>  	uint16_t handle;
>  	uint8_t  tx_power;
>  	int8_t   rssi;
> -	uint8_t  unused;
> +	uint8_t  cte_type;
>  	uint8_t  data_status;
>  	uint8_t  data_len;
>  	uint8_t  data[0];
> diff --git a/monitor/packet.c b/monitor/packet.c
> index ab8bbdee5..64f75cf8e 100644
> --- a/monitor/packet.c
> +++ b/monitor/packet.c
> @@ -7321,24 +7321,70 @@ static void le_ext_create_conn_cmd(const void *data,
> uint8_t size) print_ext_conn_phys(cmd->data, cmd->phys);
>  }
> 
> -static void le_periodic_adv_create_sync_cmd(const void *data, uint8_t size)
> +static const struct bitfield_data create_sync_cte_type[] = {
> +	{  0, "Do not sync to packets with AoA CTE"	},
> +	{  1, "Do not sync to packets with AoD CTE 1us"	},
> +	{  2, "Do not sync to packets with AoD CTE 2us"	},
> +	{  3, "Do not sync to packets with type 3 AoD"	},
> +	{  4, "Do not sync to packets without CTE"	},
> +	{ },
> +};
> +
> +static const struct bitfield_data create_sync_options[] = {
> +	{  0, "Use Periodic Advertiser List"	},
> +	{  1, "Reporting initially disabled"	},
> +	{ },
> +};
> +
> +static const struct bitfield_data create_sync_options_alt[] = {
> +	{  0, "Use advertising SID, Advertiser Address Type and address"},
> +	{  1, "Reporting initially enabled"				
},
> +	{ },
> +};
> +
> +static void print_create_sync_cte_type(uint8_t flags)
>  {
> -	const struct bt_hci_cmd_le_periodic_adv_create_sync *cmd = data;
> -	const char *str;
> +	uint8_t mask = flags;
> 
> -	switch (cmd->filter_policy) {
> -	case 0x00:
> -		str = "Use specified advertising parameters";
> -		break;
> -	case 0x01:
> -		str = "Use Periodic Advertiser List";
> -		break;
> -	default:
> -		str = "Reserved";
> -		break;
> +	print_field("Sync CTE type: 0x%4.4x", flags);
> +
> +	mask = print_bitfield(2, flags, create_sync_cte_type);
> +
> +	if (mask) {
> +		print_text(COLOR_UNKNOWN_ADV_FLAG,
> +				"Unknown sync CTE type properties 
(0x%4.4x)",
> +								
	mask);
>  	}
> +}
> 
> -	print_field("Filter policy: %s (0x%2.2x)", str, cmd->filter_policy);
> +static void print_create_sync_options(uint8_t flags)
> +{
> +	uint8_t mask = flags;
> +	int i;
> +
> +	print_field("Options: 0x%4.4x", flags);
> +
> +	for (i = 0; create_sync_options[i].str; i++) {
> +		if (flags & (1 << create_sync_options[i].bit)) {
> +			print_field("%s", create_sync_options[i].str);
> +			mask  &= ~(1 << create_sync_options[i].bit);
> +		} else {
> +			print_field("%s", 
create_sync_options_alt[i].str);
> +			mask  &= ~(1 << create_sync_options_alt[i].bit);
> +		}
> +	}
> +
> +	if (mask) {
> +		print_text(COLOR_UNKNOWN_ADV_FLAG,
> +					"  Unknown options 
(0x%4.4x)", mask);
> +	}
> +}
> +
> +static void le_periodic_adv_create_sync_cmd(const void *data, uint8_t size)
> +{
> +	const struct bt_hci_cmd_le_periodic_adv_create_sync *cmd = data;
> +
> +	print_create_sync_options(cmd->options);
>  	print_field("SID: 0x%2.2x", cmd->sid);
>  	print_addr_type("Adv address type", cmd->addr_type);
>  	print_addr("Adv address", cmd->addr, cmd->addr_type);
> @@ -7346,7 +7392,7 @@ static void le_periodic_adv_create_sync_cmd(const void
> *data, uint8_t size) print_field("Sync timeout: %d msec (0x%4.4x)",
>  					le16_to_cpu(cmd-
>sync_timeout) * 10,
>  					le16_to_cpu(cmd-
>sync_timeout));
> -	print_field("Unused: 0x%2.2x", cmd->unused);
> +	print_create_sync_cte_type(cmd->sync_cte_type);
>  }
> 
>  static void le_periodic_adv_term_sync_cmd(const void *data, uint8_t size)
> @@ -9648,7 +9694,25 @@ static void le_per_adv_report_evt(const void *data,
> uint8_t size) else
>  		print_field("RSSI: reserved (0x%2.2x)",
>  						(uint8_t) evt-
>rssi);
> -	print_field("Unused: (0x%2.2x)", evt->unused);
> +
> +	switch (evt->cte_type) {
> +	case 0x00:
> +		str = "AoA Constant Tone Extension";
> +		break;
> +	case 0x01:
> +		str = "AoA Constant Tone Extension with 1us slots";
> +		break;
> +	case 0x02:
> +		str = "AoD Constant Tone Extension with 2us slots";
> +		break;
> +	case 0xff:
> +		str = "No Constant Tone Extension";
> +		break;
> +	default:
> +		str = "Reserved";
> +		color_on = COLOR_RED;
> +		break;
> +	}
> 
>  	switch (evt->data_status) {
>  	case 0x00:

All patches in this set are now applied, thanks.
Note that I fixed small typo before pushing (addres -> address)

-- 
pozdrawiam
Szymon Janc



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-01-09 10:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-08 11:47 [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Czapracki
2020-01-08 11:47 ` [PATCH v2 2/8] monitor: Decode LE Periodic Advertising Sync Transfer Received Event Szymon Czapracki
2020-01-08 11:47 ` [PATCH v2 3/8] monitor: Decode LE Set Periodic Advertising Receive Enable command Szymon Czapracki
2020-01-08 11:47 ` [PATCH v2 4/8] monitor: Decode LE Periodic Advertising Sync Transfer command Szymon Czapracki
2020-01-08 11:47 ` [PATCH v2 5/8] monitor: Decode LE Periodic Advertising Set Info " Szymon Czapracki
2020-01-08 11:47 ` [PATCH v2 6/8] monitor: Decode LE Set Periodic Adv Sync Transfer Parameterers command Szymon Czapracki
2020-01-08 11:47 ` [PATCH v2 7/8] monitor: Decode LE Set Default Periodic Adv Sync Transfer Params. command Szymon Czapracki
2020-01-08 11:47 ` [PATCH v2 8/8] monitor: Decode LE CTE Request Failed event Szymon Czapracki
2020-01-09 10:39 ` [PATCH v2 1/8] monitor: Update periodic sync commands Szymon Janc

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.