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:
parent
38b1d58b62
commit
f24cc91a6b
3 changed files with 21 additions and 10 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue