Skip to content

Commit

Permalink
Bluetooth: Controller: Ext Adv Auxiliary PDUs with ticks_slot_window
Browse files Browse the repository at this point in the history
Add implementation for Extended Advertising Auxiliary PDUs
to use ticks slot window feature.

Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
  • Loading branch information
cvinayak committed Aug 31, 2024
1 parent c0d1029 commit 26363ee
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 6 deletions.
7 changes: 7 additions & 0 deletions subsys/bluetooth/controller/Kconfig.ll_sw_split
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,13 @@ config BT_CTLR_ADV_RESERVE_MAX
corresponding to the Advertising Data present at the time of the
start/enable of Advertising is used.

config BT_CTLR_ADV_AUX_SLOT_WINDOW
bool "Reschedule Extended Advertising Auxiliary PDUs"
depends on BT_BROADCASTER && BT_CTLR_ADV_EXT
select BT_TICKER_EXT
help
Reschedule Extended Advertising Auxiliary PDUs.

config BT_CTLR_ADV_ISO_RESERVE_MAX
bool "Use maximum Broadcast ISO event time reservation"
depends on BT_CTLR_ADV_ISO
Expand Down
36 changes: 30 additions & 6 deletions subsys/bluetooth/controller/ll_sw/ull_adv_aux.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,18 @@ static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
static struct ll_adv_aux_set ll_adv_aux_pool[CONFIG_BT_CTLR_ADV_AUX_SET];
static void *adv_aux_free;

#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW) || \
(defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO))
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
static void ticker_update_op_cb(uint32_t status, void *param);
#endif /* CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO */

static struct ticker_ext ll_adv_aux_ticker_ext[CONFIG_BT_CTLR_ADV_AUX_SET];
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
#endif /* CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW ||
* (CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
*/
#endif /* (CONFIG_BT_CTLR_ADV_AUX_SET > 0) */

static uint16_t did_unique[PDU_ADV_SID_COUNT];
Expand Down Expand Up @@ -2600,6 +2607,11 @@ uint32_t ull_adv_aux_start(struct ll_adv_aux_set *aux, uint32_t ticks_anchor,
aux_handle = ull_adv_aux_handle_get(aux);
interval_us = aux->interval * PERIODIC_INT_UNIT_US;

#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW)
ll_adv_aux_ticker_ext[aux_handle].ticks_slot_window =
ULL_ADV_RANDOM_DELAY + aux->ull.ticks_slot;
#endif /* CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW */

#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
if (aux->lll.adv->sync) {
const struct ll_adv_sync_set *sync = HDR_LLL2ULL(aux->lll.adv->sync);
Expand All @@ -2612,14 +2624,22 @@ uint32_t ull_adv_aux_start(struct ll_adv_aux_set *aux, uint32_t ticks_anchor,
}

ll_adv_aux_ticker_ext[aux_handle].ext_timeout_func = ticker_cb;
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC || !CONFIG_BT_TICKER_EXT_EXPIRE_INFO */

#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW) || \
(defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO))
ret_cb = TICKER_STATUS_BUSY;
ret = ticker_start_ext(
#else /* !CONFIG_BT_CTLR_ADV_PERIODIC || !CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
#else /* !CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW &&
* !(CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
*/

ret_cb = TICKER_STATUS_BUSY;
ret = ticker_start(
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC || !CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
#endif /* !CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW &&
* !(CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
*/
TICKER_INSTANCE_ID_CTLR, TICKER_USER_ID_THREAD,
(TICKER_ID_ADV_AUX_BASE + aux_handle),
ticks_anchor, 0U,
Expand All @@ -2628,10 +2648,14 @@ uint32_t ull_adv_aux_start(struct ll_adv_aux_set *aux, uint32_t ticks_anchor,
(aux->ull.ticks_slot + ticks_slot_overhead),
ticker_cb, aux,
ull_ticker_status_give, (void *)&ret_cb
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW) || \
(defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO))
,
&ll_adv_aux_ticker_ext[aux_handle]
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC || !CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
#endif /* CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW ||
* (CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
*/
);
ret = ull_ticker_status_take(ret, &ret_cb);

Expand Down

0 comments on commit 26363ee

Please sign in to comment.