diff --git a/include/zephyr/bluetooth/audio/ccp.h b/include/zephyr/bluetooth/audio/ccp.h index 3fc2a625b9eb6b..a0c2956ec5b983 100644 --- a/include/zephyr/bluetooth/audio/ccp.h +++ b/include/zephyr/bluetooth/audio/ccp.h @@ -166,6 +166,16 @@ int bt_ccp_client_register_cb(struct bt_ccp_client_cb *cb); * @retval -EALREADY @p cb is not registered */ int bt_ccp_client_unregister_cb(struct bt_ccp_client_cb *cb); + +/** + * @brief Get the bearers of a client instance + * + * @param[in] client The client to get the bearers of. + * @param[out] bearers The bearers struct that will be populated with the bearers of @p inst. + * @retval -EINVAL @p inst or @p bearers is NULL + */ +int bt_ccp_client_get_bearers(struct bt_ccp_client *client, struct bt_ccp_client_bearers *bearers); + /** @} */ /* End of group bt_ccp_client */ #ifdef __cplusplus } diff --git a/subsys/bluetooth/audio/ccp_client.c b/subsys/bluetooth/audio/ccp_client.c index bc063b0b1cd33a..f34a8dc17a8c17 100644 --- a/subsys/bluetooth/audio/ccp_client.c +++ b/subsys/bluetooth/audio/ccp_client.c @@ -228,3 +228,21 @@ int bt_ccp_client_unregister_cb(struct bt_ccp_client_cb *cb) return 0; } + +int bt_ccp_client_get_bearers(struct bt_ccp_client *client, struct bt_ccp_client_bearers *bearers) +{ + CHECKIF(client == NULL) { + LOG_DBG("client is NULL"); + return -EINVAL; + } + + CHECKIF(bearers == NULL) { + LOG_DBG("bearers is NULL"); + return -EINVAL; + } + + memset(bearers, 0, sizeof(*bearers)); + populate_bearers(client, bearers); + + return 0; +} diff --git a/tests/bluetooth/audio/ccp_client/src/main.c b/tests/bluetooth/audio/ccp_client/src/main.c index 5c9cf82c15ae5e..79943da376275e 100644 --- a/tests/bluetooth/audio/ccp_client/src/main.c +++ b/tests/bluetooth/audio/ccp_client/src/main.c @@ -200,3 +200,27 @@ static ZTEST_F(ccp_client_test_suite, test_ccp_client_discover_inval_param_null_ err = bt_ccp_client_discover(&fixture->conn, NULL); zassert_equal(-EINVAL, err, "Unexpected return value %d", err); } + +static ZTEST_F(ccp_client_test_suite, test_ccp_client_get_bearers) +{ + struct bt_ccp_client_bearers bearers; + int err; + + err = bt_ccp_client_register_cb(&mock_ccp_client_cb); + zassert_equal(0, err, "Unexpected return value %d", err); + + err = bt_ccp_client_discover(&fixture->conn, &fixture->client_inst); + zassert_equal(0, err, "Unexpected return value %d", err); + + err = bt_ccp_client_get_bearers(fixture->client_inst, &bearers); + zassert_equal(0, err, "Unexpected return value %d", err); + +#if defined(CONFIG_BT_TBS_CLIENT_GTBS) + zassert_not_null(bearers.gtbs_bearer); +#endif /* CONFIG_BT_TBS_CLIENT_GTBS */ + +#if defined(CONFIG_BT_TBS_CLIENT_TBS) + zassert_equal(CONFIG_BT_TBS_CLIENT_MAX_TBS_INSTANCES, bearers.tbs_count); + zassert_not_null(bearers.tbs_bearers); +#endif /* CONFIG_BT_TBS_CLIENT_TBS */ +}