From 222f995abfd7070604a886bedbf90297f82cdd0c Mon Sep 17 00:00:00 2001 From: Szymon Czapracki Date: Wed, 8 Apr 2026 13:09:25 +0200 Subject: [PATCH 1/2] nimble/bttester: Fix NRPA logic in bttester NRPA should only be allowed for non-connectable advertising. The previous condition was inverted and rejected the valid case. Reject NRPA only when advertising is connectable. --- apps/bttester/src/btp_gap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bttester/src/btp_gap.c b/apps/bttester/src/btp_gap.c index 29fb50a103..4b43b7bc03 100644 --- a/apps/bttester/src/btp_gap.c +++ b/apps/bttester/src/btp_gap.c @@ -547,7 +547,7 @@ start_advertising(const void *cmd, uint16_t cmd_len, break; case 0x02: /* NRPA is used only for non-connectable advertising */ - if (!(current_settings & BIT(BTP_GAP_SETTINGS_CONNECTABLE))) { + if ((current_settings & BIT(BTP_GAP_SETTINGS_CONNECTABLE))) { return BTP_STATUS_FAILED; } break; From a827d471cb3e280ff58c8b6e8ea9d4e631699726 Mon Sep 17 00:00:00 2001 From: Szymon Czapracki Date: Wed, 8 Apr 2026 13:11:43 +0200 Subject: [PATCH 2/2] nimble/bttester: Report connectable state in controller info Set CONNECTABLE in current_settings based on the current advertising parameters so controller_info reports the actual runtime state. --- apps/bttester/src/btp_gap.c | 42 ++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/apps/bttester/src/btp_gap.c b/apps/bttester/src/btp_gap.c index 4b43b7bc03..d6765e6d7e 100644 --- a/apps/bttester/src/btp_gap.c +++ b/apps/bttester/src/btp_gap.c @@ -150,6 +150,20 @@ controller_index_list(const void *cmd, uint16_t cmd_len, return BTP_STATUS_SUCCESS; } +#if MYNEWT_VAL(BLE_EXT_ADV) +static struct ble_gap_ext_adv_params adv_params = { + .primary_phy = BLE_HCI_LE_PHY_1M, + .secondary_phy = BLE_HCI_LE_PHY_1M, + .sid = 1, + .legacy_pdu = 1, +}; +#else +static struct ble_gap_adv_params adv_params = { + .conn_mode = BLE_GAP_CONN_MODE_NON, + .disc_mode = BLE_GAP_DISC_MODE_NON, +}; +#endif + static uint8_t controller_info(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len) @@ -202,6 +216,20 @@ controller_info(const void *cmd, uint16_t cmd_len, supported_settings |= BIT(BTP_GAP_SETTINGS_ADVERTISING); supported_settings |= BIT(BTP_GAP_SETTINGS_SC); +#if MYNEWT_VAL(BLE_EXT_ADV) + if (adv_params.connectable) { + current_settings |= BIT(BTP_GAP_SETTINGS_CONNECTABLE); + } else { + current_settings &= ~BIT(BTP_GAP_SETTINGS_CONNECTABLE); + } +#else + if (adv_params.conn_mode != BLE_GAP_CONN_MODE_NON) { + current_settings |= BIT(BTP_GAP_SETTINGS_CONNECTABLE); + } else { + current_settings &= ~BIT(BTP_GAP_SETTINGS_CONNECTABLE); + } +#endif + if (ble_hs_cfg.sm_bonding) { current_settings |= BIT(BTP_GAP_SETTINGS_BONDABLE); } @@ -219,20 +247,6 @@ controller_info(const void *cmd, uint16_t cmd_len, return BTP_STATUS_SUCCESS; } -#if MYNEWT_VAL(BLE_EXT_ADV) -static struct ble_gap_ext_adv_params adv_params = { - .primary_phy = BLE_HCI_LE_PHY_1M, - .secondary_phy = BLE_HCI_LE_PHY_1M, - .sid = 1, - .legacy_pdu = 1, -}; -#else -static struct ble_gap_adv_params adv_params = { - .conn_mode = BLE_GAP_CONN_MODE_NON, - .disc_mode = BLE_GAP_DISC_MODE_NON, -}; -#endif - static uint8_t ad_flags = BLE_HS_ADV_F_BREDR_UNSUP; #if MYNEWT_VAL(BTTESTER_PRIVACY_MODE) && MYNEWT_VAL(BTTESTER_USE_NRPA)