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)
 {

Reply via email to