Skip to content

Commit c5a2130

Browse files
committed
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 <[email protected]>
1 parent 13be5a7 commit c5a2130

File tree

4 files changed

+47
-6
lines changed

4 files changed

+47
-6
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Reduce from 310 bytes, in nrf5340_cpunet_iso-bt_ll_sw_split.conf
2+
# to be able to fit in 64KB RAM.
3+
CONFIG_BT_ISO_TX_MTU=247
4+
CONFIG_BT_ISO_RX_MTU=251

samples/bluetooth/hci_ipc/sample.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ tests:
8787
tags: bluetooth
8888
extra_args:
8989
- CONF_FILE="nrf5340_cpunet_iso-bt_ll_sw_split.conf"
90+
- EXTRA_CONF_FILE="overlay-nrf5340_cpunet_iso_nrf21540_ek-bt_ll_sw_split.conf"
9091
- DTC_OVERLAY_FILE="./boards/nrf5340_audio_dk_nrf5340_cpunet_nrf21540_ek.overlay"
9192
platform_allow:
9293
- nrf5340_audio_dk/nrf5340/cpunet

subsys/bluetooth/controller/Kconfig.ll_sw_split

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,17 @@ config BT_CTLR_ADV_RESERVE_MAX
437437
corresponding to the Advertising Data present at the time of the
438438
start/enable of Advertising is used.
439439

440+
config BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT
441+
bool "Drift Extended Advertising Auxiliary PDUs within a slot window"
442+
depends on BT_TICKER_EXT && \
443+
BT_BROADCASTER && \
444+
BT_CTLR_ADV_EXT
445+
default y if BT_CTLR_SYNC_ISO || BT_CTLR_CONN_ISO
446+
help
447+
Drift Extended Advertising Auxiliary PDUs within a slot window to
448+
avoid overlapping with other periodically scheduled states/roles; and
449+
be placed before or after such overlapping states/roles.
450+
440451
config BT_CTLR_ADV_ISO_RESERVE_MAX
441452
bool "Use maximum Broadcast ISO event time reservation"
442453
depends on BT_CTLR_ADV_ISO

subsys/bluetooth/controller/ll_sw/ull_adv_aux.c

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,18 @@ static void ticker_cb(uint32_t ticks_at_expire, uint32_t ticks_drift,
7171
static struct ll_adv_aux_set ll_adv_aux_pool[CONFIG_BT_CTLR_ADV_AUX_SET];
7272
static void *adv_aux_free;
7373

74-
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
74+
#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT) || \
75+
(defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
76+
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO))
77+
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
78+
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
7579
static void ticker_update_op_cb(uint32_t status, void *param);
80+
#endif /* CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
7681

7782
static struct ticker_ext ll_adv_aux_ticker_ext[CONFIG_BT_CTLR_ADV_AUX_SET];
78-
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
83+
#endif /* CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT ||
84+
* (CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
85+
*/
7986
#endif /* (CONFIG_BT_CTLR_ADV_AUX_SET > 0) */
8087

8188
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,
26002607
aux_handle = ull_adv_aux_handle_get(aux);
26012608
interval_us = aux->interval * PERIODIC_INT_UNIT_US;
26022609

2610+
#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT)
2611+
ll_adv_aux_ticker_ext[aux_handle].ticks_slot_window =
2612+
ULL_ADV_RANDOM_DELAY + aux->ull.ticks_slot;
2613+
ll_adv_aux_ticker_ext[aux_handle].is_drift_in_window = 1U;
2614+
#endif /* CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT */
2615+
26032616
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
26042617
if (aux->lll.adv->sync) {
26052618
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,
26122625
}
26132626

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

2630+
#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT) || \
2631+
(defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
2632+
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO))
26162633
ret_cb = TICKER_STATUS_BUSY;
26172634
ret = ticker_start_ext(
2618-
#else /* !CONFIG_BT_CTLR_ADV_PERIODIC || !CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
2635+
#else /* !CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT &&
2636+
* !(CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
2637+
*/
26192638

26202639
ret_cb = TICKER_STATUS_BUSY;
26212640
ret = ticker_start(
2622-
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC || !CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
2641+
#endif /* !CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT &&
2642+
* !(CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
2643+
*/
26232644
TICKER_INSTANCE_ID_CTLR, TICKER_USER_ID_THREAD,
26242645
(TICKER_ID_ADV_AUX_BASE + aux_handle),
26252646
ticks_anchor, 0U,
@@ -2628,10 +2649,14 @@ uint32_t ull_adv_aux_start(struct ll_adv_aux_set *aux, uint32_t ticks_anchor,
26282649
(aux->ull.ticks_slot + ticks_slot_overhead),
26292650
ticker_cb, aux,
26302651
ull_ticker_status_give, (void *)&ret_cb
2631-
#if defined(CONFIG_BT_CTLR_ADV_PERIODIC) && defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
2652+
#if defined(CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT) || \
2653+
(defined(CONFIG_BT_CTLR_ADV_PERIODIC) && \
2654+
defined(CONFIG_BT_TICKER_EXT_EXPIRE_INFO))
26322655
,
26332656
&ll_adv_aux_ticker_ext[aux_handle]
2634-
#endif /* !CONFIG_BT_CTLR_ADV_PERIODIC || !CONFIG_BT_TICKER_EXT_EXPIRE_INFO */
2657+
#endif /* CONFIG_BT_CTLR_ADV_AUX_SLOT_WINDOW_DRIFT ||
2658+
* (CONFIG_BT_CTLR_ADV_PERIODIC && CONFIG_BT_TICKER_EXT_EXPIRE_INFO)
2659+
*/
26352660
);
26362661
ret = ull_ticker_status_take(ret, &ret_cb);
26372662

0 commit comments

Comments
 (0)