@@ -26,6 +26,7 @@ CREATE_FLAG(flag_discovered);
26
26
CREATE_FLAG (flag_codec_found );
27
27
CREATE_FLAG (flag_endpoint_found );
28
28
CREATE_FLAG (flag_started );
29
+ CREATE_FLAG (flag_start_timeout );
29
30
CREATE_FLAG (flag_updated );
30
31
CREATE_FLAG (flag_stopped );
31
32
CREATE_FLAG (flag_mtu_exchanged );
@@ -114,13 +115,13 @@ static void cap_discovery_complete_cb(struct bt_conn *conn, int err,
114
115
static void unicast_start_complete_cb (struct bt_bap_unicast_group * unicast_group , int err ,
115
116
struct bt_conn * conn )
116
117
{
117
- if (err != 0 ) {
118
+ if (err == - ECANCELED ) {
119
+ SET_FLAG (flag_start_timeout );
120
+ } else if (err != 0 ) {
118
121
FAIL ("Failed to start (failing conn %p): %d" , conn , err );
119
-
120
- return ;
122
+ } else {
123
+ SET_FLAG ( flag_started ) ;
121
124
}
122
-
123
- SET_FLAG (flag_started );
124
125
}
125
126
126
127
static void unicast_update_complete_cb (int err , struct bt_conn * conn )
@@ -469,7 +470,7 @@ static void unicast_audio_start_inval(struct bt_bap_unicast_group *unicast_group
469
470
}
470
471
}
471
472
472
- static void unicast_audio_start (struct bt_bap_unicast_group * unicast_group )
473
+ static void unicast_audio_start (struct bt_bap_unicast_group * unicast_group , bool wait )
473
474
{
474
475
struct bt_cap_unicast_audio_start_stream_param stream_param [1 ];
475
476
struct bt_cap_unicast_audio_start_param param ;
@@ -492,7 +493,9 @@ static void unicast_audio_start(struct bt_bap_unicast_group *unicast_group)
492
493
return ;
493
494
}
494
495
495
- WAIT_FOR_FLAG (flag_started );
496
+ if (wait ) {
497
+ WAIT_FOR_FLAG (flag_started );
498
+ }
496
499
}
497
500
498
501
static void unicast_audio_update_inval (void )
@@ -584,6 +587,17 @@ static void unicast_audio_stop(struct bt_bap_unicast_group *unicast_group)
584
587
}
585
588
}
586
589
590
+ static void unicast_audio_cancel (void )
591
+ {
592
+ int err ;
593
+
594
+ err = bt_cap_initiator_unicast_audio_cancel ();
595
+ if (err != 0 ) {
596
+ FAIL ("Failed to cancel unicast audio: %d\n" , err );
597
+ return ;
598
+ }
599
+ }
600
+
587
601
static void unicast_group_delete_inval (void )
588
602
{
589
603
int err ;
@@ -635,7 +649,7 @@ static void test_main_cap_initiator_unicast(void)
635
649
636
650
for (size_t j = 0U ; j < iterations ; j ++ ) {
637
651
unicast_audio_start_inval (unicast_group );
638
- unicast_audio_start (unicast_group );
652
+ unicast_audio_start (unicast_group , true );
639
653
640
654
unicast_audio_update_inval ();
641
655
unicast_audio_update ();
@@ -652,13 +666,58 @@ static void test_main_cap_initiator_unicast(void)
652
666
PASS ("CAP initiator unicast passed\n" );
653
667
}
654
668
669
+ static void test_cap_initiator_unicast_timeout (void )
670
+ {
671
+ struct bt_bap_unicast_group * unicast_group ;
672
+ const k_timeout_t timeout = K_SECONDS (1 );
673
+ const size_t iterations = 2 ;
674
+
675
+ init ();
676
+
677
+ scan_and_connect ();
678
+
679
+ WAIT_FOR_FLAG (flag_mtu_exchanged );
680
+
681
+ discover_cas ();
682
+
683
+ discover_sink ();
684
+
685
+ unicast_group_create (& unicast_group );
686
+
687
+ for (size_t j = 0U ; j < iterations ; j ++ ) {
688
+ unicast_audio_start (unicast_group , false);
689
+
690
+ k_sleep (timeout );
691
+ if ((bool )atomic_get (& flag_started )) {
692
+ FAIL ("Unexpected start complete\n" );
693
+ } else {
694
+ unicast_audio_cancel ();
695
+ }
696
+
697
+ WAIT_FOR_FLAG (flag_start_timeout );
698
+
699
+ unicast_audio_stop (unicast_group );
700
+ }
701
+
702
+ unicast_group_delete (unicast_group );
703
+ unicast_group = NULL ;
704
+
705
+ PASS ("CAP initiator unicast passed\n" );
706
+ }
707
+
655
708
static const struct bst_test_instance test_cap_initiator_unicast [] = {
656
709
{
657
710
.test_id = "cap_initiator_unicast" ,
658
711
.test_post_init_f = test_init ,
659
712
.test_tick_f = test_tick ,
660
713
.test_main_f = test_main_cap_initiator_unicast ,
661
714
},
715
+ {
716
+ .test_id = "cap_initiator_unicast_timeout" ,
717
+ .test_post_init_f = test_init ,
718
+ .test_tick_f = test_tick ,
719
+ .test_main_f = test_cap_initiator_unicast_timeout ,
720
+ },
662
721
BSTEST_END_MARKER ,
663
722
};
664
723
0 commit comments