Bluetooth: controller: Return current ADI when updating aux

When aux is upated, DID is changed and unlike SID it's only stored in
aux PDU. To allow quick access to new DID value, let's just optionally
return current ADI value after aux was updated. It will be useful e.g.
when updating scan response data if we want to put ADI there.

Signed-off-by: Andrzej Kaczmarek <andrzej.kaczmarek@codecoup.pl>
This commit is contained in:
Andrzej Kaczmarek 2020-08-28 12:43:57 +02:00 committed by Carles Cufí
commit 1b1ab16a64
4 changed files with 12 additions and 8 deletions

View file

@ -482,7 +482,7 @@ uint8_t ll_adv_params_set(uint16_t interval, uint8_t adv_type,
if (pri_hdr->aux_ptr) {
uint8_t err;
err = ull_adv_aux_hdr_set_clear(adv, 0, 0, NULL);
err = ull_adv_aux_hdr_set_clear(adv, 0, 0, NULL, NULL);
if (err) {
/* TODO: cleanup? */
return err;
@ -1139,7 +1139,7 @@ uint8_t ll_adv_enable(uint8_t enable)
/* Add sync_info into auxiliary PDU */
ret = ull_adv_aux_hdr_set_clear(adv,
ULL_ADV_PDU_HDR_FIELD_SYNC_INFO,
0, NULL);
0, NULL, NULL);
if (ret) {
return ret;
}

View file

@ -120,7 +120,7 @@ uint8_t ll_adv_aux_ad_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref, ui
*val_ptr++ = len;
*((uint32_t *)val_ptr) = (uint32_t)data;
err = ull_adv_aux_hdr_set_clear(adv, ULL_ADV_PDU_HDR_FIELD_AD_DATA,
0, value);
0, value, NULL);
if (err) {
return err;
}
@ -262,7 +262,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);
err = ull_adv_aux_hdr_set_clear(adv, 0, 0, NULL, NULL);
if (err) {
return err;
}
@ -368,7 +368,7 @@ int ull_adv_aux_reset(void)
uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
uint16_t sec_hdr_add_fields,
uint16_t sec_hdr_rem_fields,
void *value)
void *value, struct pdu_adv_adi *adi)
{
struct pdu_adv_com_ext_adv *pri_com_hdr, *pri_com_hdr_prev;
struct pdu_adv_com_ext_adv *sec_com_hdr, *sec_com_hdr_prev;
@ -692,6 +692,10 @@ uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
pri_adi->did = sys_cpu_to_le16(did);
sec_adi->did = sys_cpu_to_le16(did);
if (adi) {
*adi = *pri_adi;
}
}
/* No CTEInfo field in primary channel PDU */

View file

@ -86,7 +86,7 @@ void ull_adv_aux_offset_get(struct ll_adv_set *adv);
uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
uint16_t sec_hdr_add_fields,
uint16_t sec_hdr_rem_fields,
void *value);
void *value, struct pdu_adv_adi *adi);
/* helper function to calculate common ext adv payload header length */
static inline uint8_t

View file

@ -198,7 +198,7 @@ uint8_t ll_adv_sync_enable(uint8_t handle, uint8_t enable)
/* Remove sync_info from auxiliary PDU */
err = ull_adv_aux_hdr_set_clear(adv, 0,
ULL_ADV_PDU_HDR_FIELD_SYNC_INFO,
NULL);
NULL, NULL);
if (err) {
return err;
}
@ -239,7 +239,7 @@ uint8_t ll_adv_sync_enable(uint8_t handle, uint8_t enable)
/* Add sync_info into auxiliary PDU */
err = ull_adv_aux_hdr_set_clear(adv,
ULL_ADV_PDU_HDR_FIELD_SYNC_INFO,
0, NULL);
0, NULL, NULL);
if (err) {
return err;
}