Skip to content

Commit ca80d25

Browse files
Thalleykartben
authored andcommitted
Bluetooth: CAP: Shell: Move ac_create_unicast_group to CAP
Move the function bap_ac_create_unicast_group to the CAP shell, as that was the only user of it, and rename it to cap_ac_create_unicast_group, and make it use the CAP API. Also rename bap_unicast_ac_param to cap_unicast_ac_param Signed-off-by: Emil Gydesen <[email protected]>
1 parent bf19edc commit ca80d25

File tree

4 files changed

+117
-105
lines changed

4 files changed

+117
-105
lines changed

subsys/bluetooth/audio/shell/audio.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ void bap_usb_clear_frames_to_usb(void);
161161
uint16_t get_next_seq_num(struct bt_bap_stream *bap_stream);
162162
struct shell_stream *shell_stream_from_bap_stream(struct bt_bap_stream *bap_stream);
163163
struct bt_bap_stream *bap_stream_from_shell_stream(struct shell_stream *sh_stream);
164+
struct bt_cap_stream *cap_stream_from_shell_stream(struct shell_stream *sh_stream);
164165
bool bap_usb_can_get_full_sdu(struct shell_stream *sh_stream);
165166
void bap_usb_get_frame(struct shell_stream *sh_stream, enum bt_audio_location chan_alloc,
166167
int16_t buffer[]);
@@ -218,7 +219,7 @@ extern struct shell_stream unicast_streams[CONFIG_BT_MAX_CONN * MAX(UNICAST_SERV
218219

219220
#if defined(CONFIG_BT_BAP_UNICAST_CLIENT)
220221

221-
struct bap_unicast_ac_param {
222+
struct cap_unicast_ac_param {
222223
char *name;
223224
size_t conn_cnt;
224225
size_t snk_cnt[BAP_UNICAST_AC_MAX_CONN];
@@ -233,11 +234,7 @@ extern struct bt_bap_ep *srcs[CONFIG_BT_MAX_CONN][CONFIG_BT_BAP_UNICAST_CLIENT_A
233234
extern struct named_lc3_preset default_sink_preset;
234235
extern struct named_lc3_preset default_source_preset;
235236

236-
int bap_ac_create_unicast_group(const struct bap_unicast_ac_param *param,
237-
struct shell_stream *snk_uni_streams[], size_t snk_cnt,
238-
struct shell_stream *src_uni_streams[], size_t src_cnt);
239-
240-
int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *param);
237+
int cap_ac_unicast(const struct shell *sh, const struct cap_unicast_ac_param *param);
241238
#endif /* CONFIG_BT_BAP_UNICAST_CLIENT */
242239
#endif /* CONFIG_BT_BAP_UNICAST */
243240

subsys/bluetooth/audio/shell/bap.c

Lines changed: 5 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ struct bt_bap_stream *bap_stream_from_shell_stream(struct shell_stream *sh_strea
188188
return &sh_stream->stream.bap_stream;
189189
}
190190

191+
struct bt_cap_stream *cap_stream_from_shell_stream(struct shell_stream *sh_stream)
192+
{
193+
return &sh_stream->stream;
194+
}
195+
191196
unsigned long bap_get_stats_interval(void)
192197
{
193198
return bap_stats_interval;
@@ -812,73 +817,6 @@ static int set_metadata(struct bt_audio_codec_cfg *codec_cfg, const char *meta_s
812817
}
813818

814819
#if defined(CONFIG_BT_BAP_UNICAST_CLIENT)
815-
int bap_ac_create_unicast_group(const struct bap_unicast_ac_param *param,
816-
struct shell_stream *snk_uni_streams[], size_t snk_cnt,
817-
struct shell_stream *src_uni_streams[], size_t src_cnt)
818-
{
819-
struct bt_bap_unicast_group_stream_param snk_group_stream_params[BAP_UNICAST_AC_MAX_SNK] = {
820-
0};
821-
struct bt_bap_unicast_group_stream_param src_group_stream_params[BAP_UNICAST_AC_MAX_SRC] = {
822-
0};
823-
struct bt_bap_unicast_group_stream_pair_param pair_params[BAP_UNICAST_AC_MAX_PAIR] = {0};
824-
struct bt_bap_unicast_group_param group_param = {0};
825-
struct bt_bap_qos_cfg *snk_qos[BAP_UNICAST_AC_MAX_SNK];
826-
struct bt_bap_qos_cfg *src_qos[BAP_UNICAST_AC_MAX_SRC];
827-
size_t snk_stream_cnt = 0U;
828-
size_t src_stream_cnt = 0U;
829-
size_t pair_cnt = 0U;
830-
831-
for (size_t i = 0U; i < snk_cnt; i++) {
832-
snk_qos[i] = &snk_uni_streams[i]->qos;
833-
}
834-
835-
for (size_t i = 0U; i < src_cnt; i++) {
836-
src_qos[i] = &src_uni_streams[i]->qos;
837-
}
838-
839-
/* Create Group
840-
*
841-
* First setup the individual stream parameters and then match them in pairs by connection
842-
* and direction
843-
*/
844-
for (size_t i = 0U; i < snk_cnt; i++) {
845-
snk_group_stream_params[i].qos = snk_qos[i];
846-
snk_group_stream_params[i].stream =
847-
bap_stream_from_shell_stream(snk_uni_streams[i]);
848-
}
849-
for (size_t i = 0U; i < src_cnt; i++) {
850-
src_group_stream_params[i].qos = src_qos[i];
851-
src_group_stream_params[i].stream =
852-
bap_stream_from_shell_stream(src_uni_streams[i]);
853-
}
854-
855-
for (size_t i = 0U; i < param->conn_cnt; i++) {
856-
for (size_t j = 0; j < MAX(param->snk_cnt[i], param->src_cnt[i]); j++) {
857-
if (param->snk_cnt[i] > j) {
858-
pair_params[pair_cnt].tx_param =
859-
&snk_group_stream_params[snk_stream_cnt++];
860-
} else {
861-
pair_params[pair_cnt].tx_param = NULL;
862-
}
863-
864-
if (param->src_cnt[i] > j) {
865-
pair_params[pair_cnt].rx_param =
866-
&src_group_stream_params[src_stream_cnt++];
867-
} else {
868-
pair_params[pair_cnt].rx_param = NULL;
869-
}
870-
871-
pair_cnt++;
872-
}
873-
}
874-
875-
group_param.packing = BT_ISO_PACKING_SEQUENTIAL;
876-
group_param.params = pair_params;
877-
group_param.params_count = pair_cnt;
878-
879-
return bt_bap_unicast_group_create(&group_param, &default_unicast_group.bap_group);
880-
}
881-
882820
static uint8_t stream_dir(const struct bt_bap_stream *stream)
883821
{
884822
if (stream->conn) {

subsys/bluetooth/audio/shell/cap_initiator.c

Lines changed: 97 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ static int cmd_cap_initiator_unicast_cancel(const struct shell *sh, size_t argc,
554554
return 0;
555555
}
556556

557-
static int cap_ac_unicast_start(const struct bap_unicast_ac_param *param,
557+
static int cap_ac_unicast_start(const struct cap_unicast_ac_param *param,
558558
struct bt_conn *connected_conns[],
559559
struct shell_stream *snk_uni_streams[], size_t snk_cnt,
560560
struct shell_stream *src_uni_streams[], size_t src_cnt)
@@ -739,7 +739,74 @@ static int set_codec_config(const struct shell *sh, struct shell_stream *sh_stre
739739
return 0;
740740
}
741741

742-
int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *param)
742+
static int cap_ac_create_unicast_group(const struct cap_unicast_ac_param *param,
743+
struct shell_stream *snk_uni_streams[], size_t snk_cnt,
744+
struct shell_stream *src_uni_streams[], size_t src_cnt)
745+
{
746+
struct bt_cap_unicast_group_stream_param snk_group_stream_params[BAP_UNICAST_AC_MAX_SNK] = {
747+
0};
748+
struct bt_cap_unicast_group_stream_param src_group_stream_params[BAP_UNICAST_AC_MAX_SRC] = {
749+
0};
750+
struct bt_cap_unicast_group_stream_pair_param pair_params[BAP_UNICAST_AC_MAX_PAIR] = {0};
751+
struct bt_cap_unicast_group_param group_param = {0};
752+
struct bt_bap_qos_cfg *snk_qos[BAP_UNICAST_AC_MAX_SNK];
753+
struct bt_bap_qos_cfg *src_qos[BAP_UNICAST_AC_MAX_SRC];
754+
size_t snk_stream_cnt = 0U;
755+
size_t src_stream_cnt = 0U;
756+
size_t pair_cnt = 0U;
757+
758+
for (size_t i = 0U; i < snk_cnt; i++) {
759+
snk_qos[i] = &snk_uni_streams[i]->qos;
760+
}
761+
762+
for (size_t i = 0U; i < src_cnt; i++) {
763+
src_qos[i] = &src_uni_streams[i]->qos;
764+
}
765+
766+
/* Create Group
767+
*
768+
* First setup the individual stream parameters and then match them in pairs by connection
769+
* and direction
770+
*/
771+
for (size_t i = 0U; i < snk_cnt; i++) {
772+
snk_group_stream_params[i].qos_cfg = snk_qos[i];
773+
snk_group_stream_params[i].stream =
774+
cap_stream_from_shell_stream(snk_uni_streams[i]);
775+
}
776+
for (size_t i = 0U; i < src_cnt; i++) {
777+
src_group_stream_params[i].qos_cfg = src_qos[i];
778+
src_group_stream_params[i].stream =
779+
cap_stream_from_shell_stream(src_uni_streams[i]);
780+
}
781+
782+
for (size_t i = 0U; i < param->conn_cnt; i++) {
783+
for (size_t j = 0; j < MAX(param->snk_cnt[i], param->src_cnt[i]); j++) {
784+
if (param->snk_cnt[i] > j) {
785+
pair_params[pair_cnt].tx_param =
786+
&snk_group_stream_params[snk_stream_cnt++];
787+
} else {
788+
pair_params[pair_cnt].tx_param = NULL;
789+
}
790+
791+
if (param->src_cnt[i] > j) {
792+
pair_params[pair_cnt].rx_param =
793+
&src_group_stream_params[src_stream_cnt++];
794+
} else {
795+
pair_params[pair_cnt].rx_param = NULL;
796+
}
797+
798+
pair_cnt++;
799+
}
800+
}
801+
802+
group_param.packing = BT_ISO_PACKING_SEQUENTIAL;
803+
group_param.params = pair_params;
804+
group_param.params_count = pair_cnt;
805+
806+
return bt_cap_unicast_group_create(&group_param, &default_unicast_group.cap_group);
807+
}
808+
809+
int cap_ac_unicast(const struct shell *sh, const struct cap_unicast_ac_param *param)
743810
{
744811
/* Allocate params large enough for any params, but only use what is required */
745812
struct bt_conn *connected_conns[BAP_UNICAST_AC_MAX_CONN] = {0};
@@ -748,6 +815,7 @@ int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *pa
748815
size_t conn_avail_cnt;
749816
size_t snk_cnt = 0;
750817
size_t src_cnt = 0;
818+
size_t total_cnt;
751819
int err;
752820

753821
if (cap_unicast_group != NULL) {
@@ -760,6 +828,7 @@ int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *pa
760828
return -ENOEXEC;
761829
}
762830

831+
total_cnt = 0U;
763832
for (size_t i = 0; i < param->conn_cnt; i++) {
764833
/* Verify conn values */
765834
if (param->snk_cnt[i] > BAP_UNICAST_AC_MAX_SNK) {
@@ -771,6 +840,13 @@ int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *pa
771840
shell_error(sh, "Invalid conn_src_cnt[%zu]: %zu", i, param->src_cnt[i]);
772841
return -ENOEXEC;
773842
}
843+
844+
total_cnt += param->snk_cnt[i] + param->src_cnt[i];
845+
if (total_cnt > ARRAY_SIZE(unicast_streams)) {
846+
shell_error(sh, "Cannot start %zu streams (max supported is %zu)",
847+
total_cnt, ARRAY_SIZE(unicast_streams));
848+
return -ENOEXEC;
849+
}
774850
}
775851

776852
/* Populate the array of connected connections */
@@ -813,7 +889,8 @@ int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *pa
813889
for (size_t j = 0U; j < param->src_cnt[i]; j++) {
814890
struct shell_stream *src_uni_stream;
815891

816-
src_uni_stream = snk_uni_streams[src_cnt] = &unicast_streams[src_cnt];
892+
src_uni_stream = src_uni_streams[src_cnt] =
893+
&unicast_streams[snk_cnt + src_cnt];
817894

818895
err = set_codec_config(sh, src_uni_stream, &default_source_preset,
819896
param->conn_cnt, param->src_cnt[i],
@@ -828,7 +905,7 @@ int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *pa
828905
}
829906
}
830907

831-
err = bap_ac_create_unicast_group(param, snk_uni_streams, snk_cnt, src_uni_streams,
908+
err = cap_ac_create_unicast_group(param, snk_uni_streams, snk_cnt, src_uni_streams,
832909
src_cnt);
833910
if (err != 0) {
834911
shell_error(sh, "Failed to create group: %d", err);
@@ -858,7 +935,7 @@ int cap_ac_unicast(const struct shell *sh, const struct bap_unicast_ac_param *pa
858935
#if UNICAST_SINK_SUPPORTED
859936
static int cmd_cap_ac_1(const struct shell *sh, size_t argc, char **argv)
860937
{
861-
const struct bap_unicast_ac_param param = {
938+
const struct cap_unicast_ac_param param = {
862939
.name = "AC_1",
863940
.conn_cnt = 1U,
864941
.snk_cnt = {1U},
@@ -874,7 +951,7 @@ static int cmd_cap_ac_1(const struct shell *sh, size_t argc, char **argv)
874951
#if UNICAST_SRC_SUPPORTED
875952
static int cmd_cap_ac_2(const struct shell *sh, size_t argc, char **argv)
876953
{
877-
const struct bap_unicast_ac_param param = {
954+
const struct cap_unicast_ac_param param = {
878955
.name = "AC_2",
879956
.conn_cnt = 1U,
880957
.snk_cnt = {0U},
@@ -890,7 +967,7 @@ static int cmd_cap_ac_2(const struct shell *sh, size_t argc, char **argv)
890967
#if UNICAST_SINK_SUPPORTED && UNICAST_SRC_SUPPORTED
891968
static int cmd_cap_ac_3(const struct shell *sh, size_t argc, char **argv)
892969
{
893-
const struct bap_unicast_ac_param param = {
970+
const struct cap_unicast_ac_param param = {
894971
.name = "AC_3",
895972
.conn_cnt = 1U,
896973
.snk_cnt = {1U},
@@ -906,7 +983,7 @@ static int cmd_cap_ac_3(const struct shell *sh, size_t argc, char **argv)
906983
#if UNICAST_SINK_SUPPORTED
907984
static int cmd_cap_ac_4(const struct shell *sh, size_t argc, char **argv)
908985
{
909-
const struct bap_unicast_ac_param param = {
986+
const struct cap_unicast_ac_param param = {
910987
.name = "AC_4",
911988
.conn_cnt = 1,
912989
.snk_cnt = {1U},
@@ -922,7 +999,7 @@ static int cmd_cap_ac_4(const struct shell *sh, size_t argc, char **argv)
922999
#if UNICAST_SINK_SUPPORTED && UNICAST_SRC_SUPPORTED
9231000
static int cmd_cap_ac_5(const struct shell *sh, size_t argc, char **argv)
9241001
{
925-
const struct bap_unicast_ac_param param = {
1002+
const struct cap_unicast_ac_param param = {
9261003
.name = "AC_5",
9271004
.conn_cnt = 1U,
9281005
.snk_cnt = {1U},
@@ -939,7 +1016,7 @@ static int cmd_cap_ac_5(const struct shell *sh, size_t argc, char **argv)
9391016
#if CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT > 1
9401017
static int cmd_cap_ac_6_i(const struct shell *sh, size_t argc, char **argv)
9411018
{
942-
const struct bap_unicast_ac_param param = {
1019+
const struct cap_unicast_ac_param param = {
9431020
.name = "AC_6_I",
9441021
.conn_cnt = 1U,
9451022
.snk_cnt = {2U},
@@ -955,7 +1032,7 @@ static int cmd_cap_ac_6_i(const struct shell *sh, size_t argc, char **argv)
9551032
#if CONFIG_BT_MAX_CONN >= 2
9561033
static int cmd_cap_ac_6_ii(const struct shell *sh, size_t argc, char **argv)
9571034
{
958-
const struct bap_unicast_ac_param param = {
1035+
const struct cap_unicast_ac_param param = {
9591036
.name = "AC_6_II",
9601037
.conn_cnt = 2U,
9611038
.snk_cnt = {1U, 1U},
@@ -972,7 +1049,7 @@ static int cmd_cap_ac_6_ii(const struct shell *sh, size_t argc, char **argv)
9721049
#if UNICAST_SINK_SUPPORTED && UNICAST_SRC_SUPPORTED
9731050
static int cmd_cap_ac_7_i(const struct shell *sh, size_t argc, char **argv)
9741051
{
975-
const struct bap_unicast_ac_param param = {
1052+
const struct cap_unicast_ac_param param = {
9761053
.name = "AC_7_I",
9771054
.conn_cnt = 1U,
9781055
.snk_cnt = {1U}, /* TODO: These should be separate CIS */
@@ -987,7 +1064,7 @@ static int cmd_cap_ac_7_i(const struct shell *sh, size_t argc, char **argv)
9871064
#if CONFIG_BT_MAX_CONN >= 2
9881065
static int cmd_cap_ac_7_ii(const struct shell *sh, size_t argc, char **argv)
9891066
{
990-
const struct bap_unicast_ac_param param = {
1067+
const struct cap_unicast_ac_param param = {
9911068
.name = "AC_7_II",
9921069
.conn_cnt = 2U,
9931070
.snk_cnt = {1U, 0U},
@@ -1003,7 +1080,7 @@ static int cmd_cap_ac_7_ii(const struct shell *sh, size_t argc, char **argv)
10031080
#if CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT > 1
10041081
static int cmd_cap_ac_8_i(const struct shell *sh, size_t argc, char **argv)
10051082
{
1006-
const struct bap_unicast_ac_param param = {
1083+
const struct cap_unicast_ac_param param = {
10071084
.name = "AC_8_I",
10081085
.conn_cnt = 1U,
10091086
.snk_cnt = {2U},
@@ -1019,7 +1096,7 @@ static int cmd_cap_ac_8_i(const struct shell *sh, size_t argc, char **argv)
10191096
#if CONFIG_BT_MAX_CONN >= 2
10201097
static int cmd_cap_ac_8_ii(const struct shell *sh, size_t argc, char **argv)
10211098
{
1022-
const struct bap_unicast_ac_param param = {
1099+
const struct cap_unicast_ac_param param = {
10231100
.name = "AC_8_II",
10241101
.conn_cnt = 2U,
10251102
.snk_cnt = {1U, 1U},
@@ -1035,7 +1112,7 @@ static int cmd_cap_ac_8_ii(const struct shell *sh, size_t argc, char **argv)
10351112
#if CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT > 1
10361113
static int cmd_cap_ac_9_i(const struct shell *sh, size_t argc, char **argv)
10371114
{
1038-
const struct bap_unicast_ac_param param = {
1115+
const struct cap_unicast_ac_param param = {
10391116
.name = "AC_9_I",
10401117
.conn_cnt = 1U,
10411118
.snk_cnt = {0U},
@@ -1051,7 +1128,7 @@ static int cmd_cap_ac_9_i(const struct shell *sh, size_t argc, char **argv)
10511128
#if CONFIG_BT_MAX_CONN >= 2 && CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT > 1
10521129
static int cmd_cap_ac_9_ii(const struct shell *sh, size_t argc, char **argv)
10531130
{
1054-
const struct bap_unicast_ac_param param = {
1131+
const struct cap_unicast_ac_param param = {
10551132
.name = "AC_9_II",
10561133
.conn_cnt = 2U,
10571134
.snk_cnt = {0U, 0U},
@@ -1067,7 +1144,7 @@ static int cmd_cap_ac_9_ii(const struct shell *sh, size_t argc, char **argv)
10671144
#if CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT > 1
10681145
static int cmd_cap_ac_10(const struct shell *sh, size_t argc, char **argv)
10691146
{
1070-
const struct bap_unicast_ac_param param = {
1147+
const struct cap_unicast_ac_param param = {
10711148
.name = "AC_10",
10721149
.conn_cnt = 1U,
10731150
.snk_cnt = {0U},
@@ -1083,7 +1160,7 @@ static int cmd_cap_ac_10(const struct shell *sh, size_t argc, char **argv)
10831160
#if CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT > 1 && CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT > 1
10841161
static int cmd_cap_ac_11_i(const struct shell *sh, size_t argc, char **argv)
10851162
{
1086-
const struct bap_unicast_ac_param param = {
1163+
const struct cap_unicast_ac_param param = {
10871164
.name = "AC_11_I",
10881165
.conn_cnt = 1U,
10891166
.snk_cnt = {2U},
@@ -1101,7 +1178,7 @@ static int cmd_cap_ac_11_i(const struct shell *sh, size_t argc, char **argv)
11011178
#if CONFIG_BT_MAX_CONN >= 2
11021179
static int cmd_cap_ac_11_ii(const struct shell *sh, size_t argc, char **argv)
11031180
{
1104-
const struct bap_unicast_ac_param param = {
1181+
const struct cap_unicast_ac_param param = {
11051182
.name = "AC_11_II",
11061183
.conn_cnt = 2U,
11071184
.snk_cnt = {1U, 1U},

0 commit comments

Comments
 (0)