Skip to content

Commit 60730eb

Browse files
cvinayaknashif
authored andcommitted
Bluetooth: controller: Move connection event length calculation
Move the initial connection event length calculation to when initiating connection so that initiator with advanced scheduling to place central connections in a non-overlapping timeline has the correct ticks slot value available. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent 1364a9c commit 60730eb

File tree

1 file changed

+27
-20
lines changed

1 file changed

+27
-20
lines changed

subsys/bluetooth/controller/ll_sw/ull_master.c

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ uint8_t ll_create_connection(uint16_t scan_interval, uint16_t scan_window,
7171
struct lll_conn *conn_lll;
7272
struct ll_scan_set *scan;
7373
uint32_t conn_interval_us;
74+
uint32_t ready_delay_us;
7475
struct lll_scan *lll;
7576
struct ll_conn *conn;
7677
memq_link_t *link;
@@ -291,6 +292,24 @@ uint8_t ll_create_connection(uint16_t scan_interval, uint16_t scan_window,
291292
conn->tx_head = conn->tx_ctrl = conn->tx_ctrl_last =
292293
conn->tx_data = conn->tx_data_last = 0;
293294

295+
#if defined(CONFIG_BT_CTLR_PHY)
296+
ready_delay_us = lll_radio_tx_ready_delay_get(conn_lll->phy_tx,
297+
conn_lll->phy_flags);
298+
#else
299+
ready_delay_us = lll_radio_tx_ready_delay_get(0, 0);
300+
#endif
301+
302+
/* TODO: active_to_start feature port */
303+
conn->evt.ticks_active_to_start = 0U;
304+
conn->evt.ticks_xtal_to_start =
305+
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
306+
conn->evt.ticks_preempt_to_start =
307+
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
308+
conn->evt.ticks_slot =
309+
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
310+
ready_delay_us +
311+
328 + EVENT_IFS_US + 328);
312+
294313
lll->conn = conn_lll;
295314

296315
ull_hdr_init(&conn->ull);
@@ -546,7 +565,6 @@ void ull_master_setup(memq_link_t *link, struct node_rx_hdr *rx,
546565
struct pdu_adv *pdu_tx;
547566
struct node_rx_cc *cc;
548567
struct ll_conn *conn;
549-
uint32_t ready_delay_us;
550568
uint8_t peer_addr_type;
551569
uint32_t ticker_status;
552570
uint8_t chan_sel;
@@ -648,24 +666,6 @@ void ull_master_setup(memq_link_t *link, struct node_rx_hdr *rx,
648666
ll_rx_put(link, rx);
649667
ll_rx_sched();
650668

651-
#if defined(CONFIG_BT_CTLR_PHY)
652-
ready_delay_us = lll_radio_tx_ready_delay_get(lll->phy_tx,
653-
lll->phy_flags);
654-
#else
655-
ready_delay_us = lll_radio_tx_ready_delay_get(0, 0);
656-
#endif
657-
658-
/* TODO: active_to_start feature port */
659-
conn->evt.ticks_active_to_start = 0U;
660-
conn->evt.ticks_xtal_to_start =
661-
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_XTAL_US);
662-
conn->evt.ticks_preempt_to_start =
663-
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
664-
conn->evt.ticks_slot =
665-
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_START_US +
666-
ready_delay_us +
667-
328 + EVENT_IFS_US + 328);
668-
669669
ticks_slot_offset = MAX(conn->evt.ticks_active_to_start,
670670
conn->evt.ticks_xtal_to_start);
671671

@@ -679,7 +679,14 @@ void ull_master_setup(memq_link_t *link, struct node_rx_hdr *rx,
679679
conn_offset_us = ftr->radio_end_us;
680680
conn_offset_us += HAL_TICKER_TICKS_TO_US(1);
681681
conn_offset_us -= EVENT_OVERHEAD_START_US;
682-
conn_offset_us -= ready_delay_us;
682+
683+
#if defined(CONFIG_BT_CTLR_PHY)
684+
conn_offset_us -= lll_radio_tx_ready_delay_get(lll->phy_tx,
685+
lll->phy_flags);
686+
#else
687+
conn_offset_us -= lll_radio_tx_ready_delay_get(0, 0);
688+
#endif
689+
683690

684691
#if (CONFIG_BT_CTLR_ULL_HIGH_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
685692
/* disable ticker job, in order to chain stop and start to avoid RTC

0 commit comments

Comments
 (0)