1616#include <zephyr/bluetooth/gap.h>
1717#include <zephyr/bluetooth/gatt.h>
1818#include <zephyr/bluetooth/hci.h>
19+ #include <zephyr/bluetooth/iso.h>
1920#include <zephyr/bluetooth/uuid.h>
2021#include <zephyr/net/buf.h>
2122#include <zephyr/sys/printk.h>
@@ -47,6 +48,8 @@ CREATE_FLAG(flag_recv_state_read);
4748CREATE_FLAG (flag_recv_state_updated );
4849CREATE_FLAG (flag_recv_state_updated_with_bis_sync );
4950CREATE_FLAG (flag_recv_state_removed );
51+ CREATE_FLAG (flag_broadcast_code_requested );
52+ CREATE_FLAG (flag_incorrect_broadcast_code );
5053
5154/* Broadcaster variables */
5255static bt_addr_le_t g_broadcaster_addr ;
@@ -98,7 +101,7 @@ static void bap_broadcast_assistant_scan_cb(const struct bt_le_scan_recv_info *i
98101
99102static bool metadata_entry (struct bt_data * data , void * user_data )
100103{
101- char metadata [CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE ];
104+ char metadata [CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE ] = { 0 } ;
102105
103106 (void )bin2hex (data -> data , data -> data_len , metadata , sizeof (metadata ));
104107
@@ -130,14 +133,15 @@ static void bap_broadcast_assistant_recv_state_cb(
130133 bt_addr_le_to_str (& state -> addr , le_addr , sizeof (le_addr ));
131134 (void )bin2hex (state -> bad_code , BT_AUDIO_BROADCAST_CODE_SIZE , bad_code ,
132135 sizeof (bad_code ));
133- printk ("BASS recv state: src_id %u, addr %s, sid %u, sync_state %u, "
134- "encrypt_state %u%s%s\n" , state -> src_id , le_addr , state -> adv_sid ,
135- state -> pa_sync_state , state -> encrypt_state ,
136- state -> encrypt_state == BT_BAP_BIG_ENC_STATE_BAD_CODE ? ", bad code" : "" ,
136+ printk ("BASS recv state: src_id %u, addr %s, sid %u, sync_state %u, encrypt_state %u%s%s\n" ,
137+ state -> src_id , le_addr , state -> adv_sid , state -> pa_sync_state , state -> encrypt_state ,
138+ state -> encrypt_state == BT_BAP_BIG_ENC_STATE_BAD_CODE ? ", bad code: " : "" ,
137139 bad_code );
138140
139- if (state -> encrypt_state == BT_BAP_BIG_ENC_STATE_BAD_CODE ) {
140- FAIL ("Encryption state is BT_BAP_BIG_ENC_STATE_BAD_CODE" );
141+ if (state -> encrypt_state == BT_BAP_BIG_ENC_STATE_BCODE_REQ ) {
142+ SET_FLAG (flag_broadcast_code_requested );
143+ } else if (state -> encrypt_state == BT_BAP_BIG_ENC_STATE_BAD_CODE ) {
144+ SET_FLAG (flag_incorrect_broadcast_code );
141145 return ;
142146 }
143147
@@ -499,15 +503,10 @@ static void test_bass_mod_source_long_meta(void)
499503 printk ("Server PA synced\n" );
500504}
501505
502- static void test_bass_broadcast_code (void )
506+ static void test_bass_broadcast_code (const uint8_t broadcast_code [ BT_AUDIO_BROADCAST_CODE_SIZE ] )
503507{
504- uint8_t broadcast_code [BT_AUDIO_BROADCAST_CODE_SIZE ];
505508 int err ;
506509
507- for (int i = 0 ; i < ARRAY_SIZE (broadcast_code ); i ++ ) {
508- broadcast_code [i ] = i ;
509- }
510-
511510 printk ("Adding broadcast code\n" );
512511 UNSET_FLAG (flag_write_complete );
513512 err = bt_bap_broadcast_assistant_set_broadcast_code (default_conn , g_src_id , broadcast_code );
@@ -588,7 +587,7 @@ static void test_main_client_sync(void)
588587 test_bass_add_source ();
589588 test_bass_mod_source ();
590589 test_bass_mod_source_long_meta ();
591- test_bass_broadcast_code ();
590+ test_bass_broadcast_code (BROADCAST_CODE );
592591
593592 printk ("Waiting for receive state with BIS sync\n" );
594593 WAIT_FOR_FLAG (flag_recv_state_updated_with_bis_sync );
@@ -598,6 +597,30 @@ static void test_main_client_sync(void)
598597 PASS ("BAP Broadcast Assistant Client Sync Passed\n" );
599598}
600599
600+ static void test_main_client_sync_incorrect_code (void )
601+ {
602+ int err ;
603+
604+ err = common_init ();
605+ if (err != 0 ) {
606+ FAIL ("Bluetooth enable failed (err %d)\n" , err );
607+ return ;
608+ }
609+
610+ test_bass_scan_start ();
611+ test_bass_scan_stop ();
612+ test_bass_create_pa_sync ();
613+ test_bass_add_source ();
614+ test_bass_mod_source ();
615+ WAIT_FOR_FLAG (flag_broadcast_code_requested );
616+ test_bass_broadcast_code (INCORRECT_BROADCAST_CODE );
617+ WAIT_FOR_FLAG (flag_incorrect_broadcast_code );
618+
619+ test_bass_remove_source ();
620+
621+ PASS ("BAP Broadcast Assistant Client Sync Passed\n" );
622+ }
623+
601624static void test_main_server_sync_client_rem (void )
602625{
603626 int err ;
@@ -610,7 +633,7 @@ static void test_main_server_sync_client_rem(void)
610633
611634 WAIT_FOR_FLAG (flag_recv_state_updated );
612635
613- test_bass_broadcast_code ();
636+ test_bass_broadcast_code (BROADCAST_CODE );
614637
615638 printk ("Waiting for receive state with BIS sync\n" );
616639 WAIT_FOR_FLAG (flag_recv_state_updated_with_bis_sync );
@@ -632,7 +655,7 @@ static void test_main_server_sync_server_rem(void)
632655
633656 WAIT_FOR_FLAG (flag_recv_state_updated );
634657
635- test_bass_broadcast_code ();
658+ test_bass_broadcast_code (BROADCAST_CODE );
636659
637660 printk ("Waiting for receive state with BIS sync\n" );
638661 WAIT_FOR_FLAG (flag_recv_state_updated_with_bis_sync );
@@ -649,6 +672,12 @@ static const struct bst_test_instance test_bass[] = {
649672 .test_tick_f = test_tick ,
650673 .test_main_f = test_main_client_sync ,
651674 },
675+ {
676+ .test_id = "bap_broadcast_assistant_client_sync_incorrect_code" ,
677+ .test_pre_init_f = test_init ,
678+ .test_tick_f = test_tick ,
679+ .test_main_f = test_main_client_sync_incorrect_code ,
680+ },
652681 {
653682 .test_id = "bap_broadcast_assistant_server_sync_client_rem" ,
654683 .test_pre_init_f = test_init ,
@@ -661,7 +690,7 @@ static const struct bst_test_instance test_bass[] = {
661690 .test_tick_f = test_tick ,
662691 .test_main_f = test_main_server_sync_server_rem ,
663692 },
664- BSTEST_END_MARKER
693+ BSTEST_END_MARKER ,
665694};
666695
667696struct bst_test_list * test_bap_broadcast_assistant_install (struct bst_test_list * tests )
0 commit comments