Bluetooth: CSIS: Merge the two client discovery functions

Merges bt_csis_client_discover and
bt_csis_client_discover_sets, as they should be done
together for the discovery procedure from the CSIP
spec.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
diff --git a/include/bluetooth/audio/csis.h b/include/bluetooth/audio/csis.h
index fb73fa5..b2bf281 100644
--- a/include/bluetooth/audio/csis.h
+++ b/include/bluetooth/audio/csis.h
@@ -222,7 +222,7 @@
  * @brief Struct representing a coordinated set instance on a remote device
  *
  * The values in this struct will be populated during discovery of sets
- * (bt_csis_client_discover_sets()).
+ * (bt_csis_client_discover()).
  */
 struct bt_csis_client_csis_inst {
 	struct bt_csis_client_set_info info;
@@ -261,27 +261,6 @@
 int bt_csis_client_discover(struct bt_csis_client_set_member *member);
 
 /**
- * @typedef bt_csis_client_discover_sets_cb
- * @brief Callback for discovering sets and their content.
- *
- * @param member    Pointer to the set member.
- * @param err       0 on success, or an errno value on error.
- * @param set_count Number of sets on the member.
- */
-typedef void (*bt_csis_client_discover_sets_cb)(struct bt_csis_client_set_member *member,
-						int err, uint8_t set_count);
-
-/**
- * @brief Reads CSIS characteristics from a device, to find more information
- * about the set(s) that the device is part of.
- *
- * @param member Pointer to a set member struct to store discovery results in.
- *
- * @return int Return 0 on success, or an errno value on error.
- */
-int bt_csis_client_discover_sets(struct bt_csis_client_set_member *member);
-
-/**
  * @typedef bt_csis_client_lock_set_cb
  * @brief Callback for locking a set across one or more devices
  *
@@ -322,7 +301,6 @@
 	/* Set callbacks */
 	bt_csis_client_lock_set_cb             lock_set;
 	bt_csis_client_lock_set_cb             release_set;
-	bt_csis_client_discover_sets_cb        sets;
 	bt_csis_client_lock_changed_cb         lock_changed;
 
 	/* Device specific callbacks */
diff --git a/subsys/bluetooth/audio/csis_client.c b/subsys/bluetooth/audio/csis_client.c
index c7418fa..272304d 100644
--- a/subsys/bluetooth/audio/csis_client.c
+++ b/subsys/bluetooth/audio/csis_client.c
@@ -441,6 +441,25 @@
 	return bt_gatt_read(conn, &read_params);
 }
 
+static int csis_client_discover_sets(struct bt_csis_client_set_member *member)
+{
+	int err;
+
+	if (member->conn == NULL) {
+		BT_DBG("member->conn is NULL");
+		return -EINVAL;
+	} else if (busy) {
+		return -EBUSY;
+	}
+
+	/* Start reading values and call CB when done */
+	err = read_set_sirk(member->insts[0].csis);
+	if (err == 0) {
+		busy = true;
+	}
+	return err;
+}
+
 static uint8_t discover_func(struct bt_conn *conn,
 			     const struct bt_gatt_attr *attr,
 			     struct bt_gatt_discover_params *params)
