diff --git a/components/bt/host/nimble/Kconfig.in b/components/bt/host/nimble/Kconfig.in index 3220b51c10d2..0284e283ee36 100644 --- a/components/bt/host/nimble/Kconfig.in +++ b/components/bt/host/nimble/Kconfig.in @@ -598,6 +598,12 @@ config BT_NIMBLE_BLE_POWER_CONTROL help Set this option to enable the Power Control feature +config BT_NIMBLE_PERIODIC_ADV_ENH + bool "Periodic adv enhancements(adi support)" + depends on BT_NIMBLE_ENABLE_PERIODIC_ADV && BT_NIMBLE_50_FEATURE_SUPPORT && SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED + help + Enable the periodic advertising enhancements + choice BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM prompt "Coexistence: limit on MAX Tx/Rx time for coded-PHY connection" default BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS diff --git a/components/bt/host/nimble/nimble b/components/bt/host/nimble/nimble index cb2317d5b99b..3172618555b0 160000 --- a/components/bt/host/nimble/nimble +++ b/components/bt/host/nimble/nimble @@ -1 +1 @@ -Subproject commit cb2317d5b99b73e8ddfb7bf11b4becf6327e0563 +Subproject commit 3172618555b02dad599e9a76f56f1d6a64557f78 diff --git a/components/bt/host/nimble/port/include/esp_nimble_cfg.h b/components/bt/host/nimble/port/include/esp_nimble_cfg.h index abeafb42eab5..3c0be88478c8 100644 --- a/components/bt/host/nimble/port/include/esp_nimble_cfg.h +++ b/components/bt/host/nimble/port/include/esp_nimble_cfg.h @@ -186,6 +186,11 @@ #else #define MYNEWT_VAL_BLE_CONN_SUBRATING (CONFIG_BT_NIMBLE_SUBRATE) #endif +#ifndef CONFIG_BT_NIMBLE_PERIODIC_ADV_ENH +#define MYNEWT_VAL_BLE_PERIODIC_ADV_ENH (0) +#else +#define MYNEWT_VAL_BLE_PERIODIC_ADV_ENH (CONFIG_BT_NIMBLE_PERIODIC_ADV_ENH) +#endif /*** @apache-mynewt-nimble/nimble/controller */ /*** @apache-mynewt-nimble/nimble/controller */ diff --git a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in index 4c61a97f570e..760d8d944c5e 100644 --- a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in @@ -1319,6 +1319,10 @@ config SOC_BLE_POWER_CONTROL_SUPPORTED bool default y +config SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED + bool + default y + config SOC_BLUFI_SUPPORTED bool default y diff --git a/components/soc/esp32c6/include/soc/soc_caps.h b/components/soc/esp32c6/include/soc/soc_caps.h index 165f6748b128..b5274a3052f7 100644 --- a/components/soc/esp32c6/include/soc/soc_caps.h +++ b/components/soc/esp32c6/include/soc/soc_caps.h @@ -539,6 +539,7 @@ #define SOC_BLE_50_SUPPORTED (1) /*!< Support Bluetooth 5.0 */ #define SOC_BLE_DEVICE_PRIVACY_SUPPORTED (1) /*!< Support BLE device privacy mode */ #define SOC_BLE_POWER_CONTROL_SUPPORTED (1) /*!< Support Bluetooth Power Control */ +#define SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED (1) /*!< Support For BLE Periodic Adv Enhancements */ #define SOC_BLUFI_SUPPORTED (1) /*!< Support BLUFI */ #define SOC_BLE_MULTI_CONN_OPTIMIZATION (1) /*!< Support multiple connections optimization */ diff --git a/examples/bluetooth/nimble/ble_periodic_adv/main/Kconfig.projbuild b/examples/bluetooth/nimble/ble_periodic_adv/main/Kconfig.projbuild index 112b26de7b0a..c7b32ae16d8a 100644 --- a/examples/bluetooth/nimble/ble_periodic_adv/main/Kconfig.projbuild +++ b/examples/bluetooth/nimble/ble_periodic_adv/main/Kconfig.projbuild @@ -16,4 +16,12 @@ menu "Example Configuration" prompt "Advertise RANDOM Address" help Use this option to advertise a random address instead of public address + + config EXAMPLE_PERIODIC_ADV_ENH + bool + prompt "Enable Periodic Adv Enhancements" + depends on SOC_BLE_50_SUPPORTED && SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED + select BT_NIMBLE_PERIODIC_ADV_ENH + help + Use this option to enable periodic advertising enhancements endmenu diff --git a/examples/bluetooth/nimble/ble_periodic_adv/main/main.c b/examples/bluetooth/nimble/ble_periodic_adv/main/main.c index e0beed995f43..0d5c6d105919 100644 --- a/examples/bluetooth/nimble/ble_periodic_adv/main/main.c +++ b/examples/bluetooth/nimble/ble_periodic_adv/main/main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -47,6 +47,10 @@ start_periodic_adv(void) struct os_mbuf *data; uint8_t instance = 1; ble_addr_t addr; +#if MYNEWT_VAL(BLE_PERIODIC_ADV_ENH) + struct ble_gap_periodic_adv_enable_params eparams; + memset(&eparams, 0, sizeof(eparams)); +#endif /* set random (NRPA) address for instance */ rc = ble_hs_id_gen_rnd(1, &addr); @@ -101,11 +105,22 @@ start_periodic_adv(void) rc = os_mbuf_append(data, periodic_adv_raw_data, sizeof(periodic_adv_raw_data)); assert(rc == 0); +#if MYNEWT_VAL(BLE_PERIODIC_ADV_ENH) + rc = ble_gap_periodic_adv_set_data(instance, data, NULL); +#else rc = ble_gap_periodic_adv_set_data(instance, data); +#endif assert (rc == 0); /* start periodic advertising */ +#if MYNEWT_VAL(BLE_PERIODIC_ADV_ENH) +#if CONFIG_EXAMPLE_PERIODIC_ADV_ENH + eparams.include_adi = 1; +#endif + rc = ble_gap_periodic_adv_start(instance, &eparams); +#else rc = ble_gap_periodic_adv_start(instance); +#endif assert (rc == 0); /* start advertising */ diff --git a/examples/bluetooth/nimble/ble_periodic_sync/main/Kconfig.projbuild b/examples/bluetooth/nimble/ble_periodic_sync/main/Kconfig.projbuild index 68ca5de275af..0763e71d72c8 100644 --- a/examples/bluetooth/nimble/ble_periodic_sync/main/Kconfig.projbuild +++ b/examples/bluetooth/nimble/ble_periodic_sync/main/Kconfig.projbuild @@ -8,5 +8,13 @@ menu "Example Configuration" help Use this option to enable extended advertising in the example. If this option is disabled, ensure config BT_NIMBLE_EXT_ADV is - also disabled from Nimble stack menuconfig + also disabled from NimBLE stack menuconfig + + config EXAMPLE_PERIODIC_ADV_ENH + bool + prompt "Enable Periodic Adv Enhancements" + depends on SOC_BLE_50_SUPPORTED && SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED + select BT_NIMBLE_PERIODIC_ADV_ENH + help + Use this option to enable periodic adv enhancements endmenu diff --git a/examples/bluetooth/nimble/ble_periodic_sync/main/main.c b/examples/bluetooth/nimble/ble_periodic_sync/main/main.c index 2f0bbc750f20..61ae1e23e355 100644 --- a/examples/bluetooth/nimble/ble_periodic_sync/main/main.c +++ b/examples/bluetooth/nimble/ble_periodic_sync/main/main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -122,6 +122,13 @@ periodic_sync_gap_event(struct ble_gap_event *event, void *arg) memcpy(&adv_sid, &disc->sid, sizeof(disc->sid)); params.skip = 10; params.sync_timeout = 1000; + +#if CONFIG_EXAMPLE_PERIODIC_ADV_ENH + /* This way the periodic advertising reports will not be + delivered to host unless the advertising data is changed + or the Data-Id is updated by the advertiser */ + params.filter_duplicates = 1; +#endif rc = ble_gap_periodic_adv_sync_create(&addr, adv_sid, ¶ms, periodic_sync_gap_event, NULL); assert(rc == 0); }