Bluetooth: host: Add API to set initiator scan parameters

Add API to set the scan parameters used in the LE Create Connection
HCI command used by bt_conn_create_le and bt_conn_create_aute_le.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
This commit is contained in:
Joakim Andersson 2020-02-03 12:37:29 +01:00 committed by Johan Hedberg
commit f24cc91a6b
3 changed files with 21 additions and 10 deletions

View file

@ -2164,8 +2164,14 @@ int bt_conn_le_create_auto(const struct bt_conn_le_create_param *create_param,
return -ENOMEM; return -ENOMEM;
} }
atomic_set_bit(conn->flags, BT_CONN_AUTO_CONNECT);
bt_conn_set_param_le(conn, param); bt_conn_set_param_le(conn, param);
if (create_param) {
bt_dev.create_param = *create_param;
} else {
bt_dev.create_param = *BT_CONN_LE_CREATE_CONN;
}
atomic_set_bit(conn->flags, BT_CONN_AUTO_CONNECT);
bt_conn_set_state(conn, BT_CONN_CONNECT_AUTO); bt_conn_set_state(conn, BT_CONN_CONNECT_AUTO);
err = bt_le_create_conn(conn); err = bt_le_create_conn(conn);
@ -2276,6 +2282,11 @@ int bt_conn_le_create(const bt_addr_le_t *peer,
} }
bt_conn_set_param_le(conn, conn_param); bt_conn_set_param_le(conn, conn_param);
if (create_param) {
bt_dev.create_param = *create_param;
} else {
bt_dev.create_param = *BT_CONN_LE_CREATE_CONN;
}
#if defined(CONFIG_BT_SMP) #if defined(CONFIG_BT_SMP)
if (!bt_dev.le.rl_size || bt_dev.le.rl_entries > bt_dev.le.rl_size) { if (!bt_dev.le.rl_size || bt_dev.le.rl_entries > bt_dev.le.rl_size) {

View file

@ -803,7 +803,7 @@ static int set_le_scan_enable_legacy(u8_t enable)
static int set_le_scan_enable(u8_t enable) static int set_le_scan_enable(u8_t enable)
{ {
if (IS_ENABLED(CONFIG_BT_EXT_ADV) && if (IS_ENABLED(CONFIG_BT_EXT_ADV) &&
BT_FEAT_LE_EXT_SCAN(bt_dev.le.features)) { BT_FEAT_LE_EXT_ADV(bt_dev.le.features)) {
return set_le_ext_scan_enable(enable, 0); return set_le_ext_scan_enable(enable, 0);
} }
@ -1010,8 +1010,6 @@ int bt_le_create_conn(const struct bt_conn *conn)
/* User Initiated procedure use fast scan parameters. */ /* User Initiated procedure use fast scan parameters. */
bt_addr_le_copy(&cp->peer_addr, BT_ADDR_LE_ANY); bt_addr_le_copy(&cp->peer_addr, BT_ADDR_LE_ANY);
cp->filter_policy = BT_HCI_LE_CREATE_CONN_FP_WHITELIST; cp->filter_policy = BT_HCI_LE_CREATE_CONN_FP_WHITELIST;
cp->scan_interval = sys_cpu_to_le16(BT_GAP_SCAN_FAST_INTERVAL);
cp->scan_window = sys_cpu_to_le16(BT_GAP_SCAN_FAST_WINDOW);
} else { } else {
const bt_addr_le_t *peer_addr = &conn->le.dst; const bt_addr_le_t *peer_addr = &conn->le.dst;
@ -1024,11 +1022,11 @@ int bt_le_create_conn(const struct bt_conn *conn)
#endif #endif
bt_addr_le_copy(&cp->peer_addr, peer_addr); bt_addr_le_copy(&cp->peer_addr, peer_addr);
cp->filter_policy = BT_HCI_LE_CREATE_CONN_FP_DIRECT; cp->filter_policy = BT_HCI_LE_CREATE_CONN_FP_DIRECT;
/* Interval == window for continuous scanning */
cp->scan_interval = sys_cpu_to_le16(BT_GAP_SCAN_FAST_INTERVAL);
cp->scan_window = cp->scan_interval;
} }
cp->scan_interval = sys_cpu_to_le16(bt_dev.create_param.interval);
cp->scan_window = sys_cpu_to_le16(bt_dev.create_param.window);
cp->conn_interval_min = sys_cpu_to_le16(conn->le.interval_min); cp->conn_interval_min = sys_cpu_to_le16(conn->le.interval_min);
cp->conn_interval_max = sys_cpu_to_le16(conn->le.interval_max); cp->conn_interval_max = sys_cpu_to_le16(conn->le.interval_max);
cp->conn_latency = sys_cpu_to_le16(conn->le.latency); cp->conn_latency = sys_cpu_to_le16(conn->le.latency);
@ -3887,7 +3885,7 @@ static int start_passive_scan(bool fast_scan)
} }
if (IS_ENABLED(CONFIG_BT_EXT_ADV) && if (IS_ENABLED(CONFIG_BT_EXT_ADV) &&
BT_FEAT_LE_EXT_SCAN(bt_dev.le.features)) { BT_FEAT_LE_EXT_ADV(bt_dev.le.features)) {
struct bt_hci_ext_scan_phy scan; struct bt_hci_ext_scan_phy scan;
scan.type = BT_HCI_LE_SCAN_PASSIVE; scan.type = BT_HCI_LE_SCAN_PASSIVE;
@ -4692,7 +4690,7 @@ static int le_set_event_mask(void)
mask |= BT_EVT_MASK_LE_ADVERTISING_REPORT; mask |= BT_EVT_MASK_LE_ADVERTISING_REPORT;
if (IS_ENABLED(CONFIG_BT_EXT_ADV) && if (IS_ENABLED(CONFIG_BT_EXT_ADV) &&
BT_FEAT_LE_EXT_SCAN(bt_dev.le.features)) { BT_FEAT_LE_EXT_ADV(bt_dev.le.features)) {
mask |= BT_EVT_MASK_LE_EXT_ADVERTISING_REPORT; mask |= BT_EVT_MASK_LE_EXT_ADVERTISING_REPORT;
mask |= BT_EVT_MASK_LE_SCAN_TIMEOUT; mask |= BT_EVT_MASK_LE_SCAN_TIMEOUT;
} }
@ -6664,7 +6662,7 @@ int bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb)
#endif /* defined(CONFIG_BT_WHITELIST) */ #endif /* defined(CONFIG_BT_WHITELIST) */
if (IS_ENABLED(CONFIG_BT_EXT_ADV) && if (IS_ENABLED(CONFIG_BT_EXT_ADV) &&
BT_FEAT_LE_EXT_SCAN(bt_dev.le.features)) { BT_FEAT_LE_EXT_ADV(bt_dev.le.features)) {
struct bt_hci_ext_scan_phy param_1m; struct bt_hci_ext_scan_phy param_1m;
struct bt_hci_ext_scan_phy param_coded; struct bt_hci_ext_scan_phy param_coded;

View file

@ -112,6 +112,8 @@ struct bt_dev {
/* ID Address used for advertising */ /* ID Address used for advertising */
u8_t adv_id; u8_t adv_id;
struct bt_conn_le_create_param create_param;
/* Current local Random Address */ /* Current local Random Address */
bt_addr_le_t random_addr; bt_addr_le_t random_addr;