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);
 }