nimble/controller: Add access address constraints for LE Coded PHY
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/1f5c04d2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/1f5c04d2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/1f5c04d2 Branch: refs/heads/bluetooth5 Commit: 1f5c04d24b144de3cbccfa422ca7f26a2641f261 Parents: b07f4a7 Author: Andrzej Kaczmarek <[email protected]> Authored: Wed May 10 17:58:23 2017 +0200 Committer: Andrzej Kaczmarek <[email protected]> Committed: Wed May 17 11:56:17 2017 +0200 ---------------------------------------------------------------------- net/nimble/controller/src/ble_ll_conn.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1f5c04d2/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 2aefdcd..f6a7379 100644 --- a/net/nimble/controller/src/ble_ll_conn.c +++ b/net/nimble/controller/src/ble_ll_conn.c @@ -531,6 +531,7 @@ ble_ll_conn_calc_access_addr(void) uint8_t bits_diff; uint8_t consecutive; uint8_t transitions; + uint8_t ones; /* Calculate a random access address */ aa = 0; @@ -570,6 +571,7 @@ ble_ll_conn_calc_access_addr(void) /* Cannot have more than 24 transitions */ transitions = 0; consecutive = 0; + ones = 0; mask = 0x00000001; while (mask < 0x80000000) { prev_bit = aa & mask; @@ -590,14 +592,33 @@ ble_ll_conn_calc_access_addr(void) } } + if (prev_bit) { + ones++; + } + + /* 8 lsb should have at least three 1 */ + if (mask == 0x00000100 && ones < 3) { + break; + } + + /* 16 lsb should have no more than 11 transitions */ + if (mask == 0x00010000 && transitions > 11) { + break; + } + /* This is invalid! */ if (consecutive > 6) { break; } } + /* Invalid sequence found */ + if (mask != 0x80000000) { + continue; + } + /* Cannot be more than 24 transitions */ - if ((consecutive > 6) || (transitions > 24)) { + if (transitions > 24) { continue; }
