You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2017/04/11 22:45:40 UTC
[11/14] incubator-mynewt-core git commit: nimble/controller: Move
latency calculations to ble_ll_conn_calc_dci
nimble/controller: Move latency calculations to ble_ll_conn_calc_dci
This is to localize CSA #2 related code in order for easier compile
time configuration.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/3acdf385
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/3acdf385
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/3acdf385
Branch: refs/heads/bluetooth5
Commit: 3acdf385fa4bfc94081005d359073f0e114825b6
Parents: 6b57da9
Author: Szymon Janc <sz...@codecoup.pl>
Authored: Tue Apr 11 13:39:39 2017 +0200
Committer: Szymon Janc <sz...@codecoup.pl>
Committed: Tue Apr 11 13:39:39 2017 +0200
----------------------------------------------------------------------
.../controller/include/controller/ble_ll_conn.h | 3 +-
net/nimble/controller/src/ble_ll_conn.c | 62 +++++++++++---------
.../controller/test/src/ble_ll_csa2_test.c | 12 ++--
3 files changed, 42 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3acdf385/net/nimble/controller/include/controller/ble_ll_conn.h
----------------------------------------------------------------------
diff --git a/net/nimble/controller/include/controller/ble_ll_conn.h b/net/nimble/controller/include/controller/ble_ll_conn.h
index 3267cda..488b27c 100644
--- a/net/nimble/controller/include/controller/ble_ll_conn.h
+++ b/net/nimble/controller/include/controller/ble_ll_conn.h
@@ -152,7 +152,6 @@ struct ble_ll_conn_sm
uint16_t channel_id; /* TODO could be union with hop and last chan used */
uint8_t hop_inc;
uint8_t data_chan_index;
- uint8_t unmapped_chan;
uint8_t last_unmapped_chan;
uint8_t num_used_chans;
@@ -288,7 +287,7 @@ struct ble_ll_conn_sm
struct ble_ll_conn_sm *ble_ll_conn_find_active_conn(uint16_t handle);
/* required for unit testing */
-uint8_t ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn);
+uint8_t ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn, uint16_t latency);
#ifdef __cplusplus
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3acdf385/net/nimble/controller/src/ble_ll_conn.c
----------------------------------------------------------------------
diff --git a/net/nimble/controller/src/ble_ll_conn.c b/net/nimble/controller/src/ble_ll_conn.c
index 6d3e5e5..9a86bbb 100644
--- a/net/nimble/controller/src/ble_ll_conn.c
+++ b/net/nimble/controller/src/ble_ll_conn.c
@@ -664,33 +664,21 @@ ble_ll_conn_calc_dci_csa2(struct ble_ll_conn_sm *conn)
return ble_ll_conn_remapped_channel(remap_index, conn->chanmap);
}
-/**
- * Determine data channel index to be used for the upcoming/current
- * connection event
- *
- * @param conn
- *
- * @return uint8_t
- */
-uint8_t
-ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn)
+static uint8_t
+ble_ll_conn_calc_dci_csa1(struct ble_ll_conn_sm *conn)
{
uint8_t curchan;
uint8_t remap_index;
uint8_t bitpos;
- if (CONN_F_CSA2_SUPP(conn)) {
- return ble_ll_conn_calc_dci_csa2(conn);
- }
-
/* Get next unmapped channel */
curchan = conn->last_unmapped_chan + conn->hop_inc;
if (curchan > BLE_PHY_NUM_DATA_CHANS) {
curchan -= BLE_PHY_NUM_DATA_CHANS;
}
- /* Set the current unmapped channel */
- conn->unmapped_chan = curchan;
+ /* Save unmapped channel */
+ conn->last_unmapped_chan = curchan;
/* Is this a valid channel? */
bitpos = 1 << (curchan & 0x07);
@@ -705,6 +693,34 @@ ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn)
}
/**
+ * Determine data channel index to be used for the upcoming/current
+ * connection event
+ *
+ * @param conn
+ * @param latency Used only for CSA #1
+ *
+ * @return uint8_t
+ */
+uint8_t
+ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn, uint16_t latency)
+{
+ uint8_t index;
+
+ if (CONN_F_CSA2_SUPP(conn)) {
+ return ble_ll_conn_calc_dci_csa2(conn);
+ }
+
+ index = conn->data_chan_index;
+
+ while (latency > 0) {
+ index = ble_ll_conn_calc_dci_csa1(conn);
+ latency--;
+ }
+
+ return index;
+}
+
+/**
* Called when we are in the connection state and the wait for response timer
* fires off.
*
@@ -1583,12 +1599,12 @@ ble_ll_conn_set_csa(struct ble_ll_conn_sm *connsm, bool chsel)
connsm->channel_id = ((connsm->access_addr & 0xffff0000) >> 16) ^
(connsm->access_addr & 0x0000ffff);
- connsm->data_chan_index = ble_ll_conn_calc_dci(connsm);
+ connsm->data_chan_index = ble_ll_conn_calc_dci(connsm, 0);
return;
}
connsm->last_unmapped_chan = 0;
- connsm->data_chan_index = ble_ll_conn_calc_dci(connsm);
+ connsm->data_chan_index = ble_ll_conn_calc_dci(connsm, 1);
}
/**
@@ -1949,15 +1965,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm)
}
/* Calculate data channel index of next connection event */
- if (CONN_F_CSA2_SUPP(connsm)) {
- connsm->data_chan_index = ble_ll_conn_calc_dci(connsm);
- } else {
- while (latency > 0) {
- connsm->last_unmapped_chan = connsm->unmapped_chan;
- connsm->data_chan_index = ble_ll_conn_calc_dci(connsm);
- --latency;
- }
- }
+ connsm->data_chan_index = ble_ll_conn_calc_dci(connsm, latency);
/*
* If we are trying to terminate connection, check if next wake time is
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3acdf385/net/nimble/controller/test/src/ble_ll_csa2_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/controller/test/src/ble_ll_csa2_test.c b/net/nimble/controller/test/src/ble_ll_csa2_test.c
index 9ba882c..6d199ee 100644
--- a/net/nimble/controller/test/src/ble_ll_csa2_test.c
+++ b/net/nimble/controller/test/src/ble_ll_csa2_test.c
@@ -53,15 +53,15 @@ TEST_CASE(ble_ll_csa2_test_1)
conn.chanmap[3] = 0x1f;
conn.event_cntr = 1;
- rc = ble_ll_conn_calc_dci(&conn);
+ rc = ble_ll_conn_calc_dci(&conn, 0);
TEST_ASSERT(rc == 20);
conn.event_cntr = 2;
- rc = ble_ll_conn_calc_dci(&conn);
+ rc = ble_ll_conn_calc_dci(&conn, 0);
TEST_ASSERT(rc == 6);
conn.event_cntr = 3;
- rc = ble_ll_conn_calc_dci(&conn);
+ rc = ble_ll_conn_calc_dci(&conn, 0);
TEST_ASSERT(rc == 21);
}
@@ -95,15 +95,15 @@ TEST_CASE(ble_ll_csa2_test_2)
conn.chanmap[4] = 0x1e;
conn.event_cntr = 6;
- rc = ble_ll_conn_calc_dci(&conn);
+ rc = ble_ll_conn_calc_dci(&conn, 0);
TEST_ASSERT(rc == 23);
conn.event_cntr = 7;
- rc = ble_ll_conn_calc_dci(&conn);
+ rc = ble_ll_conn_calc_dci(&conn, 0);
TEST_ASSERT(rc == 9);
conn.event_cntr = 8;
- rc = ble_ll_conn_calc_dci(&conn);
+ rc = ble_ll_conn_calc_dci(&conn, 0);
TEST_ASSERT(rc == 34);
}