@@ -54,7 +54,9 @@ extern enum bst_result_t bst_result;
5454static struct bt_bap_lc3_preset unicast_preset_16_2_1 = BT_BAP_LC3_UNICAST_PRESET_16_2_1 (
5555 BT_AUDIO_LOCATION_FRONT_LEFT , BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED );
5656
57- static struct bt_cap_stream unicast_client_streams [CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT ];
57+ static struct bt_cap_stream unicast_client_sink_streams [CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT ];
58+ static struct bt_cap_stream
59+ unicast_client_source_streams [CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT ];
5860static struct bt_bap_ep
5961 * unicast_sink_eps [CONFIG_BT_MAX_CONN ][CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT ];
6062static struct bt_bap_ep
@@ -351,8 +353,12 @@ static void init(void)
351353 return ;
352354 }
353355
354- for (size_t i = 0 ; i < ARRAY_SIZE (unicast_client_streams ); i ++ ) {
355- bt_cap_stream_ops_register (& unicast_client_streams [i ], & unicast_stream_ops );
356+ for (size_t i = 0 ; i < ARRAY_SIZE (unicast_client_sink_streams ); i ++ ) {
357+ bt_cap_stream_ops_register (& unicast_client_sink_streams [i ], & unicast_stream_ops );
358+ }
359+
360+ for (size_t i = 0 ; i < ARRAY_SIZE (unicast_client_source_streams ); i ++ ) {
361+ bt_cap_stream_ops_register (& unicast_client_source_streams [i ], & unicast_stream_ops );
356362 }
357363}
358364
@@ -506,15 +512,18 @@ static void discover_cas(struct bt_conn *conn)
506512
507513static void unicast_group_create (struct bt_bap_unicast_group * * out_unicast_group )
508514{
509- struct bt_bap_unicast_group_stream_param group_stream_params ;
515+ struct bt_bap_unicast_group_stream_param group_source_stream_params ;
516+ struct bt_bap_unicast_group_stream_param group_sink_stream_params ;
510517 struct bt_bap_unicast_group_stream_pair_param pair_params ;
511518 struct bt_bap_unicast_group_param group_param ;
512519 int err ;
513520
514- group_stream_params .qos = & unicast_preset_16_2_1 .qos ;
515- group_stream_params .stream = & unicast_client_streams [0 ].bap_stream ;
516- pair_params .tx_param = & group_stream_params ;
517- pair_params .rx_param = NULL ;
521+ group_sink_stream_params .qos = & unicast_preset_16_2_1 .qos ;
522+ group_sink_stream_params .stream = & unicast_client_sink_streams [0 ].bap_stream ;
523+ group_source_stream_params .qos = & unicast_preset_16_2_1 .qos ;
524+ group_source_stream_params .stream = & unicast_client_source_streams [0 ].bap_stream ;
525+ pair_params .tx_param = & group_sink_stream_params ;
526+ pair_params .rx_param = & group_source_stream_params ;
518527
519528 group_param .packing = BT_ISO_PACKING_SEQUENTIAL ;
520529 group_param .params_count = 1 ;
@@ -542,7 +551,7 @@ static void unicast_audio_start_inval(struct bt_bap_unicast_group *unicast_group
542551 valid_start_param .stream_params = & valid_stream_param ;
543552
544553 valid_stream_param .member .member = default_conn ;
545- valid_stream_param .stream = & unicast_client_streams [0 ];
554+ valid_stream_param .stream = & unicast_client_sink_streams [0 ];
546555 valid_stream_param .ep = unicast_sink_eps [bt_conn_index (default_conn )][0 ];
547556 valid_stream_param .codec_cfg = & unicast_preset_16_2_1 .codec_cfg ;
548557
@@ -639,18 +648,24 @@ static void unicast_audio_start_inval(struct bt_bap_unicast_group *unicast_group
639648
640649static void unicast_audio_start (struct bt_bap_unicast_group * unicast_group , bool wait )
641650{
642- struct bt_cap_unicast_audio_start_stream_param stream_param [1 ];
651+ struct bt_cap_unicast_audio_start_stream_param stream_param [2 ];
643652 struct bt_cap_unicast_audio_start_param param ;
644653 int err ;
645654
646655 param .type = BT_CAP_SET_TYPE_AD_HOC ;
647- param .count = 1u ;
656+ param .count = ARRAY_SIZE ( stream_param ) ;
648657 param .stream_params = stream_param ;
649658 stream_param [0 ].member .member = default_conn ;
650- stream_param [0 ].stream = & unicast_client_streams [0 ];
659+ stream_param [0 ].stream = & unicast_client_sink_streams [0 ];
651660 stream_param [0 ].ep = unicast_sink_eps [bt_conn_index (default_conn )][0 ];
652661 stream_param [0 ].codec_cfg = & unicast_preset_16_2_1 .codec_cfg ;
653662
663+ stream_param [1 ].member .member = default_conn ;
664+ stream_param [1 ].stream = & unicast_client_source_streams [0 ];
665+ stream_param [1 ].ep = unicast_source_eps [bt_conn_index (default_conn )][0 ];
666+ stream_param [1 ].codec_cfg = & unicast_preset_16_2_1 .codec_cfg ;
667+ stream_param [1 ].qos = & unicast_preset_16_2_1 .qos ;
668+
654669 UNSET_FLAG (flag_started );
655670
656671 err = bt_cap_initiator_unicast_audio_start (& param , unicast_group );
@@ -671,7 +686,7 @@ static void unicast_audio_update_inval(void)
671686 struct bt_cap_unicast_audio_update_param param ;
672687 int err ;
673688
674- param .stream = & unicast_client_streams [0 ];
689+ param .stream = & unicast_client_sink_streams [0 ];
675690 param .meta = unicast_preset_16_2_1 .codec_cfg .meta ;
676691 param .meta_len = unicast_preset_16_2_1 .codec_cfg .meta_len ;
677692
@@ -701,16 +716,20 @@ static void unicast_audio_update_inval(void)
701716
702717static void unicast_audio_update (void )
703718{
704- struct bt_cap_unicast_audio_update_param param ;
719+ struct bt_cap_unicast_audio_update_param param [ 2 ] ;
705720 int err ;
706721
707- param .stream = & unicast_client_streams [0 ];
708- param .meta = unicast_preset_16_2_1 .codec_cfg .meta ;
709- param .meta_len = unicast_preset_16_2_1 .codec_cfg .meta_len ;
722+ param [0 ].stream = & unicast_client_sink_streams [0 ];
723+ param [0 ].meta = unicast_preset_16_2_1 .codec_cfg .meta ;
724+ param [0 ].meta_len = unicast_preset_16_2_1 .codec_cfg .meta_len ;
725+
726+ param [1 ].stream = & unicast_client_source_streams [0 ];
727+ param [1 ].meta = unicast_preset_16_2_1 .codec_cfg .meta ;
728+ param [1 ].meta_len = unicast_preset_16_2_1 .codec_cfg .meta_len ;
710729
711730 UNSET_FLAG (flag_updated );
712731
713- err = bt_cap_initiator_unicast_audio_update (& param , 1 );
732+ err = bt_cap_initiator_unicast_audio_update (param , ARRAY_SIZE ( param ) );
714733 if (err != 0 ) {
715734 FAIL ("Failed to update unicast audio: %d\n" , err );
716735 return ;
@@ -808,6 +827,7 @@ static void test_main_cap_initiator_unicast(void)
808827 discover_cas (default_conn );
809828
810829 discover_sink (default_conn );
830+ discover_source (default_conn );
811831
812832 for (size_t i = 0U ; i < iterations ; i ++ ) {
813833 unicast_group_create (& unicast_group );
@@ -841,6 +861,7 @@ static void test_main_cap_initiator_unicast_inval(void)
841861 discover_cas (default_conn );
842862
843863 discover_sink (default_conn );
864+ discover_source (default_conn );
844865
845866 unicast_group_create (& unicast_group );
846867
@@ -875,6 +896,7 @@ static void test_cap_initiator_unicast_timeout(void)
875896 discover_cas (default_conn );
876897
877898 discover_sink (default_conn );
899+ discover_source (default_conn );
878900
879901 unicast_group_create (& unicast_group );
880902
@@ -1009,10 +1031,14 @@ static int set_chan_alloc(enum bt_audio_location loc, struct bt_audio_codec_cfg
10091031
10101032 return 0 ;
10111033 }
1034+
1035+ /* Since we are incrementing i by the value_len, we don't need to increment it
1036+ * further in the `for` statement
1037+ */
10121038 i += value_len ;
10131039 }
10141040
1015- return - ENODATA ;
1041+ return - ENOENT ;
10161042}
10171043
10181044static int cap_initiator_ac_cap_unicast_start (const struct cap_initiator_ac_param * param ,
0 commit comments