From 009ed01b68c2d3ef42cc020dbc89d8e34712f014 Mon Sep 17 00:00:00 2001 From: Abhinav Kudnar Date: Thu, 29 May 2025 11:55:33 +0530 Subject: [PATCH] fix(nimble): memset the sync structs to prevent uncertainty for ext_adv reports --- .../ble_pawr_adv/ble_pawr_sync/main/main.c | 26 ++++--------------- .../ble_pawr_sync_conn/main/main.c | 22 +++------------- 2 files changed, 8 insertions(+), 40 deletions(-) diff --git a/examples/bluetooth/nimble/ble_pawr_adv/ble_pawr_sync/main/main.c b/examples/bluetooth/nimble/ble_pawr_adv/ble_pawr_sync/main/main.c index c0a8ef0b60..dc9d1b83e2 100644 --- a/examples/bluetooth/nimble/ble_pawr_adv/ble_pawr_sync/main/main.c +++ b/examples/bluetooth/nimble/ble_pawr_adv/ble_pawr_sync/main/main.c @@ -22,7 +22,6 @@ static void start_scan(void); static struct ble_hs_adv_fields fields; static bool synced = false; -uint8_t rsp_slot_idx = 0; static int gap_event_cb(struct ble_gap_event *event, void *arg) { @@ -57,12 +56,11 @@ gap_event_cb(struct ble_gap_event *event, void *arg) event->periodic_report.event_counter, event->periodic_report.subevent); - rsp_slot_idx += 1; struct ble_gap_periodic_adv_response_params param = { .request_event = event->periodic_report.event_counter, .request_subevent = event->periodic_report.subevent, .response_subevent = event->periodic_report.subevent, - .response_slot = rsp_slot_idx, + .response_slot = 2, }; struct os_mbuf *data = os_msys_get_pkthdr(BLE_PAWR_RSP_DATA_LEN, 0); @@ -129,8 +127,9 @@ static int create_periodic_sync(struct ble_gap_ext_disc_desc *disc) { int rc; - struct ble_gap_periodic_sync_params params; + struct ble_gap_periodic_sync_params params = {0}; + memset(¶ms, 0, sizeof(params)); params.skip = 0; params.sync_timeout = 4000; params.reports_disabled = 0; @@ -159,9 +158,11 @@ start_scan(void) int rc; struct ble_gap_ext_disc_params disc_params; + /* Perform a passive scan. I.e., don't send follow-up scan requests to * each advertiser. */ + memset(&disc_params, 0, sizeof(disc_params)); disc_params.itvl = BLE_GAP_SCAN_ITVL_MS(600); disc_params.window = BLE_GAP_SCAN_ITVL_MS(300); disc_params.passive = 1; @@ -182,23 +183,6 @@ on_reset(int reason) ESP_LOGE(TAG, "Resetting state; reason=%d\n", reason); } -/* Cnnot find `ble_single_xxxx()`, workaround */ -// static void -// on_sync(void) -// { -// int ble_single_env_init(void); -// int ble_single_init(void); - -// int rc; - -// rc = ble_single_env_init(); -// assert(!rc); -// rc = ble_single_init(); -// assert(!rc); - -// start_scan(); -// } - static void on_sync(void) { diff --git a/examples/bluetooth/nimble/ble_pawr_adv_conn/ble_pawr_sync_conn/main/main.c b/examples/bluetooth/nimble/ble_pawr_adv_conn/ble_pawr_sync_conn/main/main.c index 967d7c9e3f..e43a975ce4 100644 --- a/examples/bluetooth/nimble/ble_pawr_adv_conn/ble_pawr_sync_conn/main/main.c +++ b/examples/bluetooth/nimble/ble_pawr_adv_conn/ble_pawr_sync_conn/main/main.c @@ -185,8 +185,8 @@ static int create_periodic_sync(struct ble_gap_ext_disc_desc *disc) { int rc; - struct ble_gap_periodic_sync_params params; - + struct ble_gap_periodic_sync_params params = {0}; + memset(¶ms, 0, sizeof(params)); params.skip = 0; params.sync_timeout = 4000; params.reports_disabled = 0; @@ -218,6 +218,7 @@ start_scan(void) /* Perform a passive scan. I.e., don't send follow-up scan requests to * each advertiser. */ + memset(&disc_params, 0, sizeof(disc_params)); disc_params.itvl = BLE_GAP_SCAN_ITVL_MS(600); disc_params.window = BLE_GAP_SCAN_ITVL_MS(300); disc_params.passive = 1; @@ -238,23 +239,6 @@ on_reset(int reason) ESP_LOGE(TAG, "Resetting state; reason=%d\n", reason); } -/* Cnnot find `ble_single_xxxx()`, workaround */ -// static void -// on_sync(void) -// { -// int ble_single_env_init(void); -// int ble_single_init(void); - -// int rc; - -// rc = ble_single_env_init(); -// assert(!rc); -// rc = ble_single_init(); -// assert(!rc); - -// start_scan(); -// } - static void on_sync(void) {