mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-14 01:27:41 +00:00
hci: track cis setup
This commit is contained in:
parent
f43072f38b
commit
3abcd16cde
@ -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;
|
||||
|
19
src/hci.c
19
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;i<cig->num_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;i<cig->num_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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user