esp-idf: ESP32-S3 BLE cannot be scanned by IOS provisioning app (IDFGH-7093)
Environment
- Development Kit: ESP32-S3 Devkit C + ESP32-C3devKitC02
- IDF version v4.4 c29343eb94d2f2ca17b3a5b38c82452e556147f2
Problem Description
ios provisioning app is not able to scan S3 but successfully scans C3. Using ios 15.4 on Iphone SE + Galaxy S21
I picked C3 as comparisong because they both are BLE 5.0 chipsets.
Also, both examples are using the same BLE settings, with Bluedroid - Dual mode selected, the rest is default.
Steps to reproduce
simply compile from
esp-idf\examples\provisioning\wifi_prov_mgr
for both C3 and S3, then flash devices.
C3 will popup in the BLE app for ios, S3 will not. Both are visible in android BLE app.
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 19 (10 by maintainers)
@Weijian-Espressif , as expected, the issue is related to the protocomm component.
By comparing code of
simple_ble.candexample_ble_sec_gatts_demo.ci was able to find which is the discrepancy which is causing this issue.In
example_ble_sec_gatts_demo.cthe code relies onesp_ble_gap_config_adv_datafor configuring the scan response. Instead, inprotocomm_ble.cyour colleagues used raw_adv_data for both advertising and scan response. The raw data is then set insimple_ble.cusingesp_ble_gap_config_scan_rsp_data_raw.Apparently, something in the raw data is missing -> bug.
Please check out these changes: https://github.com/KonssnoK/esp-idf/commit/a9e06bc7d88b42c07eab16b54d5ec08e1d3ff364
In this code, instead of using a raw data, function
esp_ble_gap_config_adv_datais used. In this way the name of the device gets updated immediately also with provisioning app.I didn’t create a fix but just a proof of fault, as can be seen from
Also, some of the changes were made just to make the code look more similar to
example_ble_sec_gatts_demo.c(example, usingret = esp_ble_gap_config_local_privacy(true);)Please forward to your colleagues for fixing.
Thanks!