From f93b9dee5c6218edadcab2ea3ff449b8392f79bc Mon Sep 17 00:00:00 2001 From: Emil Gydesen Date: Wed, 29 May 2024 10:07:53 +0200 Subject: [PATCH] Bluetooth: CSIP: Make set_member_by_conn a public function The function is useful for application to lookup set members from bt_conn pointers, e.g. when iterating on connected devices. Signed-off-by: Emil Gydesen --- include/zephyr/bluetooth/audio/csip.h | 15 +++++++++++++++ subsys/bluetooth/audio/cap_common.c | 2 +- subsys/bluetooth/audio/csip_internal.h | 6 ++---- subsys/bluetooth/audio/csip_set_coordinator.c | 7 +++++-- tests/bluetooth/audio/cap_commander/uut/csip.c | 2 +- 5 files changed, 24 insertions(+), 8 deletions(-) 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;