@@ -478,11 +497,20 @@
 			}
 
 		} else {
+			int err;
+
 			cur_inst = NULL;
 			busy = false;
-			if (csis_client_cbs != NULL && csis_client_cbs->discover != NULL) {
-				csis_client_cbs->discover(client->set_member, 0,
-							  client->inst_count);
+			err = csis_client_discover_sets(client->set_member);
+			if (err != 0) {
+				BT_DBG("Discover sets failed (err %d)", err);
+				cur_inst = NULL;
+				busy = false;
+				if (csis_client_cbs != NULL &&
+				    csis_client_cbs->discover != NULL) {
+					csis_client_cbs->discover(client->set_member, err,
+								  client->inst_count);
+				}
 			}
 		}
 		return BT_GATT_ITER_STOP;
@@ -661,9 +689,10 @@
 	}
 
 	if (cb_err != 0) {
-		if (csis_client_cbs != NULL && csis_client_cbs->sets != NULL) {
-			csis_client_cbs->sets(client->set_member, cb_err,
-					      client->inst_count);
+		if (csis_client_cbs != NULL &&
+		    csis_client_cbs->discover != NULL) {
+			csis_client_cbs->discover(client->set_member, cb_err,
+						  client->inst_count);
 		}
 	}
 
@@ -703,9 +732,10 @@
 	}
 
 	if (cb_err != 0) {
-		if (csis_client_cbs != NULL && csis_client_cbs->sets != NULL) {
-			csis_client_cbs->sets(client->set_member, cb_err,
-					      client->inst_count);
+		if (csis_client_cbs != NULL &&
+		    csis_client_cbs->discover != NULL) {
+			csis_client_cbs->discover(client->set_member, cb_err,
+						  client->inst_count);
 		}
 	}
 
@@ -790,9 +820,10 @@
 	}
 
 	if (cb_err != 0) {
-		if (csis_client_cbs != NULL && csis_client_cbs->sets != NULL) {
-			csis_client_cbs->sets(client->set_member, cb_err,
-					      client->inst_count);
+		if (csis_client_cbs != NULL &&
+		    csis_client_cbs->discover != NULL) {
+			csis_client_cbs->discover(client->set_member, cb_err,
+						  client->inst_count);
 		}
 	}
 
@@ -839,18 +870,19 @@
 			/* Read next */
 			cb_err = read_set_sirk(cur_inst);
 		} else if (csis_client_cbs != NULL &&
-			   csis_client_cbs->sets != NULL) {
-			csis_client_cbs->sets(client->set_member, 0,
-					      client->inst_count);
+			   csis_client_cbs->discover != NULL) {
+			csis_client_cbs->discover(client->set_member, 0,
+						  client->inst_count);
 		}
 
 		return;
 	}
 
 	if (cb_err != 0) {
-		if (csis_client_cbs != NULL && csis_client_cbs->sets != NULL) {
-			csis_client_cbs->sets(client->set_member, cb_err,
-					      client->inst_count);
+		if (csis_client_cbs != NULL &&
+		    csis_client_cbs->discover != NULL) {
+			csis_client_cbs->discover(client->set_member, cb_err,
+						  client->inst_count);
 		}
 	} else {
 		busy = true;
@@ -1242,30 +1274,6 @@
 	return err;
 }
 
-int bt_csis_client_discover_sets(struct bt_csis_client_set_member *member)
-{
-	int err;
-
-	CHECKIF(member == NULL) {
-		BT_DBG("member is NULL");
-		return -EINVAL;
-	}
-
-	if (member->conn == NULL) {
-		BT_DBG("member->conn is NULL");
-		return -EINVAL;
-	} else if (busy) {
-		return -EBUSY;
-	}
-
-	/* Start reading values and call CB when done */
-	err = read_set_sirk(member->insts[0].csis);
-	if (err == 0) {
-		busy = true;
-	}
-	return err;
-}
-
 static int verify_members_and_get_inst(const struct bt_csis_client_set_member **members,
 				       uint8_t count,
 				       const struct bt_csis_client_set_info *set_info,
diff --git a/subsys/bluetooth/shell/csis_client.c b/subsys/bluetooth/shell/csis_client.c
index 40bb893..f7e87d0 100644
--- a/subsys/bluetooth/shell/csis_client.c
+++ b/subsys/bluetooth/shell/csis_client.c
@@ -101,23 +101,6 @@
 	}
 }
 
