nimble/controller: Use single function for DCI calculation Select CSA #1 or #2 from within ble_ll_conn_calc_dci.
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/6b57da91 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/6b57da91 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/6b57da91 Branch: refs/heads/bluetooth5 Commit: 6b57da91fd474655a8a1e8342b05ae84b0b9e41a Parents: 2227104 Author: Szymon Janc <[email protected]> Authored: Tue Apr 11 11:30:31 2017 +0200 Committer: Szymon Janc <[email protected]> Committed: Tue Apr 11 11:30:31 2017 +0200 ---------------------------------------------------------------------- .../controller/include/controller/ble_ll_conn.h | 2 +- net/nimble/controller/src/ble_ll_conn.c | 20 +++++++++++++------- .../controller/test/src/ble_ll_csa2_test.c | 16 ++++++++++------ 3 files changed, 24 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/6b57da91/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 47b2e48..3267cda 100644 --- a/net/nimble/controller/include/controller/ble_ll_conn.h +++ b/net/nimble/controller/include/controller/ble_ll_conn.h @@ -288,7 +288,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_csa2(struct ble_ll_conn_sm *conn); +uint8_t ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn); #ifdef __cplusplus } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/6b57da91/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 b827182..6d3e5e5 100644 --- a/net/nimble/controller/src/ble_ll_conn.c +++ b/net/nimble/controller/src/ble_ll_conn.c @@ -637,7 +637,7 @@ ble_ll_conn_csa2_prng(uint16_t counter, uint16_t ch_id) return prn_e; } -uint8_t +static uint8_t ble_ll_conn_calc_dci_csa2(struct ble_ll_conn_sm *conn) { uint16_t channel_unmapped; @@ -679,6 +679,10 @@ ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn) 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) { @@ -1571,18 +1575,20 @@ ble_ll_conn_master_init(struct ble_ll_conn_sm *connsm, } static void -ble_ll_conn_set_csa(struct ble_ll_conn_sm *connsm, bool use_csa2) +ble_ll_conn_set_csa(struct ble_ll_conn_sm *connsm, bool chsel) { /* calculate the next data channel */ - if (use_csa2) { + if (chsel) { CONN_F_CSA2_SUPP(connsm) = 1; connsm->channel_id = ((connsm->access_addr & 0xffff0000) >> 16) ^ (connsm->access_addr & 0x0000ffff); - connsm->data_chan_index = ble_ll_conn_calc_dci_csa2(connsm); - } else { - connsm->last_unmapped_chan = 0; + connsm->data_chan_index = ble_ll_conn_calc_dci(connsm); + return; } + + connsm->last_unmapped_chan = 0; + connsm->data_chan_index = ble_ll_conn_calc_dci(connsm); } /** @@ -1944,7 +1950,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_csa2(connsm); + connsm->data_chan_index = ble_ll_conn_calc_dci(connsm); } else { while (latency > 0) { connsm->last_unmapped_chan = connsm->unmapped_chan; http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/6b57da91/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 3cf8101..9ba882c 100644 --- a/net/nimble/controller/test/src/ble_ll_csa2_test.c +++ b/net/nimble/controller/test/src/ble_ll_csa2_test.c @@ -36,6 +36,8 @@ TEST_CASE(ble_ll_csa2_test_1) memset(&conn, 0, sizeof(conn)); + CONN_F_CSA2_SUPP(&conn) = 1; + /* * based on sample data from CoreSpec 5.0 Vol 6 Part C 3.1 * (all channels used) @@ -51,15 +53,15 @@ TEST_CASE(ble_ll_csa2_test_1) conn.chanmap[3] = 0x1f; conn.event_cntr = 1; - rc = ble_ll_conn_calc_dci_csa2(&conn); + rc = ble_ll_conn_calc_dci(&conn); TEST_ASSERT(rc == 20); conn.event_cntr = 2; - rc = ble_ll_conn_calc_dci_csa2(&conn); + rc = ble_ll_conn_calc_dci(&conn); TEST_ASSERT(rc == 6); conn.event_cntr = 3; - rc = ble_ll_conn_calc_dci_csa2(&conn); + rc = ble_ll_conn_calc_dci(&conn); TEST_ASSERT(rc == 21); } @@ -76,6 +78,8 @@ TEST_CASE(ble_ll_csa2_test_2) memset(&conn, 0, sizeof(conn)); + CONN_F_CSA2_SUPP(&conn) = 1; + /* * based on sample data from CoreSpec 5.0 Vol 6 Part C 3.2 * (9 channels used) @@ -91,15 +95,15 @@ TEST_CASE(ble_ll_csa2_test_2) conn.chanmap[4] = 0x1e; conn.event_cntr = 6; - rc = ble_ll_conn_calc_dci_csa2(&conn); + rc = ble_ll_conn_calc_dci(&conn); TEST_ASSERT(rc == 23); conn.event_cntr = 7; - rc = ble_ll_conn_calc_dci_csa2(&conn); + rc = ble_ll_conn_calc_dci(&conn); TEST_ASSERT(rc == 9); conn.event_cntr = 8; - rc = ble_ll_conn_calc_dci_csa2(&conn); + rc = ble_ll_conn_calc_dci(&conn); TEST_ASSERT(rc == 34); }
