From 3abcd16cde4b63d93bf758c6d4dce7a8ba4e6aa4 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Tue, 6 Sep 2022 12:40:27 +0200 Subject: [PATCH] hci: track cis setup --- src/gap.h | 1 + src/hci.c | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/gap.h b/src/gap.h index e77ec0f07..be5a321c3 100644 --- a/src/gap.h +++ b/src/gap.h @@ -318,6 +318,7 @@ typedef struct { uint8_t num_cis; hci_con_handle_t cis_con_handles[MAX_NR_CIS]; hci_con_handle_t acl_con_handles[MAX_NR_CIS]; + bool cis_setup_active[MAX_NR_CIS]; // request to send bool can_send_now_requested; } le_audio_cig_t; diff --git a/src/hci.c b/src/hci.c index cbcb383b4..4663b928a 100644 --- a/src/hci.c +++ b/src/hci.c @@ -243,7 +243,8 @@ static void hci_emit_big_terminated(const le_audio_big_t * big); static void hci_emit_big_sync_created(const le_audio_big_sync_t * big_sync, uint8_t status); static void hci_emit_big_sync_stopped(uint8_t big_handle); static void hci_emit_cig_created(const le_audio_cig_t * cig, uint8_t status); -static void hci_emit_cis_created(const le_audio_cig_t * cig, uint8_t cis_index, uint8_t status); +static void +hci_emit_cis_created(uint8_t cig_id, hci_con_handle_t cis_con_handle, uint8_t status); static le_audio_big_sync_t * hci_big_sync_for_handle(uint8_t big_handle); #endif /* ENABLE_LE_ISOCHRONOUS_STREAMS */ #endif /* ENABLE_BLE */ @@ -3977,6 +3978,7 @@ static void event_handler(uint8_t *packet, uint16_t size){ iso_stream = hci_iso_stream_for_con_handle(handle); if (iso_stream){ uint8_t status = hci_subevent_le_cis_established_get_status(packet); + uint8_t cig_id = iso_stream->group_id; if (status == ERROR_CODE_SUCCESS){ iso_stream->state = HCI_ISO_STREAM_STATE_ESTABLISHED; } else { @@ -3984,12 +3986,13 @@ static void event_handler(uint8_t *packet, uint16_t size){ } // CIG/CIS if (iso_stream->iso_type == HCI_ISO_TYPE_CIS){ - le_audio_cig_t * cig = hci_cig_for_id(iso_stream->group_id); + le_audio_cig_t * cig = hci_cig_for_id(cig_id); if (cig){ uint8_t i; for (i=0;inum_cis;i++){ if (cig->cis_con_handles[i] == handle){ - hci_emit_cis_created(cig, i, status); + cig->cis_setup_active[i] = false; + hci_emit_cis_created(cig_id, handle, status); } } } @@ -6368,6 +6371,9 @@ static bool hci_run_iso_tasks(void){ hci_stack->iso_active_operation_group_id = cig->params->cig_id; hci_stack->iso_active_operation_type = HCI_ISO_TYPE_CIS; cig->state = LE_AUDIO_CIG_STATE_W4_CREATE_CIS; + for (i=0;inum_cis;i++){ + cig->cis_setup_active[i] = true; + } hci_send_cmd(&hci_le_create_cis, cig->num_cis, cig->cis_con_handles, cig->acl_con_handles); return true; default: @@ -9217,15 +9223,16 @@ static void hci_emit_cig_created(const le_audio_cig_t * cig, uint8_t status){ hci_emit_event(event, pos, 0); } -static void hci_emit_cis_created(const le_audio_cig_t * cig, uint8_t cis_index, uint8_t status){ +static void +hci_emit_cis_created(uint8_t cig_id, hci_con_handle_t cis_con_handle, uint8_t status) { uint8_t event [7]; uint16_t pos = 0; event[pos++] = HCI_EVENT_META_GAP; event[pos++] = 5; event[pos++] = GAP_SUBEVENT_CIS_CREATED; event[pos++] = status; - event[pos++] = cig->cig_id; - little_endian_store_16(event, pos, cig->cis_con_handles[cis_index]); + event[pos++] = cig_id; + little_endian_store_16(event, pos, cis_con_handle); pos += 2; hci_emit_event(event, pos, 0); }