Bluetooth: host: Use direct connection if not host resolving list

Start initiator immediately instead of scanning for device first.
If the host resolving list is used we need to go via scanner to resolve
the address.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
This commit is contained in:
Joakim Andersson 2020-01-06 14:32:07 +01:00 committed by Johan Hedberg
commit 57addad856
3 changed files with 20 additions and 5 deletions

View file

@ -2200,9 +2200,24 @@ struct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer,
start_scan: start_scan:
bt_conn_set_param_le(conn, param); bt_conn_set_param_le(conn, param);
bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN); #if defined(CONFIG_BT_SMP)
if (!bt_dev.le.rl_size || bt_dev.le.rl_entries > bt_dev.le.rl_size) {
bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN);
bt_le_scan_update(true); bt_le_scan_update(true);
return conn;
}
#endif
if (bt_le_direct_conn(conn)) {
bt_conn_set_state(conn, BT_CONN_DISCONNECTED);
bt_conn_unref(conn);
bt_le_scan_update(false);
return NULL;
}
bt_conn_set_state(conn, BT_CONN_CONNECT);
return conn; return conn;
} }

View file

@ -813,8 +813,7 @@ int bt_le_auto_conn_cancel(void)
return bt_hci_cmd_send_sync(BT_HCI_OP_LE_CREATE_CONN_CANCEL, buf, NULL); return bt_hci_cmd_send_sync(BT_HCI_OP_LE_CREATE_CONN_CANCEL, buf, NULL);
} }
#endif /* defined(CONFIG_BT_WHITELIST) */ #endif /* defined(CONFIG_BT_WHITELIST) */
int bt_le_direct_conn(const struct bt_conn *conn)
static int hci_le_create_conn(const struct bt_conn *conn)
{ {
struct net_buf *buf; struct net_buf *buf;
struct bt_hci_cp_le_create_conn *cp; struct bt_hci_cp_le_create_conn *cp;
@ -1634,7 +1633,7 @@ static void check_pending_conn(const bt_addr_le_t *id_addr,
} }
bt_addr_le_copy(&conn->le.resp_addr, addr); bt_addr_le_copy(&conn->le.resp_addr, addr);
if (hci_le_create_conn(conn)) { if (bt_le_direct_conn(conn)) {
goto failed; goto failed;
} }

View file

@ -185,6 +185,7 @@ bool bt_le_conn_params_valid(const struct bt_le_conn_param *param);
int bt_le_scan_update(bool fast_scan); int bt_le_scan_update(bool fast_scan);
int bt_le_direct_conn(const struct bt_conn *conn);
int bt_le_auto_conn(const struct bt_le_conn_param *conn_param); int bt_le_auto_conn(const struct bt_le_conn_param *conn_param);
int bt_le_auto_conn_cancel(void); int bt_le_auto_conn_cancel(void);