Skip to content

Commit

Permalink
Bluetooth: Remove adv set for directed advertising
Browse files Browse the repository at this point in the history
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@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Sathish Narsimman authored and Marcel Holtmann committed Feb 28, 2020
1 parent 0c2ac7d commit a9e4569
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/net/bluetooth/hci.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 10 additions & 0 deletions net/bluetooth/hci_conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand Down

0 comments on commit a9e4569

Please sign in to comment.