Bluetooth: controller: Add ADI support in AUX_SCAN_RSP

ADI field is optional in AUX_SCAN_RSP so by default it's disabled, but
now we'll have an option to include it.

Signed-off-by: Andrzej Kaczmarek <andrzej.kaczmarek@codecoup.pl>
This commit is contained in:
Andrzej Kaczmarek 2020-08-28 14:04:13 +02:00 committed by Carles Cufí
commit d8864d44f4
2 changed files with 17 additions and 3 deletions

View file

@ -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

View file

@ -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;
}