mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
fix(nimble): Improve safety, fix bugs, and update docs across NimBLE examples
- Remove unused headers from examples - Improve periodic adv/sync example functionality and readability - Use ble_hs_id_infer_auto() instead of hardcoded BLE_OWN_ADDR_PUBLIC/RANDOM - Add ble_hs_util_ensure_addr() calls in on_sync for proper address setup - Use correct ext adv instance (0 instead of 1) in phy_prph, l2cap_coc, multi_conn - Fix struct name: ble_gap_periodic_adv_enable_params -> ble_gap_periodic_adv_start_params - Add CONFIG_BT_NIMBLE_GAP_SERVICE guards around ble_svc_gap_device_name_set - Fix unsafe AD data parsing with bounds checks in central examples - Fix UUID matching bugs (off-by-one loop condition and byte order) in phy_cent, htp_cent, and proximity_sensor_cent - Fix ble_multi_conn_cent address type to use dynamic inference - Remove contradictory sm_sc=0 after sm_sc=1 in ble_multi_adv - Add CONFIG_BT_NIMBLE_EXT_ADV=y to ble_multi_adv sdkconfig defaults - Check return values for ble_gap_set_host_feat, nimble_port_init - Update tutorials and READMEs to match code changes
This commit is contained in:
@@ -58,7 +58,7 @@ I (459) NimBLE: 60:55:f9:f7:3e:23
|
||||
I (469) NimBLE:
|
||||
|
||||
I (469) NimBLE: Default LE PHY set successfully
|
||||
I (479) NimBLE: GAP procedure initiated: extended advertise; instance=1
|
||||
I (479) NimBLE: GAP procedure initiated: extended advertise; instance=0
|
||||
|
||||
I (479) uart: queue free spaces: 8
|
||||
I (489) main_task: Returned from app_main()
|
||||
@@ -89,7 +89,7 @@ I (1779) NimBLE: conn_itvl=40 conn_latency=0 supervision_timeout=256 encrypted=
|
||||
|
||||
I (1789) NimBLE:
|
||||
|
||||
I (1789) NimBLE: GAP procedure initiated: extended advertise; instance=1
|
||||
I (1789) NimBLE: GAP procedure initiated: extended advertise; instance=0
|
||||
|
||||
I (1809) NimBLE: connection established; status=0
|
||||
I (1809) NimBLE: handle=1 our_ota_addr_type=0 our_ota_addr=
|
||||
@@ -118,7 +118,7 @@ I (3039) NimBLE: conn_itvl=40 conn_latency=0 supervision_timeout=256 encrypted=
|
||||
|
||||
I (3049) NimBLE:
|
||||
|
||||
I (3059) NimBLE: GAP procedure initiated: extended advertise; instance=1
|
||||
I (3059) NimBLE: GAP procedure initiated: extended advertise; instance=0
|
||||
|
||||
I (3079) NimBLE: connection established; status=0
|
||||
I (3079) NimBLE: handle=1 our_ota_addr_type=0 our_ota_addr=
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -104,7 +104,7 @@ ext_bleprph_advertise(void)
|
||||
{
|
||||
struct ble_gap_ext_adv_params params;
|
||||
struct os_mbuf *data = NULL;
|
||||
uint8_t instance = 1;
|
||||
uint8_t instance = 0;
|
||||
int rc;
|
||||
|
||||
/* use defaults for non-set params */
|
||||
@@ -118,8 +118,8 @@ ext_bleprph_advertise(void)
|
||||
/*enable connectable advertising for all Phy*/
|
||||
params.connectable = 1;
|
||||
|
||||
/* advertise using random addr */
|
||||
params.own_addr_type = BLE_OWN_ADDR_PUBLIC;
|
||||
/* advertise using the inferred address type */
|
||||
params.own_addr_type = own_addr_type;
|
||||
|
||||
/* Set current phy; get mbuf for scan rsp data; fill mbuf with scan rsp data */
|
||||
switch (s_current_phy) {
|
||||
|
||||
+22
-21
@@ -78,8 +78,10 @@ app_main(void)
|
||||
ble_hs_cfg.sm_their_key_dist = 1;
|
||||
#endif
|
||||
|
||||
#if MYNEWT_VAL(BLE_GATTS)
|
||||
rc = gatt_svr_init_le_phy();
|
||||
assert(rc == 0);
|
||||
#endif
|
||||
|
||||
/* Set the default device name. */
|
||||
rc = ble_svc_gap_device_name_set("bleprph-phy");
|
||||
@@ -166,8 +168,8 @@ esp_err_t esp_nimble_init(void)
|
||||
The host is configured by setting up the callbacks on Stack-reset, Stack-sync, registration of each GATT resource, and storage status.
|
||||
|
||||
```c
|
||||
ble_hs_cfg.reset_cb = blecent_on_reset;
|
||||
ble_hs_cfg.sync_cb = blecent_on_sync;
|
||||
ble_hs_cfg.reset_cb = bleprph_on_reset;
|
||||
ble_hs_cfg.sync_cb = bleprph_on_sync;
|
||||
ble_hs_cfg.gatts_register_cb = gatt_svr_register_cb;
|
||||
ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
|
||||
```
|
||||
@@ -221,10 +223,10 @@ nimble_port_freertos_init(bleprph_host_task);
|
||||
|
||||
|
||||
## Intializaion of LE PHY to Default 1M PHY.
|
||||
1M PHY is the default PHY for BLE devices which enables it to provide a data rate of 1 Mbps. It is used while establishing the connection between devices and maintains backward compatibility with all those devices that don't have BLE5.0 support.`set_default_le_phy_before_conn()` function set default LE PHY before establishing a connection.
|
||||
1M PHY is the default PHY for BLE devices which enables it to provide a data rate of 1 Mbps. It is used while establishing the connection between devices and maintains backward compatibility with all those devices that don't have BLE5.0 support.`set_default_le_phy()` function set default LE PHY before establishing a connection.
|
||||
|
||||
```c
|
||||
void set_default_le_phy_before_conn(uint8_t tx_phys_mask, uint8_t rx_phys_mask)
|
||||
void set_default_le_phy(uint8_t tx_phys_mask, uint8_t rx_phys_mask)
|
||||
{
|
||||
int rc = ble_gap_set_prefered_default_le_phy(tx_phys_mask, rx_phys_mask);
|
||||
if (rc == 0)
|
||||
@@ -252,15 +254,14 @@ As the phy_cent disconnects the connection link with the peripheral, `BLE_GAP_EV
|
||||
|
||||
/* Connection terminated; resume advertising. */
|
||||
|
||||
#if CONFIG_EXAMPLE_EXTENDED_ADV
|
||||
switch (s_current_phy) {
|
||||
case BLE_HCI_LE_PHY_1M_PREF_MASK:
|
||||
/* Setting current phy to create a connection on 2M PHY */
|
||||
/* Setting current phy to create connection on 2M PHY */
|
||||
s_current_phy = BLE_HCI_LE_PHY_2M_PREF_MASK;
|
||||
break;
|
||||
|
||||
case BLE_HCI_LE_PHY_2M_PREF_MASK:
|
||||
/* Setting current phy to create a connection on CODED PHY */
|
||||
/* Setting current phy to create connection on CODED PHY */
|
||||
s_current_phy = BLE_HCI_LE_PHY_CODED_PREF_MASK;
|
||||
break;
|
||||
|
||||
@@ -270,11 +271,8 @@ As the phy_cent disconnects the connection link with the peripheral, `BLE_GAP_EV
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
set_default_le_phy_before_conn(s_current_phy, s_current_phy);
|
||||
|
||||
ext_bleprph_advertise();
|
||||
#else
|
||||
bleprph_advertise();
|
||||
#endif
|
||||
```
|
||||
|
||||
|
||||
@@ -291,19 +289,22 @@ ext_bleprph_advertise(void)
|
||||
{
|
||||
struct ble_gap_ext_adv_params params;
|
||||
struct os_mbuf *data = NULL;
|
||||
uint8_t instance = 1;
|
||||
uint8_t instance = 0;
|
||||
int rc;
|
||||
|
||||
/* use defaults for non-set params */
|
||||
memset (¶ms, 0, sizeof(params));
|
||||
|
||||
/* enable connectable advertising */
|
||||
params.connectable = 1;
|
||||
params.scannable = 1;
|
||||
params.legacy_pdu = 1;
|
||||
if (s_current_phy == BLE_HCI_LE_PHY_1M_PREF_MASK) {
|
||||
params.scannable = 1;
|
||||
params.legacy_pdu = 1;
|
||||
}
|
||||
|
||||
/* advertise using random addr */
|
||||
params.own_addr_type = BLE_OWN_ADDR_PUBLIC;
|
||||
/*enable connectable advertising for all Phy*/
|
||||
params.connectable = 1;
|
||||
|
||||
/* advertise using the inferred address type */
|
||||
params.own_addr_type = own_addr_type;
|
||||
|
||||
/* Set current phy; get mbuf for scan rsp data; fill mbuf with scan rsp data */
|
||||
switch (s_current_phy) {
|
||||
@@ -311,24 +312,24 @@ ext_bleprph_advertise(void)
|
||||
params.primary_phy = BLE_HCI_LE_PHY_1M;
|
||||
params.secondary_phy = BLE_HCI_LE_PHY_1M;
|
||||
data = ext_get_data(ext_adv_pattern_1M, sizeof(ext_adv_pattern_1M));
|
||||
params.sid = 0;
|
||||
break;
|
||||
|
||||
case BLE_HCI_LE_PHY_2M_PREF_MASK:
|
||||
params.primary_phy = BLE_HCI_LE_PHY_1M;
|
||||
params.secondary_phy = BLE_HCI_LE_PHY_2M;
|
||||
data = ext_get_data(ext_adv_pattern_2M, sizeof(ext_adv_pattern_2M));
|
||||
params.sid = 1;
|
||||
break;
|
||||
|
||||
case BLE_HCI_LE_PHY_CODED_PREF_MASK:
|
||||
params.primary_phy = BLE_HCI_LE_PHY_CODED;
|
||||
params.secondary_phy = BLE_HCI_LE_PHY_CODED;
|
||||
data = ext_get_data(ext_adv_pattern_coded, sizeof(ext_adv_pattern_coded));
|
||||
params.sid = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
//params.tx_power = 127;
|
||||
params.sid = 1;
|
||||
|
||||
params.itvl_min = BLE_GAP_ADV_FAST_INTERVAL1_MIN;
|
||||
params.itvl_max = BLE_GAP_ADV_FAST_INTERVAL1_MIN;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user