This is an automated email from the ASF dual-hosted git repository. andk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit a7861f3c24c67a16d24cd169454ae9904bac743c Author: Andrzej Kaczmarek <[email protected]> AuthorDate: Sat Feb 26 21:36:21 2022 +0100 nimble/ll: Add helper to calculate Seed AA --- .../controller/include/controller/ble_ll_utils.h | 1 + nimble/controller/src/ble_ll_utils.c | 39 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/nimble/controller/include/controller/ble_ll_utils.h b/nimble/controller/include/controller/ble_ll_utils.h index added990..5739e046 100644 --- a/nimble/controller/include/controller/ble_ll_utils.h +++ b/nimble/controller/include/controller/ble_ll_utils.h @@ -29,6 +29,7 @@ #define IN_RANGE(_n, _min, _max) (((_n) >= (_min)) && ((_n) <= (_max))) uint32_t ble_ll_utils_calc_access_addr(void); +uint32_t ble_ll_utils_calc_seed_aa(void); uint8_t ble_ll_utils_remapped_channel(uint8_t remap_index, const uint8_t *chanmap); uint8_t ble_ll_utils_dci_csa2(uint16_t counter, uint16_t chan_id, uint8_t num_used_chans, const uint8_t *chan_map); diff --git a/nimble/controller/src/ble_ll_utils.c b/nimble/controller/src/ble_ll_utils.c index a2507ad2..1c65a7cf 100644 --- a/nimble/controller/src/ble_ll_utils.c +++ b/nimble/controller/src/ble_ll_utils.c @@ -144,6 +144,45 @@ ble_ll_utils_calc_access_addr(void) return aa; } +uint32_t +ble_ll_utils_calc_seed_aa(void) +{ + uint32_t seed_aa; + + while (1) { + seed_aa = ble_ll_rand(); + + /* saa(19) == saa(15) */ + if (!!(seed_aa & (1 << 19)) != !!(seed_aa & (1 << 15))) { + continue; + } + + /* saa(22) = saa(16) */ + if (!!(seed_aa & (1 << 22)) != !!(seed_aa & (1 << 16))) { + continue; + } + + /* saa(22) != saa(15) */ + if (!!(seed_aa & (1 << 22)) == !!(seed_aa & (1 << 15))) { + continue; + } + + /* saa(25) == 0 */ + if (seed_aa & (1 << 25)) { + continue; + } + + /* saa(23) == 1 */ + if (!(seed_aa & (1 << 23))) { + continue; + } + + break; + } + + return seed_aa; +} + uint8_t ble_ll_utils_remapped_channel(uint8_t remap_index, const uint8_t *chanmap) {
