Re: [PATCH] Bluetooth: Fix - Remove adv set for directed advertising

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

 



Hi Sathish,

> Extended advertising Data is set during bluetooth initialization
> by default which causes InvalidHCICommandParameters when setting
> Extended advertising parameters.
> 
> As per Core Spec 5.2 Vol 2, PART E, Sec 7.8.53, for
> advertising_event_property LE_LEGACY_ADV_DIRECT_IND does not
> supports advertising data when the advertising set already
> contains some, the controller shall return erroc code
> 'InvalidHCICommandParameters(0x12).
> 
> So it is required to remove adv set for handle 0x00. since we use
> instance 0 for directed adv.
> 
> Signed-off-by: Sathish Narsimman <sathish.narasimman@xxxxxxxxx>
> ---
> include/net/bluetooth/hci.h |  2 ++
> net/bluetooth/hci_conn.c    | 10 ++++++++++
> net/bluetooth/hci_request.c |  5 +++++
> net/bluetooth/hci_request.h |  1 +
> 4 files changed, 18 insertions(+)
> 
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index 6293bdd7d862..0d7e36c54733 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -1724,6 +1724,8 @@ struct hci_cp_le_set_ext_scan_rsp_data {
> 
> #define LE_SET_ADV_DATA_NO_FRAG		0x01
> 
> +#define HCI_OP_LE_REMOVE_ADV_SET	0x203c
> +
> #define HCI_OP_LE_CLEAR_ADV_SETS	0x203d
> 
> #define HCI_OP_LE_SET_ADV_SET_RAND_ADDR	0x2035
> diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
> index 65fa44cbe514..1887da39a93d 100644
> --- a/net/bluetooth/hci_conn.c
> +++ b/net/bluetooth/hci_conn.c
> @@ -898,6 +898,16 @@ static void hci_req_directed_advertising(struct hci_request *req,
> 		cp.peer_addr_type = conn->dst_type;
> 		bacpy(&cp.peer_addr, &conn->dst);
> 
> +		/* As per Core Spec 5.2 Vol 2, PART E, Sec 7.8.53, for
> +		 * advertising_event_property LE_LEGACY_ADV_DIRECT_IND
> +		 * does not supports advertising data when the advertising set already
> +		 * contains some, the controller shall return erroc code 'Invalid
> +		 * HCI Command Parameters(0x12).
> +		 * So it is required to remove adv set for handle 0x00. since we use
> +		 * instance 0 for directed adv.
> +		 */
> +		hci_req_add(req, HCI_OP_LE_REMOVE_ADV_SET, sizeof(cp.handle), &cp.handle);
> +
> 		hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(cp), &cp);
> 
> 		if (own_addr_type == ADDR_LE_DEV_RANDOM &&
> diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
> index 2a1b64dbf76e..63da7acbb48c 100644
> --- a/net/bluetooth/hci_request.c
> +++ b/net/bluetooth/hci_request.c
> @@ -1550,6 +1550,11 @@ int hci_get_random_address(struct hci_dev *hdev, bool require_privacy,
> 	return 0;
> }
> 
> +void __hci_req_remove_adv_set(struct hci_request *req, u8 handle)
> +{
> +	hci_req_add(req, HCI_OP_LE_REMOVE_ADV_SET, sizeof(handle), &handle);
> +}
> +
> void __hci_req_clear_ext_adv_sets(struct hci_request *req)
> {
> 	hci_req_add(req, HCI_OP_LE_CLEAR_ADV_SETS, 0, NULL);
> diff --git a/net/bluetooth/hci_request.h b/net/bluetooth/hci_request.h
> index a7019fbeadd3..8dd40c6c33c8 100644
> --- a/net/bluetooth/hci_request.h
> +++ b/net/bluetooth/hci_request.h
> @@ -84,6 +84,7 @@ void hci_req_clear_adv_instance(struct hci_dev *hdev, struct sock *sk,
> int __hci_req_setup_ext_adv_instance(struct hci_request *req, u8 instance);
> int __hci_req_start_ext_adv(struct hci_request *req, u8 instance);
> int __hci_req_enable_ext_advertising(struct hci_request *req, u8 instance);
> +void __hci_req_remove_adv_set(struct hci_request *req, u8 handle);

I don’t get this part of the patch. It is actually not used.

Regards

Marcel




[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