Merge branch 'feature/periodic_adv_enhancement' into 'master'

NimBLE : Added periodic Adv Feature Updates in BLE 5.3

See merge request espressif/esp-idf!20474
This commit is contained in:
Rahul Tank 2023-08-22 19:55:23 +08:00
commit 94234f00f4
9 changed files with 58 additions and 4 deletions

View File

@ -598,6 +598,12 @@ config BT_NIMBLE_BLE_POWER_CONTROL
help help
Set this option to enable the Power Control feature 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 choice BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM
prompt "Coexistence: limit on MAX Tx/Rx time for coded-PHY connection" prompt "Coexistence: limit on MAX Tx/Rx time for coded-PHY connection"
default BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS default BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS

@ -1 +1 @@
Subproject commit cb2317d5b99b73e8ddfb7bf11b4becf6327e0563 Subproject commit 3172618555b02dad599e9a76f56f1d6a64557f78

View File

@ -186,6 +186,11 @@
#else #else
#define MYNEWT_VAL_BLE_CONN_SUBRATING (CONFIG_BT_NIMBLE_SUBRATE) #define MYNEWT_VAL_BLE_CONN_SUBRATING (CONFIG_BT_NIMBLE_SUBRATE)
#endif #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 */
/*** @apache-mynewt-nimble/nimble/controller */ /*** @apache-mynewt-nimble/nimble/controller */

View File

@ -1319,6 +1319,10 @@ config SOC_BLE_POWER_CONTROL_SUPPORTED
bool bool
default y default y
config SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED
bool
default y
config SOC_BLUFI_SUPPORTED config SOC_BLUFI_SUPPORTED
bool bool
default y default y

View File

@ -539,6 +539,7 @@
#define SOC_BLE_50_SUPPORTED (1) /*!< Support Bluetooth 5.0 */ #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_DEVICE_PRIVACY_SUPPORTED (1) /*!< Support BLE device privacy mode */
#define SOC_BLE_POWER_CONTROL_SUPPORTED (1) /*!< Support Bluetooth Power Control */ #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_BLUFI_SUPPORTED (1) /*!< Support BLUFI */
#define SOC_BLE_MULTI_CONN_OPTIMIZATION (1) /*!< Support multiple connections optimization */ #define SOC_BLE_MULTI_CONN_OPTIMIZATION (1) /*!< Support multiple connections optimization */

View File

@ -16,4 +16,12 @@ menu "Example Configuration"
prompt "Advertise RANDOM Address" prompt "Advertise RANDOM Address"
help help
Use this option to advertise a random address instead of public address 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 endmenu

View File

@ -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 * SPDX-License-Identifier: Unlicense OR CC0-1.0
*/ */
@ -47,6 +47,10 @@ start_periodic_adv(void)
struct os_mbuf *data; struct os_mbuf *data;
uint8_t instance = 1; uint8_t instance = 1;
ble_addr_t addr; 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 */ /* set random (NRPA) address for instance */
rc = ble_hs_id_gen_rnd(1, &addr); 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)); rc = os_mbuf_append(data, periodic_adv_raw_data, sizeof(periodic_adv_raw_data));
assert(rc == 0); 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); rc = ble_gap_periodic_adv_set_data(instance, data);
#endif
assert (rc == 0); assert (rc == 0);
/* start periodic advertising */ /* 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); rc = ble_gap_periodic_adv_start(instance);
#endif
assert (rc == 0); assert (rc == 0);
/* start advertising */ /* start advertising */

View File

@ -8,5 +8,13 @@ menu "Example Configuration"
help help
Use this option to enable extended advertising in the example. Use this option to enable extended advertising in the example.
If this option is disabled, ensure config BT_NIMBLE_EXT_ADV is 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 endmenu

View File

@ -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 * 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)); memcpy(&adv_sid, &disc->sid, sizeof(disc->sid));
params.skip = 10; params.skip = 10;
params.sync_timeout = 1000; 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, &params, periodic_sync_gap_event, NULL); rc = ble_gap_periodic_adv_sync_create(&addr, adv_sid, &params, periodic_sync_gap_event, NULL);
assert(rc == 0); assert(rc == 0);
} }