Commit 9b74246f authored by Johan Hedberg's avatar Johan Hedberg Committed by Marcel Holtmann

Bluetooth: Reorganize set_connectable HCI command sending

This patch moves all the decisions of which HCI commands to send (or not
to send) to the code between hci_req_init() and hci_req_run() this
allows us to further extend the request with further commands but still
keep the same logic of handling whether to return a direct mgmt response
in the case that no HCI commands were sent.
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent d97c899b
...@@ -1144,30 +1144,29 @@ static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data, ...@@ -1144,30 +1144,29 @@ static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
goto failed; goto failed;
} }
if (!!cp->val == test_bit(HCI_PSCAN, &hdev->flags)) {
err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
goto failed;
}
cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len); cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len);
if (!cmd) { if (!cmd) {
err = -ENOMEM; err = -ENOMEM;
goto failed; goto failed;
} }
if (cp->val) { hci_req_init(&req, hdev);
scan = SCAN_PAGE;
} else {
scan = 0;
if (test_bit(HCI_ISCAN, &hdev->flags) && if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) &&
hdev->discov_timeout > 0) cp->val != test_bit(HCI_PSCAN, &hdev->flags)) {
cancel_delayed_work(&hdev->discov_off);
}
hci_req_init(&req, hdev); if (cp->val) {
scan = SCAN_PAGE;
} else {
scan = 0;
hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); if (test_bit(HCI_ISCAN, &hdev->flags) &&
hdev->discov_timeout > 0)
cancel_delayed_work(&hdev->discov_off);
}
hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
}
/* If we're going from non-connectable to connectable or /* If we're going from non-connectable to connectable or
* vice-versa when fast connectable is enabled ensure that fast * vice-versa when fast connectable is enabled ensure that fast
...@@ -1179,8 +1178,13 @@ static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data, ...@@ -1179,8 +1178,13 @@ static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
write_fast_connectable(&req, false); write_fast_connectable(&req, false);
err = hci_req_run(&req, set_connectable_complete); err = hci_req_run(&req, set_connectable_complete);
if (err < 0) if (err < 0) {
mgmt_pending_remove(cmd); mgmt_pending_remove(cmd);
if (err == -ENODATA)
err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE,
hdev);
goto failed;
}
failed: failed:
hci_dev_unlock(hdev); hci_dev_unlock(hdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment