Skip to content

Commit f4b4f30

Browse files
cvinayakaescolar
authored andcommitted
Bluetooth: Controller: Parse and find BIGInfo to setup ISO sync
Add implementation to parse ACAD and find the BIGInfo before setting up Broadcast ISO Synchronization. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent c8f75de commit f4b4f30

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

subsys/bluetooth/controller/ll_sw/ull_sync_iso.c

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,34 @@ void ull_sync_iso_setup(struct ll_sync_iso_set *sync_iso,
334334
uint32_t ret;
335335
uint8_t sca;
336336

337-
if (acad_len < (PDU_BIG_INFO_CLEARTEXT_SIZE +
338-
PDU_ADV_DATA_HEADER_SIZE)) {
337+
while (acad_len) {
338+
const uint8_t hdr_len = acad[PDU_ADV_DATA_HEADER_LEN_OFFSET];
339+
340+
if ((hdr_len >= PDU_ADV_DATA_HEADER_TYPE_SIZE) &&
341+
(acad[PDU_ADV_DATA_HEADER_TYPE_OFFSET] ==
342+
BT_DATA_BIG_INFO)) {
343+
break;
344+
}
345+
346+
if (acad_len < (hdr_len + PDU_ADV_DATA_HEADER_LEN_SIZE)) {
347+
return;
348+
}
349+
350+
acad_len -= hdr_len + PDU_ADV_DATA_HEADER_LEN_SIZE;
351+
acad += hdr_len + PDU_ADV_DATA_HEADER_LEN_SIZE;
352+
}
353+
354+
if ((acad_len < (PDU_BIG_INFO_CLEARTEXT_SIZE +
355+
PDU_ADV_DATA_HEADER_SIZE)) ||
356+
((acad[PDU_ADV_DATA_HEADER_LEN_OFFSET] !=
357+
(PDU_ADV_DATA_HEADER_TYPE_SIZE + PDU_BIG_INFO_CLEARTEXT_SIZE)) &&
358+
(acad[PDU_ADV_DATA_HEADER_LEN_OFFSET] !=
359+
(PDU_ADV_DATA_HEADER_TYPE_SIZE + PDU_BIG_INFO_ENCRYPTED_SIZE)))) {
339360
return;
340361
}
341362

342-
/* FIXME: Parse and find the BIGInfo */
343-
bi_size = acad[PDU_ADV_DATA_HEADER_LEN_OFFSET];
363+
bi_size = acad[PDU_ADV_DATA_HEADER_LEN_OFFSET] -
364+
PDU_ADV_DATA_HEADER_TYPE_SIZE;
344365
bi = (void *)&acad[PDU_ADV_DATA_HEADER_DATA_OFFSET];
345366

346367
lll = &sync_iso->lll;

0 commit comments

Comments
 (0)