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 5652310e74ff6e03e086ace9673924cfbc0d3852 Author: Andrzej Kaczmarek <[email protected]> AuthorDate: Fri Jan 27 12:58:25 2023 +0100 nimble/ll: Add helper to calculate BIG AA --- .../controller/include/controller/ble_ll_utils.h | 1 + nimble/controller/src/ble_ll_utils.c | 26 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/nimble/controller/include/controller/ble_ll_utils.h b/nimble/controller/include/controller/ble_ll_utils.h index 5739e046..3e28fcb4 100644 --- a/nimble/controller/include/controller/ble_ll_utils.h +++ b/nimble/controller/include/controller/ble_ll_utils.h @@ -30,6 +30,7 @@ uint32_t ble_ll_utils_calc_access_addr(void); uint32_t ble_ll_utils_calc_seed_aa(void); +uint32_t ble_ll_utils_calc_big_aa(uint32_t seed_aa, uint32_t n); 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 1c65a7cf..4f1c679b 100644 --- a/nimble/controller/src/ble_ll_utils.c +++ b/nimble/controller/src/ble_ll_utils.c @@ -183,6 +183,32 @@ ble_ll_utils_calc_seed_aa(void) return seed_aa; } +uint32_t +ble_ll_utils_calc_big_aa(uint32_t seed_aa, uint32_t n) +{ + uint32_t d; + uint32_t dw; + + /* Core 5.3, Vol 6, Part B, 2.1.2 */ + /* TODO simplify? */ + d = ((35 * n) + 42) % 128; + dw = (!!(d & (1 << 0)) << 31) | + (!!(d & (1 << 0)) << 30) | + (!!(d & (1 << 0)) << 29) | + (!!(d & (1 << 0)) << 28) | + (!!(d & (1 << 0)) << 27) | + (!!(d & (1 << 0)) << 26) | + (!!(d & (1 << 1)) << 25) | + (!!(d & (1 << 6)) << 24) | + (!!(d & (1 << 1)) << 23) | + (!!(d & (1 << 5)) << 21) | + (!!(d & (1 << 4)) << 20) | + (!!(d & (1 << 3)) << 18) | + (!!(d & (1 << 2)) << 17); + + return seed_aa ^ dw; +} + uint8_t ble_ll_utils_remapped_channel(uint8_t remap_index, const uint8_t *chanmap) {
