1
0
mirror of https://github.com/bluekitchen/btstack.git synced 2025-04-02 07:20:16 +00:00

test/le_audio: implement pa_sync changes in broadcast sink

This commit is contained in:
Matthias Ringwald 2023-11-21 15:49:49 +01:00
parent db75eafdfd
commit 02631e972d

@ -641,24 +641,17 @@ static void broadcast_sync_pa_sync_timeout_handler(btstack_timer_source_t * ts){
broadcast_audio_scan_service_server_set_pa_sync_state(0, LE_AUDIO_PA_SYNC_STATE_NO_PAST); broadcast_audio_scan_service_server_set_pa_sync_state(0, LE_AUDIO_PA_SYNC_STATE_NO_PAST);
} }
static void bass_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ static void handle_new_pa_sync(uint8_t source_id, le_audio_pa_sync_t pa_sync) {
UNUSED(packet_type); switch (pa_sync){
UNUSED(channel); case LE_AUDIO_PA_SYNC_DO_NOT_SYNCHRONIZE_TO_PA:
btstack_assert (packet_type == HCI_EVENT_PACKET); printf("Stop PA Sync\n");
btstack_assert(hci_event_packet_get_type(packet) == HCI_EVENT_GATTSERVICE_META); stop_pa_sync();
uint8_t source_id; bass_sources[0].data.subgroups[0].bis_sync_state = 0;
printf("BASS Event 0x%02x: ", hci_event_gattservice_meta_get_subevent_code(packet)); broadcast_audio_scan_service_server_set_pa_sync_state(0, LE_AUDIO_PA_SYNC_STATE_NOT_SYNCHRONIZED_TO_PA);
printf_hexdump(packet, size); break;
switch (hci_event_gattservice_meta_get_subevent_code(packet)){
case GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_ADDED:
source_id = gattservice_subevent_bass_server_source_added_get_source_id(packet);
printf("GATTSERVICE_SUBEVENT_BASS_SOURCE_ADDED, source_id 0x%04x, pa_sync %u\n",
source_id,
gattservice_subevent_bass_server_source_added_get_pa_sync(packet));
switch (gattservice_subevent_bass_server_source_added_get_pa_sync(packet)){
case LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE: case LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE:
printf("LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE -> Request SyncInfo\n"); printf("LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE -> Request SyncInfo\n");
broadcast_audio_scan_service_server_set_pa_sync_state(0, LE_AUDIO_PA_SYNC_STATE_SYNCINFO_REQUEST); broadcast_audio_scan_service_server_set_pa_sync_state(source_id, LE_AUDIO_PA_SYNC_STATE_SYNCINFO_REQUEST);
// start timeout // start timeout
btstack_run_loop_set_timer_handler(&broadcast_sink_pa_sync_timer, broadcast_sync_pa_sync_timeout_handler); btstack_run_loop_set_timer_handler(&broadcast_sink_pa_sync_timer, broadcast_sync_pa_sync_timeout_handler);
btstack_run_loop_set_timer(&broadcast_sink_pa_sync_timer, 10000); // 10 seconds btstack_run_loop_set_timer(&broadcast_sink_pa_sync_timer, 10000); // 10 seconds
@ -668,20 +661,32 @@ static void bass_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t
printf("LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE -> Start Periodic Advertising Sync\n"); printf("LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE -> Start Periodic Advertising Sync\n");
start_pa_sync(bass_sources[source_id].data.address_type, bass_sources[source_id].data.address); start_pa_sync(bass_sources[source_id].data.address_type, bass_sources[source_id].data.address);
break; break;
default:
break;
} }
}
static void bass_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
UNUSED(packet_type);
UNUSED(channel);
btstack_assert (packet_type == HCI_EVENT_PACKET);
btstack_assert(hci_event_packet_get_type(packet) == HCI_EVENT_GATTSERVICE_META);
uint8_t source_id;
printf("BASS Event 0x%02x: ", hci_event_gattservice_meta_get_subevent_code(packet));
printf_hexdump(packet, size);
uint8_t pa_sync;
switch (hci_event_gattservice_meta_get_subevent_code(packet)){
case GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_ADDED:
pa_sync = gattservice_subevent_bass_server_source_added_get_pa_sync(packet);
source_id = gattservice_subevent_bass_server_source_added_get_source_id(packet);
printf("GATTSERVICE_SUBEVENT_BASS_SOURCE_ADDED, source_id 0x%04x, pa_sync %u\n", source_id, pa_sync);
handle_new_pa_sync(source_id, pa_sync);
break; break;
case GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_MODIFIED: case GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_MODIFIED:
printf("GATTSERVICE_SUBEVENT_BASS_SOURCE_MODIFIED, source_id 0x%04x, pa_sync %u\n", pa_sync = gattservice_subevent_bass_server_source_added_get_pa_sync(packet);
gattservice_subevent_bass_server_source_added_get_source_id(packet), source_id = gattservice_subevent_bass_server_source_added_get_source_id(packet);
gattservice_subevent_bass_server_source_added_get_pa_sync(packet)); printf("GATTSERVICE_SUBEVENT_BASS_SOURCE_MODIFIED, source_id 0x%04x, pa_sync %u\n", source_id, pa_sync);
// handle 'bis sync == 0' handle_new_pa_sync(source_id, pa_sync);
printf("PA Sync %u, bis_sync[0] = %u\n", bass_sources[0].data.pa_sync, bass_sources[0].data.subgroups[0].bis_sync);
if (bass_sources[0].data.subgroups[0].bis_sync == 0){
printf("Stop PA Sync\n");
stop_pa_sync();
bass_sources[0].data.subgroups[0].bis_sync_state = 0;
broadcast_audio_scan_service_server_set_pa_sync_state(0, LE_AUDIO_PA_SYNC_STATE_NOT_SYNCHRONIZED_TO_PA);
}
break; break;
case GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_DELETED: case GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_DELETED:
printf("GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_DELETED, source_id 0x%04x\n", printf("GATTSERVICE_SUBEVENT_BASS_SERVER_SOURCE_DELETED, source_id 0x%04x\n",