You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ko...@apache.org on 2021/11/03 13:38:12 UTC
[mynewt-nimble] branch master updated: apps/bttester: implement
NRPA rotation
This is an automated email from the ASF dual-hosted git repository.
kopyscinski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 8135e51 apps/bttester: implement NRPA rotation
8135e51 is described below
commit 8135e511854e3c665408cbe331e257fd7aa91226
Author: Krzysztof Kopyściński <kr...@codecoup.pl>
AuthorDate: Wed Sep 29 08:43:39 2021 +0200
apps/bttester: implement NRPA rotation
As per CORE v5.3, Vol 3, Part C 10.7.1 NRPA should also rotate, same
as RPA is doing right now. For time beeing let's implement this in
tester application, before it's implemented in host.
This affects GAP/BROB/BCST/BV-04-C
---
apps/bttester/src/gap.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
apps/bttester/syscfg.yml | 4 ++++
2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/apps/bttester/src/gap.c b/apps/bttester/src/gap.c
index acac998..63150e2 100644
--- a/apps/bttester/src/gap.c
+++ b/apps/bttester/src/gap.c
@@ -63,6 +63,10 @@ static struct os_callout connected_ev_co;
static struct gap_device_connected_ev connected_ev;
#define CONNECTED_EV_DELAY_MS(itvl) 8 * BLE_HCI_CONN_ITVL * itvl / 1000
static int connection_attempts;
+#if MYNEWT_VAL(BTTESTER_PRIVACY_MODE) && MYNEWT_VAL(BTTESTER_USE_NRPA)
+static int64_t advertising_start;
+static struct os_callout bttester_nrpa_rotate_timer;
+#endif
static const struct ble_gap_conn_params dflt_conn_params = {
.scan_itvl = 0x0010,
@@ -248,6 +252,38 @@ static struct ble_gap_adv_params adv_params = {
.disc_mode = BLE_GAP_DISC_MODE_NON,
};
+#if MYNEWT_VAL(BTTESTER_PRIVACY_MODE) && MYNEWT_VAL(BTTESTER_USE_NRPA)
+static void rotate_nrpa_cb(struct os_event *ev)
+{
+ int rc;
+ ble_addr_t addr;
+ int32_t duration_ms = BLE_HS_FOREVER;
+ int32_t remaining_time;
+ os_time_t remaining_ticks;
+
+ if (adv_params.disc_mode == BLE_GAP_DISC_MODE_LTD) {
+ duration_ms = MYNEWT_VAL(BTTESTER_LTD_ADV_TIMEOUT);
+ }
+
+ ble_gap_adv_stop();
+ rc = ble_hs_id_gen_rnd(1, &addr);
+ assert(rc == 0);
+ rc = ble_hs_id_set_rnd(addr.val);
+ assert(rc == 0);
+
+ ble_gap_adv_start(own_addr_type, NULL, duration_ms,
+ &adv_params, gap_event_cb, NULL);
+
+ remaining_time = os_get_uptime_usec() - advertising_start;
+ if (remaining_time > 0) {
+ advertising_start = os_get_uptime_usec();
+ os_time_ms_to_ticks(remaining_time, &remaining_ticks);
+ os_callout_reset(&bttester_nrpa_rotate_timer,
+ remaining_ticks);
+ }
+}
+#endif
+
static void set_connectable(uint8_t *data, uint16_t len)
{
const struct gap_set_connectable_cmd *cmd = (void *) data;
@@ -418,6 +454,13 @@ static void start_advertising(const uint8_t *data, uint16_t len)
duration_ms = MYNEWT_VAL(BTTESTER_LTD_ADV_TIMEOUT);
}
+#if MYNEWT_VAL(BTTESTER_PRIVACY_MODE) && MYNEWT_VAL(BTTESTER_USE_NRPA)
+ if (MYNEWT_VAL(BTTESTER_NRPA_TIMEOUT) < duration_ms / 1000) {
+ advertising_start = os_get_uptime_usec();
+ os_callout_reset(&bttester_nrpa_rotate_timer,
+ OS_TICKS_PER_SEC * MYNEWT_VAL(BTTESTER_NRPA_TIMEOUT));
+ }
+#endif
err = ble_gap_adv_start(own_addr_type, NULL, duration_ms,
&adv_params, gap_event_cb, NULL);
if (err) {
@@ -1675,7 +1718,10 @@ uint8_t tester_init_gap(void)
return BTP_STATUS_FAILED;
}
#endif
-
+#if MYNEWT_VAL(BTTESTER_PRIVACY_MODE) && MYNEWT_VAL(BTTESTER_USE_NRPA)
+ os_callout_init(&bttester_nrpa_rotate_timer, os_eventq_dflt_get(),
+ rotate_nrpa_cb, NULL);
+#endif
adv_buf = NET_BUF_SIMPLE(ADV_BUF_LEN);
tester_init_gap_cb(BTP_STATUS_SUCCESS);
diff --git a/apps/bttester/syscfg.yml b/apps/bttester/syscfg.yml
index 7f99ded..f00afeb 100644
--- a/apps/bttester/syscfg.yml
+++ b/apps/bttester/syscfg.yml
@@ -75,6 +75,10 @@ syscfg.defs:
description: Maximum MTU size the application can handle
value: 230
+ BTTESTER_NRPA_TIMEOUT:
+ description: NRPA rotation timeout in seconds
+ value: 5
+
syscfg.vals:
OS_MAIN_STACK_SIZE: 512
SHELL_TASK: 0