@@ -536,11 +536,6 @@ static void stream_started_cb(struct bt_bap_stream *stream)
536
536
#endif /* CONFIG_LIBLC3 */
537
537
538
538
k_sem_give (& sem_stream_started );
539
- if (k_sem_count_get (& sem_stream_started ) == stream_count ) {
540
- big_synced = true;
541
- printk ("BIG synced\n" );
542
- k_sem_give (& sem_big_synced );
543
- }
544
539
}
545
540
546
541
static void stream_stopped_cb (struct bt_bap_stream * stream , uint8_t reason )
@@ -553,11 +548,6 @@ static void stream_stopped_cb(struct bt_bap_stream *stream, uint8_t reason)
553
548
if (err != 0 ) {
554
549
printk ("Failed to take sem_stream_started: %d\n" , err );
555
550
}
556
-
557
- if (k_sem_count_get (& sem_stream_started ) != stream_count ) {
558
- printk ("BIG sync terminated\n" );
559
- big_synced = false;
560
- }
561
551
}
562
552
563
553
static void stream_recv_cb (struct bt_bap_stream * stream , const struct bt_iso_recv_info * info ,
@@ -818,9 +808,27 @@ static void syncable_cb(struct bt_bap_broadcast_sink *sink, const struct bt_iso_
818
808
}
819
809
}
820
810
811
+ static void broadcast_sink_started_cb (struct bt_bap_broadcast_sink * sink )
812
+ {
813
+ printk ("Broadcast sink %p started\n" , sink );
814
+
815
+ big_synced = true;
816
+ k_sem_give (& sem_big_synced );
817
+ }
818
+
819
+ static void broadcast_sink_stopped_cb (struct bt_bap_broadcast_sink * sink , uint8_t reason )
820
+ {
821
+ printk ("Broadcast sink %p stopped with reason 0x%02X\n" , sink , reason );
822
+
823
+ big_synced = false;
824
+ k_sem_give (& sem_broadcast_sink_stopped );
825
+ }
826
+
821
827
static struct bt_bap_broadcast_sink_cb broadcast_sink_cbs = {
822
828
.base_recv = base_recv_cb ,
823
829
.syncable = syncable_cb ,
830
+ .started = broadcast_sink_started_cb ,
831
+ .stopped = broadcast_sink_stopped_cb ,
824
832
};
825
833
826
834
static void pa_timer_handler (struct k_work * work )
@@ -1027,8 +1035,6 @@ static int bis_sync_req_cb(struct bt_conn *conn,
1027
1035
1028
1036
return err ;
1029
1037
}
1030
-
1031
- k_sem_give (& sem_broadcast_sink_stopped );
1032
1038
}
1033
1039
1034
1040
broadcaster_broadcast_id = recv_state -> broadcast_id ;
@@ -1242,7 +1248,7 @@ static void bap_pa_sync_terminated_cb(struct bt_le_per_adv_sync *sync,
1242
1248
if (info -> reason != BT_HCI_ERR_LOCALHOST_TERM_CONN && req_recv_state != NULL ) {
1243
1249
int err ;
1244
1250
1245
- if (k_sem_count_get ( & sem_stream_connected ) > 0 ) {
1251
+ if (big_synced ) {
1246
1252
err = bt_bap_broadcast_sink_stop (broadcast_sink );
1247
1253
if (err != 0 ) {
1248
1254
printk ("Failed to stop Broadcast Sink: %d\n" , err );
@@ -1257,8 +1263,6 @@ static void bap_pa_sync_terminated_cb(struct bt_le_per_adv_sync *sync,
1257
1263
1258
1264
return ;
1259
1265
}
1260
-
1261
- k_sem_give (& sem_broadcast_sink_stopped );
1262
1266
}
1263
1267
}
1264
1268
}
0 commit comments