Bluetooth: Controller: Fix BIS access address generation

Fix BIS access address generation to follow the requirements
in Bluetooth Core Specification v5.3, Vol 6, PartB, Section
2.1.2 Access Address.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2022-10-15 07:49:40 +05:30 committed by Carles Cufí
commit 990d9a3abe
3 changed files with 14 additions and 5 deletions

View file

@ -105,6 +105,7 @@ uint8_t ll_big_create(uint8_t big_handle, uint8_t adv_handle, uint8_t num_bis,
uint32_t ret; uint32_t ret;
uint8_t err; uint8_t err;
uint8_t bn; uint8_t bn;
int res;
adv_iso = adv_iso_get(big_handle); adv_iso = adv_iso_get(big_handle);
@ -296,7 +297,8 @@ uint8_t ll_big_create(uint8_t big_handle, uint8_t adv_handle, uint8_t num_bis,
lll_adv_iso->sdu_interval = sdu_interval; lll_adv_iso->sdu_interval = sdu_interval;
lll_adv_iso->max_sdu = max_sdu; lll_adv_iso->max_sdu = max_sdu;
util_saa_le32(lll_adv_iso->seed_access_addr, big_handle); res = util_saa_le32(lll_adv_iso->seed_access_addr, big_handle);
LL_ASSERT(!res);
lll_csrand_get(lll_adv_iso->base_crc_init, lll_csrand_get(lll_adv_iso->base_crc_init,
sizeof(lll_adv_iso->base_crc_init)); sizeof(lll_adv_iso->base_crc_init));

View file

@ -219,16 +219,21 @@ again:
} }
#if defined(CONFIG_BT_CTLR_ADV_ISO) #if defined(CONFIG_BT_CTLR_ADV_ISO)
void util_saa_le32(uint8_t *dst, uint8_t handle) int util_saa_le32(uint8_t *dst, uint8_t handle)
{ {
/* Refer to Bluetooth Core Specification Version 5.2 Vol 6, Part B, /* Refer to Bluetooth Core Specification Version 5.2 Vol 6, Part B,
* section 2.1.2 Access Address * section 2.1.2 Access Address
*/ */
uint32_t saa, saa_15, saa_16; uint32_t saa, saa_15, saa_16;
uint8_t bits; uint8_t bits;
int err;
/* Get access address */
err = util_aa_le32(dst);
if (err) {
return err;
}
/* Get random number */
lll_csrand_get(dst, sizeof(uint32_t));
saa = sys_get_le32(dst); saa = sys_get_le32(dst);
/* SAA_19 = SAA_15 */ /* SAA_19 = SAA_15 */
@ -264,6 +269,8 @@ void util_saa_le32(uint8_t *dst, uint8_t handle)
saa |= (handle * 0x03); saa |= (handle * 0x03);
sys_put_le32(saa, dst); sys_put_le32(saa, dst);
return 0;
} }
#endif /* CONFIG_BT_CTLR_ADV_ISO */ #endif /* CONFIG_BT_CTLR_ADV_ISO */

View file

@ -15,5 +15,5 @@
uint8_t util_ones_count_get(const uint8_t *octets, uint8_t octets_len); uint8_t util_ones_count_get(const uint8_t *octets, uint8_t octets_len);
int util_aa_le32(uint8_t *dst); int util_aa_le32(uint8_t *dst);
void util_saa_le32(uint8_t *dst, uint8_t handle); int util_saa_le32(uint8_t *dst, uint8_t handle);
void util_bis_aa_le32(uint8_t bis, uint8_t *saa, uint8_t *dst); void util_bis_aa_le32(uint8_t bis, uint8_t *saa, uint8_t *dst);