NimBLE-Arduino -> Arduino "BLE" (3.3.x) migration (#10164)

* NimBLE-Arduino -> Arduino "BLE" (3.3.x) migration

* More NimBLE

* Fix Device Name in ATT Read Request (0x2A00).

Device Name is exposed in two places:

- Advertisement data: this is set properly in startAdvertising.
- GATT attribute Device Name (0x2A00). This one is handled internally in NimBLE
  and comes from ble_svc_gap_device_name_set. This is set initially, but then
  BLEDevice::createServer calls ble_svc_gap_init which resets the device name.
  This causes the device to apparently "change name after pairing":

< ACL Data TX:... flags 0x00 dlen 7  #113 [hci0] 14.241149
      ATT: Read Request (0x0a) len 2
        Handle: 0x0003 Type: Device Name (0x2a00)
> ACL Data RX: Handle 2048 flags 0x02 dlen 11             #115 [hci0] 14.269050
      ATT: Read Response (0x0b) len 6
        Value[6]: 6e696d626c65   # "nimble"

Workaround this by setting the device name once again after
BLEDevice::createServer.

* Temporarily lower CORE_DEBUG_LEVEL to INFO to avoid triggering an apparent ESP-IDF Bluetooth bug when re-connecting to Pixel 8 Android devices.

Initial pairing works, but after ESP32 is rebooted, phone fails to reconnect. Meshtastic app shows it as disconnecting immediately. LightBlue shows a more detailed error "Peripheral Connection - Warning: onConnectionStatusChange: status 61" (0x3D - MIC Failure).

Bug report to Espresssif: https://github.com/espressif/esp-idf/issues/18126#issuecomment-4286197744

* Temporarily disable ble_gap_set_data_len, causes crash with Pixel 8 Android reconnect.

Crash looks like this:
  [ 11966][E][BLEAdvertising.cpp:341] setScanResponseData(): ble_gap_adv_rsp_set_data: 22
  [ 11975][E][BLEAdvertising.cpp:1554] start(): Host reset, wait for sync.
  ERROR | ??:??:?? 11 BLE failed to start advertising
  Guru Meditation Error: Core  0 panic'ed (LoadProhibited). Exception was unhandled.

  Core  0 register dump:
  PC      : 0x420e6190  PS      : 0x00060730  A0      : 0x820e158b  A1      : 0x3fce50c0
  A2      : 0x00000000  A3      : 0x3fcb8600  A4      : 0x3fcb85cc  A5      : 0x00000000
  A6      : 0x00000000  A7      : 0x00000c03  A8      : 0x00000000  A9      : 0x3fce50b0
  A10     : 0x0000000e  A11     : 0x00000000  A12     : 0x00000010  A13     : 0x3fce50e0
  A14     : 0x00000c03  A15     : 0x00000001  SAR     : 0x0000001e  EXCCAUSE: 0x0000001c
  EXCVADDR: 0x00000000  LBEG    : 0x400570e8  LEND    : 0x400570f3  LCOUNT  : 0x00000000

  Backtrace: 0x420e618d:0x3fce50c0 0x420e1588:0x3fce5110 0x420dfe87:0x3fce5200 0x420dfefb:0x3fce5220 0x420dff3f:0x3fce5240 0x4219602b:0x3fce5260 0x4037b0e5:0x3fce5280 0x4201edf3:0x3fce52a0

Connection seems fast enough even without this. We'll investigate the
reason for the crash and re-enable once it's safe.

---------

Co-authored-by: Catalin Patulea <cronos586@gmail.com>
This commit is contained in:
Austin
2026-04-21 09:07:53 -04:00
committed by GitHub
co-authored by Catalin Patulea
parent 61bab08d9e
commit 9da0ee9c51
7 changed files with 177 additions and 266 deletions
+12 -5
View File
@@ -38,7 +38,11 @@ build_flags =
-Isrc/platform/esp32
-std=gnu++17
-DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
# DO NOT INCREASE THIS TO DEBUG. It appears to trigger a bug in ESP-IDF
# Bluetooth stack with Pixel 8 Android devices:
# https://github.com/espressif/esp-idf/issues/18126#issuecomment-4286197744
# Once the bug is resolved, we can remove this warning.
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
-DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL
-DAXP_DEBUG_PORT=Serial
-DESP_OPENSSL_SUPPRESS_LEGACY_WARNING
@@ -70,9 +74,10 @@ lib_deps =
lib_ignore =
segger_rtt
NimBLE-Arduino
ESP32 BLE Arduino
; Ignore builtin NimBLE libs
BLE
; BLE
BluetoothSerial
SimpleBLE
WiFiProv
@@ -132,7 +137,8 @@ custom_component_remove =
custom_sdkconfig =
; CONFIG_LOG_DEFAULT_LEVEL=4
; CONFIG_LOG_MAXIMUM_LEVEL=4
; CONFIG_BT_NIMBLE_CPP_LOG_LEVEL=1
'# CONFIG_BT_NIMBLE_LOG_LEVEL_INFO is not set'
CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR=y
CONFIG_LOG_COLORS=y
CONFIG_ARDUHAL_LOG_COLORS=y
CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
@@ -270,6 +276,7 @@ custom_sdkconfig =
CONFIG_BT_NIMBLE_ENABLE_PERIODIC_SYNC=n
CONFIG_BT_NIMBLE_ENABLE_PERIODIC_ADV=n
CONFIG_BT_NIMBLE_EXT_SCAN=n
CONFIG_BT_NIMBLE_EXT_ADV=n
CONFIG_BT_NIMBLE_PERIODIC_ADV_SYNC_TRANSFER=n
CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY=n
CONFIG_BT_NIMBLE_BLUFI_ENABLE=n
@@ -281,7 +288,7 @@ custom_sdkconfig =
CONFIG_BT_NIMBLE_TPS_SERVICE=n
CONFIG_BT_NIMBLE_IAS_SERVICE=n
CONFIG_BT_NIMBLE_LLS_SERVICE=n
CONFIG_BT_NIMBLE_SPS_SERVICE=n
CONFIG_BT_NIMBLE_SPS_SERVICE=y
CONFIG_BT_NIMBLE_HR_SERVICE=n
CONFIG_BT_NIMBLE_HID_SERVICE=n
CONFIG_BT_NIMBLE_BAS_SERVICE=n
@@ -320,7 +327,7 @@ custom_sdkconfig =
CONFIG_ARDUINO_SELECTIVE_WiFi=y
CONFIG_ARDUINO_SELECTIVE_NetworkClientSecure=y
CONFIG_ARDUINO_SELECTIVE_WiFiProv=n
CONFIG_ARDUINO_SELECTIVE_BLE=n
CONFIG_ARDUINO_SELECTIVE_BLE=y
CONFIG_ARDUINO_SELECTIVE_BluetoothSerial=n
CONFIG_ARDUINO_SELECTIVE_SimpleBLE=n
CONFIG_ARDUINO_SELECTIVE_RainMaker=n
-2
View File
@@ -31,8 +31,6 @@ lib_deps =
${environmental_base.lib_deps}
${environmental_extra_no_bsec.lib_deps}
${radiolib_base.lib_deps}
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
h2zero/NimBLE-Arduino@1.4.3
# TODO renovate
https://github.com/mverch67/libpax/archive/6f52ee989301cdabaeef00bcbf93bff55708ce2f.zip
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
+3 -3
View File
@@ -14,9 +14,9 @@ custom_sdkconfig =
${esp32_common.custom_sdkconfig}
; ESP32c3 doesn't support SD_MMC
CONFIG_ARDUINO_SELECTIVE_SD_MMC=n
CONFIG_BT_NIMBLE_EXT_ADV=y
CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=257
CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
; CONFIG_BT_NIMBLE_EXT_ADV=y
; CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=257
; CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
lib_deps =
${esp32_common.lib_deps}
+3 -3
View File
@@ -20,9 +20,9 @@ custom_sdkconfig =
${esp32_common.custom_sdkconfig}
; ESP32c6 doesn't support SD_MMC
CONFIG_ARDUINO_SELECTIVE_SD_MMC=n
CONFIG_BT_NIMBLE_EXT_ADV=y
CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=257
CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
; CONFIG_BT_NIMBLE_EXT_ADV=y
; CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=257
; CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
lib_ignore =
${esp32_common.lib_ignore}
+3 -3
View File
@@ -10,9 +10,9 @@ build_flags =
custom_sdkconfig =
${esp32_common.custom_sdkconfig}
CONFIG_BT_NIMBLE_EXT_ADV=y
CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=257
CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
; CONFIG_BT_NIMBLE_EXT_ADV=y
; CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=257
; CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
lib_deps =
${esp32_common.lib_deps}