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

Reply via email to