Bluetooth: Controller: Ext Adv Auxiliary PDUs with ticks_slot_window
Add implementation for Extended Advertising Auxiliary PDUs to use ticks slot window feature. This will allow the periodic scheduling of AUX_ADV_IND PDUs to drift upto 10 ms advertising delay minus the ticks_slot time reservation of the AUX_ADV_IND PDU when overlapping with other states/roles that cannot be moved around, to avoid skipping them. Having an active Extended Advertising simultaneously with an ISO Synchronized Receiver or Connected ISO connection will now have less ISO SDU loss when using 10 ms ISO intervals. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
b838b17755
commit
9df4b548ba
4 changed files with 47 additions and 6 deletions
|
|
@ -0,0 +1,4 @@
|
|||
# Reduce from 310 bytes, in nrf5340_cpunet_iso-bt_ll_sw_split.conf
|
||||
# to be able to fit in 64KB RAM.
|
||||
CONFIG_BT_ISO_TX_MTU=247
|
||||
CONFIG_BT_ISO_RX_MTU=251
|
||||
|
|
@ -87,6 +87,7 @@ tests:
|
|||
tags: bluetooth
|
||||
extra_args:
|
||||
- CONF_FILE="nrf5340_cpunet_iso-bt_ll_sw_split.conf"
|
||||
- EXTRA_CONF_FILE="overlay-nrf5340_cpunet_iso_nrf21540_ek-bt_ll_sw_split.conf"
|
||||
- DTC_OVERLAY_FILE="./boards/nrf5340_audio_dk_nrf5340_cpunet_nrf21540_ek.overlay"
|
||||
platform_allow:
|
||||
- nrf5340_audio_dk/nrf5340/cpunet
|
||||
|
|
|
|||
|
|
@ -437,6 +437,17 @@ 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_DRIFT
|
||||
bool "Drift Extended Advertising Auxiliary PDUs within a slot window"
|
||||
depends on BT_TICKER_EXT && \
|
||||
BT_BROADCASTER && \
|
||||
BT_CTLR_ADV_EXT
|
||||
default y if BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
|
||||
help
|
||||
Drift Extended Advertising Auxiliary PDUs within a slot window to
|
||||
avoid overlapping with other periodically scheduled states/roles; and
|
||||
be placed before or after such overlapping states/roles.
|
||||
|
||||
config BT_CTLR_ADV_ISO_RESERVE_MAX
|
||||
bool "Use maximum Broadcast ISO event time reservation"
|
||||
depends on BT_CTLR_ADV_ISO
|
||||
|
|
|
|||
|
|
@ -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_DRIFT) || \
|
||||
(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_DRIFT ||
|
||||
* (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];
|
||||
|
|
@ -2600,6 +2607,12 @@ 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_DRIFT)
|
||||
ll_adv_aux_ticker_ext[aux_handle].ticks_slot_window =
|
||||
ULL_ADV_RANDOM_DELAY + aux->ull.ticks_slot;
|
||||
ll_adv_aux_ticker_ext[aux_handle].is_drift_in_window = 1U;
|
||||
#endif /* CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT */
|
||||
|
||||
#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);
|
||||
|
|
@ -2612,14 +2625,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_DRIFT) || \
|
||||
(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_DRIFT &&
|
||||
* !(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_DRIFT &&
|
||||
* !(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,
|
||||
|
|
@ -2628,10 +2649,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_DRIFT) || \
|
||||
(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_DRIFT ||
|
||||
* (CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
|
||||
*/
|
||||
);
|
||||
ret = ull_ticker_status_take(ret, &ret_cb);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue