Re: [PATCH v2 1/8] monitor: Update periodic sync commands.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux