From dd3e8241e91ea5d2b1bcf1bc2a6340cd0f48267c Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Fri, 7 Jun 2019 16:08:51 +0200 Subject: [PATCH] Bluetooth: controller: split: Port random slave event backoff Port the implementation that performed random backoff of forced slave event scheduling. When peer master implementation skips events, multiple local overlapping slaves will randomize their forced scheduling to break out of a round robin pattern increasing the chance of synchronizing with their masters again. Signed-off-by: Vinayak Kariappa Chettimada --- subsys/bluetooth/controller/ll_sw/ull_conn.c | 9 +++------ subsys/bluetooth/controller/ll_sw/ull_conn_types.h | 1 + subsys/bluetooth/controller/ll_sw/ull_slave.c | 7 ++----- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/subsys/bluetooth/controller/ll_sw/ull_conn.c b/subsys/bluetooth/controller/ll_sw/ull_conn.c index d98ec5f01aa..16583984e66 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_conn.c +++ b/subsys/bluetooth/controller/ll_sw/ull_conn.c @@ -1009,16 +1009,13 @@ void ull_conn_done(struct node_rx_event_done *done) if (latency_event) { force = 1U; } else { - /* FIXME:*/ - #if 0 - force = lll->slave.force & 0x01; + force = conn->slave.force & 0x01; /* rotate force bits */ - lll->slave.force >>= 1; + conn->slave.force >>= 1; if (force) { - lll->slave.force |= BIT(31); + conn->slave.force |= BIT(31); } - #endif } } } else { diff --git a/subsys/bluetooth/controller/ll_sw/ull_conn_types.h b/subsys/bluetooth/controller/ll_sw/ull_conn_types.h index 2ecfd2ab7df..5053e37d883 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_conn_types.h +++ b/subsys/bluetooth/controller/ll_sw/ull_conn_types.h @@ -37,6 +37,7 @@ struct ll_conn { struct { u8_t fex_valid:1; + u32_t force; u32_t ticks_to_offset; } slave; diff --git a/subsys/bluetooth/controller/ll_sw/ull_slave.c b/subsys/bluetooth/controller/ll_sw/ull_slave.c index 46d92f7b810..d1f1fce885b 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_slave.c +++ b/subsys/bluetooth/controller/ll_sw/ull_slave.c @@ -116,11 +116,8 @@ void ull_slave_setup(memq_link_t *link, struct node_rx_hdr *rx, conn->apto_reload; #endif /* CONFIG_BT_CTLR_LE_PING */ - /* FIXME: */ - #if 0 - memcpy((void *)&lll->slave.force, &lll->access_addr[0], - sizeof(lll->slave.force)); - #endif + memcpy((void *)&conn->slave.force, &lll->access_addr[0], + sizeof(conn->slave.force)); #if defined(CONFIG_BT_CTLR_PRIVACY) u8_t own_addr_type = pdu_adv->rx_addr;