diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2014-03-25 09:30:49 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2014-03-26 17:31:38 +0100 |
commit | 3c857757ef6e5a4e472bd3e5c934709c2eb482af (patch) | |
tree | 62b46afba2b9348bbc6e0495d9a3ccb5d186bfce /net/bluetooth/hci_event.c | |
parent | Bluetooth: Add scan_rsp parameter to mgmt_device_found() (diff) | |
download | linux-3c857757ef6e5a4e472bd3e5c934709c2eb482af.tar.xz linux-3c857757ef6e5a4e472bd3e5c934709c2eb482af.zip |
Bluetooth: Add directed advertising support through connect()
When we're in peripheral mode (HCI_ADVERTISING flag is set) the most
natural mapping of connect() is to perform directed advertising to the
peer device.
This patch does the necessary changes to enable directed advertising and
keeps the hci_conn state as BT_CONNECT in a similar way as is done for
central or BR/EDR connection initiation.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r-- | net/bluetooth/hci_event.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 4a2c919d5908..81e5236a0119 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -991,10 +991,25 @@ static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb) if (!sent) return; + if (status) + return; + hci_dev_lock(hdev); - if (!status) - mgmt_advertising(hdev, *sent); + /* If we're doing connection initation as peripheral. Set a + * timeout in case something goes wrong. + */ + if (*sent) { + struct hci_conn *conn; + + conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT); + if (conn) + queue_delayed_work(hdev->workqueue, + &conn->le_conn_timeout, + HCI_LE_CONN_TIMEOUT); + } + + mgmt_advertising(hdev, *sent); hci_dev_unlock(hdev); } |