@@ -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
859936static 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
875952static 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
891968static 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
907984static 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
9231000static 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
9401017static 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
9561033static 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
9731050static 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
9881065static 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
10041081static 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
10201097static 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
10361113static 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
10521129static 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
10681145static 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
10841161static 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
11021179static 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