-static void csis_client_discover_sets_cb(struct bt_csis_client_set_member *member,
-					 int err,
-					 uint8_t set_count)
-{
-	if (err != 0) {
-		shell_error(ctx_shell, "Discover sets failed (%d)", err);
-		return;
-	}
-
-	for (uint8_t i = 0; i < set_count; i++) {
-		struct bt_csis_client_csis_inst *inst = &member->insts[i];
-
-		shell_print(ctx_shell, "Set size %d (pointer: %p)",
-			    inst[i].info.set_size, &inst[i]);
-	}
-}
-
 static void csis_client_lock_set_cb(int err)
 {
 	if (err != 0) {
@@ -157,7 +140,6 @@
 static struct bt_csis_client_cb cbs = {
 	.lock_set = csis_client_lock_set_cb,
 	.release_set = csis_client_release_set_cb,
-	.sets = csis_client_discover_sets_cb,
 	.discover = csis_discover_cb,
 	.lock_state_read = csis_client_lock_state_read_cb
 };
@@ -280,30 +262,6 @@
 	return err;
 }
 
-static int cmd_csis_client_discover_sets(const struct shell *sh, size_t argc,
-					 char *argv[])
-{
-	int err;
-	long member_index = 0;
-
-	if (argc > 1) {
-		member_index = strtol(argv[1], NULL, 0);
-
-		if (member_index < 0 || member_index > CONFIG_BT_MAX_CONN) {
-			shell_error(sh, "Invalid member_index %ld",
-				    member_index);
-			return -ENOEXEC;
-		}
-	}
-
-	err = bt_csis_client_discover_sets(&set_members[member_index]);
-	if (err != 0) {
-		shell_error(sh, "Fail: %d", err);
-	}
-
-	return err;
-}
-
 static int cmd_csis_client_discover_members(const struct shell *sh, size_t argc,
 					    char *argv[])
 {
@@ -520,9 +478,6 @@
 	SHELL_CMD_ARG(discover, NULL,
 		      "Run discover for CSIS on peer device [member_index]",
 		      cmd_csis_client_discover, 1, 1),
-	SHELL_CMD_ARG(discover_sets, NULL,
-		      "Read all set values on connected device [member_index]",
-		      cmd_csis_client_discover_sets, 1, 1),
 	SHELL_CMD_ARG(discover_members, NULL,
 		      "Scan for set members <set_pointer>",
 		      cmd_csis_client_discover_members, 2, 0),
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 5b8a4b5..f140efc 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
@@ -12,7 +12,6 @@
 extern enum bst_result_t bst_result;
 static volatile bool is_connected;
 static volatile bool discovered;
-static volatile bool sets_discovered;
 static volatile bool members_discovered;
 static volatile bool set_locked;
 static volatile bool set_unlocked;
@@ -51,21 +50,6 @@
 	set_locked = true;
 }
 
-static void csis_client_discover_sets_cb(struct bt_csis_client_set_member *member,
-					 int err,
-					 uint8_t set_count)
-{
-	printk("%s\n", __func__);
-
-	if (err != 0) {
-		FAIL("Discover sets failed (%d)\n", err);
-		return;
-	}
-
-	inst = &member->insts[0];
-	sets_discovered = true;
-}
-
 static void csis_discover_cb(struct bt_csis_client_set_member *member, int err,
 			     uint8_t set_count)
 {
@@ -76,6 +60,7 @@
 		return;
 	}
 
+	inst = &member->insts[0];
 	discovered = true;
 }
 
@@ -129,7 +114,6 @@
 static struct bt_csis_client_cb cbs = {
 	.lock_set = csis_client_lock_set_cb,
 	.release_set = csis_client_lock_release_cb,
-	.sets = csis_client_discover_sets_cb,
 	.discover = csis_discover_cb,
 	.lock_changed = csis_lock_changed_cb,
 	.lock_state_read = csis_client_lock_state_read_cb,
@@ -285,14 +269,6 @@
 
 	WAIT_FOR(discovered);
 
-	err = bt_csis_client_discover_sets(&set_members[0]);
-	if (err != 0) {
-		FAIL("Failed to do CSIS client discovery sets (%d)\n", err);
-		return;
-	}
-
-	WAIT_FOR(sets_discovered);
-
 	err = bt_le_scan_start(BT_LE_SCAN_ACTIVE, NULL);
 	if (err != 0) {
 		FAIL("Could not start scan: %d", err);
@@ -343,16 +319,6 @@
 		}
 
 		WAIT_FOR(discovered);
-
-		sets_discovered = false;
-		printk("Doing sets discovery on member[%u]", i);
-		err = bt_csis_client_discover_sets(&set_members[i]);
-		if (err != 0) {
-			FAIL("Failed to do CSIS client discovery sets (%d)\n", err);
-			return;
-		}
-
-		WAIT_FOR(sets_discovered);
 	}
 
 	for (size_t i = 0; i < ARRAY_SIZE(locked_members); i++) {