diff --git a/include/zephyr/bluetooth/audio/csip.h b/include/zephyr/bluetooth/audio/csip.h index d89f9450cf9..6f3a0280242 100644 --- a/include/zephyr/bluetooth/audio/csip.h +++ b/include/zephyr/bluetooth/audio/csip.h @@ -314,6 +314,21 @@ typedef void (*bt_csip_set_coordinator_discover_cb)( */ int bt_csip_set_coordinator_discover(struct bt_conn *conn); +/** + * @brief Get the set member from a connection pointer + * + * Get the Coordinated Set Identification Profile Set Coordinator pointer from a connection pointer. + * Only Set Coordinators that have been initiated via bt_csip_set_coordinator_discover() can be + * retrieved. + * + * @param conn Connection pointer. + * + * @retval Pointer to a Coordinated Set Identification Profile Set Coordinator instance + * @retval NULL if @p conn is NULL or if the connection has not done discovery yet + */ +struct bt_csip_set_coordinator_set_member * +bt_csip_set_coordinator_set_member_by_conn(const struct bt_conn *conn); + /** * @typedef bt_csip_set_coordinator_lock_set_cb * @brief Callback for locking a set across one or more devices diff --git a/subsys/bluetooth/audio/cap_common.c b/subsys/bluetooth/audio/cap_common.c index 48fc8a4c39e..c8a8715938e 100644 --- a/subsys/bluetooth/audio/cap_common.c +++ b/subsys/bluetooth/audio/cap_common.c @@ -345,7 +345,7 @@ static uint8_t bt_cap_common_discover_included_cb(struct bt_conn *conn, } } else { const struct bt_csip_set_coordinator_set_member *member = - bt_csip_set_coordinator_csis_member_by_conn(conn); + bt_csip_set_coordinator_set_member_by_conn(conn); LOG_DBG("Found CAS with CSIS"); diff --git a/subsys/bluetooth/audio/csip_internal.h b/subsys/bluetooth/audio/csip_internal.h index c501ea321e7..6335e664c40 100644 --- a/subsys/bluetooth/audio/csip_internal.h +++ b/subsys/bluetooth/audio/csip_internal.h @@ -46,7 +46,5 @@ struct bt_csip_set_coordinator_svc_inst { struct bt_csip_set_coordinator_set_info *set_info; }; -struct bt_csip_set_coordinator_csis_inst *bt_csip_set_coordinator_csis_inst_by_handle( - struct bt_conn *conn, uint16_t start_handle); -struct bt_csip_set_coordinator_set_member * -bt_csip_set_coordinator_csis_member_by_conn(struct bt_conn *conn); +struct bt_csip_set_coordinator_csis_inst * +bt_csip_set_coordinator_csis_inst_by_handle(struct bt_conn *conn, uint16_t start_handle); diff --git a/subsys/bluetooth/audio/csip_set_coordinator.c b/subsys/bluetooth/audio/csip_set_coordinator.c index 339157981c3..b9d6f251a8b 100644 --- a/subsys/bluetooth/audio/csip_set_coordinator.c +++ b/subsys/bluetooth/audio/csip_set_coordinator.c @@ -1412,7 +1412,7 @@ struct bt_csip_set_coordinator_csis_inst *bt_csip_set_coordinator_csis_inst_by_h } struct bt_csip_set_coordinator_set_member * -bt_csip_set_coordinator_csis_member_by_conn(struct bt_conn *conn) +bt_csip_set_coordinator_set_member_by_conn(const struct bt_conn *conn) { struct bt_csip_set_coordinator_inst *client; @@ -1423,8 +1423,11 @@ bt_csip_set_coordinator_csis_member_by_conn(struct bt_conn *conn) } client = &client_insts[bt_conn_index(conn)]; + if (client->conn == conn) { + return &client->set_member; + } - return &client->set_member; + return NULL; } /*************************** PUBLIC FUNCTIONS ***************************/ diff --git a/tests/bluetooth/audio/cap_commander/uut/csip.c b/tests/bluetooth/audio/cap_commander/uut/csip.c index 4fcf5b29504..ef7f9102c07 100644 --- a/tests/bluetooth/audio/cap_commander/uut/csip.c +++ b/tests/bluetooth/audio/cap_commander/uut/csip.c @@ -53,7 +53,7 @@ int bt_csip_set_coordinator_discover(struct bt_conn *conn) } struct bt_csip_set_coordinator_set_member * -bt_csip_set_coordinator_csis_member_by_conn(struct bt_conn *conn) +bt_csip_set_coordinator_set_member_by_conn(const struct bt_conn *conn) { if (conn == NULL) { return NULL;