diff --git a/subsys/bluetooth/controller/Kconfig.ll_sw_split b/subsys/bluetooth/controller/Kconfig.ll_sw_split index 7dbd1490fb2..82b56f2d2eb 100644 --- a/subsys/bluetooth/controller/Kconfig.ll_sw_split +++ b/subsys/bluetooth/controller/Kconfig.ll_sw_split @@ -158,6 +158,12 @@ config BT_CTLR_ADV_SYNC_SET help Maximum supported periodic advertising sets. +config BT_CTRL_ADV_ADI_IN_SCAN_RSP + bool "Include ADI in AUX_SCAN_RSP PDU" + depends on BT_BROADCASTER && BT_CTLR_ADV_EXT + help + Enable ADI field in AUX_SCAN_RSP PDU + config BT_CTLR_SCAN_AUX_SET int "LE Extended Scanning Auxiliary Sets" depends on BT_OBSERVER && BT_CTLR_ADV_EXT diff --git a/subsys/bluetooth/controller/ll_sw/ull_adv_aux.c b/subsys/bluetooth/controller/ll_sw/ull_adv_aux.c index d26137725ed..445694ecd71 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_adv_aux.c +++ b/subsys/bluetooth/controller/ll_sw/ull_adv_aux.c @@ -165,6 +165,7 @@ uint8_t ll_adv_aux_sr_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref, ui struct pdu_adv_com_ext_adv *sr_com_hdr; struct pdu_adv *pri_pdu_prev; struct pdu_adv_hdr *sr_hdr; + struct pdu_adv_adi *sr_adi; struct pdu_adv *sr_prev; struct pdu_adv *aux_pdu; struct ll_adv_set *adv; @@ -229,9 +230,11 @@ uint8_t ll_adv_aux_sr_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref, ui sr_dptr = (void *)sr_hdr; /* Flags */ - /* TODO: include ADI (optional) */ *sr_dptr = 0; sr_hdr->adv_addr = 1; +#if defined(CONFIG_BT_CTRL_ADV_ADI_IN_SCAN_RSP) + sr_hdr->adi = 1; +#endif sr_dptr++; /* AdvA */ @@ -239,8 +242,13 @@ uint8_t ll_adv_aux_sr_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref, ui BDADDR_SIZE); sr_dptr += BDADDR_SIZE; +#if defined(CONFIG_BT_CTRL_ADV_ADI_IN_SCAN_RSP) /* ADI */ - /* TODO: add support ((optional) */ + sr_adi = (void *)sr_dptr; + sr_dptr += sizeof(struct pdu_adv_adi); +#else + sr_adi = NULL; +#endif /* Check if data will fit in remaining space */ /* TODO: need aux_chain_ind support */ @@ -262,7 +270,7 @@ uint8_t ll_adv_aux_sr_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref, ui sr_pdu->len = sr_dptr - &sr_pdu->payload[0]; /* Trigger DID update */ - err = ull_adv_aux_hdr_set_clear(adv, 0, 0, NULL, NULL); + err = ull_adv_aux_hdr_set_clear(adv, 0, 0, NULL, sr_adi); if (err) { return err; }