diff --git a/drivers/nble/conn.c b/drivers/nble/conn.c index acbf7f945a8..23c184bb26d 100644 --- a/drivers/nble/conn.c +++ b/drivers/nble/conn.c @@ -86,6 +86,18 @@ struct bt_conn *bt_conn_lookup_handle(uint16_t handle) struct bt_conn *bt_conn_lookup_addr_le(const bt_addr_le_t *peer) { + int i; + + for (i = 0; i < ARRAY_SIZE(conns); i++) { + if (!atomic_get(&conns[i].ref)) { + continue; + } + + if (!bt_addr_le_cmp(peer, &conns[i].dst)) { + return bt_conn_ref(&conns[i]); + } + } + return NULL; } @@ -177,6 +189,7 @@ void on_ble_gap_connect_evt(const struct ble_gap_connect_evt *ev) } conn->handle = ev->conn_handle; + bt_addr_le_copy(&conn->dst, &ev->peer_bda); } void on_ble_gap_disconnect_evt(const struct ble_gap_disconnect_evt *ev) diff --git a/drivers/nble/conn_internal.h b/drivers/nble/conn_internal.h index f2bfd0532f3..1dce04c76ce 100644 --- a/drivers/nble/conn_internal.h +++ b/drivers/nble/conn_internal.h @@ -17,4 +17,5 @@ struct bt_conn { uint16_t handle; atomic_t ref; + bt_addr_le_t dst; };