From 2bf89990eee8bba4efd2e3b5013765b8bac3faf9 Mon Sep 17 00:00:00 2001 From: Emil Gydesen Date: Tue, 23 Nov 2021 10:18:48 +0100 Subject: [PATCH] Bluetooth: CSIS: Expose bt_csis to client via bt_csis_client_set_member Use the bt_csis_client_set_member struct to store the individual bt_csis client struct. This way they are exposed to the client application. Signed-off-by: Emil Gydesen --- include/bluetooth/audio/csis.h | 8 ++++---- subsys/bluetooth/audio/csis_client.c | 12 ++++++++---- subsys/bluetooth/shell/csis_client.c | 5 +++-- .../bsim_bt/bsim_test_audio/src/csis_client_test.c | 3 ++- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/include/bluetooth/audio/csis.h b/include/bluetooth/audio/csis.h index 5c3ef86ce35..7a6e5f3da3c 100644 --- a/include/bluetooth/audio/csis.h +++ b/include/bluetooth/audio/csis.h @@ -202,6 +202,7 @@ struct bt_csis_client_set { struct bt_csis_set_sirk set_sirk; uint8_t set_size; uint8_t rank; + struct bt_csis *csis; }; struct bt_csis_client_set_member { @@ -210,8 +211,8 @@ struct bt_csis_client_set_member { struct bt_csis_client_set sets[BT_CSIS_CLIENT_MAX_CSIS_INSTANCES]; }; -typedef void (*bt_csis_client_discover_cb)(struct bt_conn *conn, int err, - uint8_t set_count); +typedef void (*bt_csis_client_discover_cb)(struct bt_csis_client_set_member *member, + int err, uint8_t set_count); /** * @brief Initialise the csis_client instance for a connection. This will do a @@ -221,8 +222,7 @@ typedef void (*bt_csis_client_discover_cb)(struct bt_conn *conn, int err, * * @return int Return 0 on success, or an errno value on error. */ -int bt_csis_client_discover(struct bt_csis_client_set_member *member, - struct bt_csis *csis[BT_CSIS_CLIENT_MAX_CSIS_INSTANCES]); +int bt_csis_client_discover(struct bt_csis_client_set_member *member); typedef void (*bt_csis_client_discover_sets_cb)(struct bt_conn *conn, int err, uint8_t set_count, diff --git a/subsys/bluetooth/audio/csis_client.c b/subsys/bluetooth/audio/csis_client.c index 85f27fbb920..8ccf9a98ec7 100644 --- a/subsys/bluetooth/audio/csis_client.c +++ b/subsys/bluetooth/audio/csis_client.c @@ -476,7 +476,7 @@ static uint8_t discover_func(struct bt_conn *conn, busy = false; if (csis_client_cbs != NULL && csis_client_cbs->discover != NULL) { - csis_client_cbs->discover(conn, err, + csis_client_cbs->discover(client->set_member, err, client->inst_count); } } @@ -485,7 +485,7 @@ static uint8_t discover_func(struct bt_conn *conn, cur_inst = NULL; busy = false; if (csis_client_cbs != NULL && csis_client_cbs->discover != NULL) { - csis_client_cbs->discover(conn, 0, + csis_client_cbs->discover(client->set_member, 0, client->inst_count); } } @@ -572,7 +572,8 @@ static uint8_t primary_discover_func(struct bt_conn *conn, cur_inst = NULL; if (csis_client_cbs != NULL && csis_client_cbs->discover != 0) { - csis_client_cbs->discover(conn, err, + csis_client_cbs->discover(client->set_member, + err, client->inst_count); } } @@ -581,7 +582,7 @@ static uint8_t primary_discover_func(struct bt_conn *conn, cur_inst = NULL; if (csis_client_cbs != NULL && csis_client_cbs->discover != NULL) { - csis_client_cbs->discover(conn, 0, 0); + csis_client_cbs->discover(client->set_member, 0, 0); } } @@ -1167,6 +1168,9 @@ int bt_csis_client_discover(struct bt_csis_client_set_member *member) err = bt_gatt_discover(member->conn, &discover_params); if (err == 0) { + for (size_t i = 0; i < ARRAY_SIZE(member->sets); i++) { + member->sets[i].csis = &client->csis_insts[i]; + } busy = true; } diff --git a/subsys/bluetooth/shell/csis_client.c b/subsys/bluetooth/shell/csis_client.c index 4331d98adee..3e7a19d5137 100644 --- a/subsys/bluetooth/shell/csis_client.c +++ b/subsys/bluetooth/shell/csis_client.c @@ -79,7 +79,8 @@ static struct bt_conn_cb conn_callbacks = { .connected = connected_cb, }; -static void csis_discover_cb(struct bt_conn *conn, int err, uint8_t set_count) +static void csis_discover_cb(struct bt_csis_client_set_member *member, int err, + uint8_t set_count) { if (err != 0) { shell_error(ctx_shell, "discover failed (%d)", err); @@ -92,7 +93,7 @@ static void csis_discover_cb(struct bt_conn *conn, int err, uint8_t set_count) } for (size_t i = 0; i < ARRAY_SIZE(set_members); i++) { - if (set_members[i].conn == conn) { + if (&set_members[i] == member) { shell_print(ctx_shell, "Found %u sets on member[%u]", set_count, i); } diff --git a/tests/bluetooth/bsim_bt/bsim_test_audio/src/csis_client_test.c b/tests/bluetooth/bsim_bt/bsim_test_audio/src/csis_client_test.c index b3602f2963a..cf288b6ce64 100644 --- a/tests/bluetooth/bsim_bt/bsim_test_audio/src/csis_client_test.c +++ b/tests/bluetooth/bsim_bt/bsim_test_audio/src/csis_client_test.c @@ -87,7 +87,8 @@ static void csis_client_discover_sets_cb(struct bt_conn *conn, int err, sets_discovered = true; } -static void csis_discover_cb(struct bt_conn *conn, int err, uint8_t set_count) +static void csis_discover_cb(struct bt_csis_client_set_member *member, int err, + uint8_t set_count) { printk("%s\n", __func__);