fix(nimble): Bugfixes for various issues

This commit is contained in:
Rahul Tank
2026-02-16 10:53:34 +05:30
parent 4577b3c854
commit 9e581d7d68
16 changed files with 39 additions and 30 deletions
@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@@ -331,7 +331,9 @@ esp_blufi_gap_event(struct ble_gap_event *event, void *arg)
} }
if (event->connect.status != 0) { if (event->connect.status != 0) {
/* Connection failed; resume advertising. */ /* Connection failed; resume advertising. */
((void(*)(void))arg)(); if (arg != NULL) {
((void(*)(void))arg)();
}
} }
return 0; return 0;
case BLE_GAP_EVENT_DISCONNECT: case BLE_GAP_EVENT_DISCONNECT:
@@ -366,7 +368,9 @@ esp_blufi_gap_event(struct ble_gap_event *event, void *arg)
case BLE_GAP_EVENT_ADV_COMPLETE: case BLE_GAP_EVENT_ADV_COMPLETE:
ESP_LOGI(TAG, "advertise complete; reason=%d", ESP_LOGI(TAG, "advertise complete; reason=%d",
event->adv_complete.reason); event->adv_complete.reason);
((void(*)(void))arg)(); if (arg != NULL) {
((void(*)(void))arg)();
}
return 0; return 0;
case BLE_GAP_EVENT_SUBSCRIBE: case BLE_GAP_EVENT_SUBSCRIBE:
+6 -5
View File
@@ -160,10 +160,11 @@ menu "Security (SMP)"
default 0 default 0
help help
LE Security Mode 1 Levels: LE Security Mode 1 Levels:
1. No Security 1(0). No Security
2. Unauthenticated pairing with encryption 2(1). Unauthenticated pairing with encryption
3. Authenticated pairing with encryption 3(2). Authenticated pairing with encryption
4. Authenticated LE Secure Connections pairing with encryption using a 128-bit strength encryption key. 4(3). Authenticated LE Secure Connections pairing with encryption using a
128-bit strength encryption key.
config BT_NIMBLE_SM_SC_ONLY config BT_NIMBLE_SM_SC_ONLY
int "Enable Secure Connections Only Mode" int "Enable Secure Connections Only Mode"
@@ -820,7 +821,7 @@ menu "BLE 6.x Features"
if BT_NIMBLE_60_FEATURE_SUPPORT if BT_NIMBLE_60_FEATURE_SUPPORT
config BT_NIMBLE_CHANNEL_SOUNDING config BT_NIMBLE_CHANNEL_SOUNDING
bool "ble channel souding feature" bool "ble channel sounding feature"
default n default n
help help
Used to enable/disable the channel sounding feature Used to enable/disable the channel sounding feature
@@ -191,7 +191,7 @@ static void ble_hci_rx_acl(uint8_t *data, uint16_t len)
m = ble_transport_alloc_acl_from_ll(); m = ble_transport_alloc_acl_from_ll();
if (!m) { if (!m) {
if (retry_count % 5) { if (retry_count % 5 == 0) {
esp_rom_printf("ACL buf alloc failed %d times\n", retry_count); esp_rom_printf("ACL buf alloc failed %d times\n", retry_count);
esp_rom_printf("Free ACL mbufs: %d\n", os_msys_num_free()); esp_rom_printf("Free ACL mbufs: %d\n", os_msys_num_free());
} }
@@ -39,12 +39,15 @@ static inline const char *ble_svc_gap_device_name(void)
static inline int ble_svc_gap_device_appearance_set(uint16_t appearance) static inline int ble_svc_gap_device_appearance_set(uint16_t appearance)
{ {
(void)appearance;
ESP_LOGE(BLE_SVC_GAP_TAG, "GAP service not enabled. Enable CONFIG_BT_NIMBLE_GAP_SERVICE to use this API."); ESP_LOGE(BLE_SVC_GAP_TAG, "GAP service not enabled. Enable CONFIG_BT_NIMBLE_GAP_SERVICE to use this API.");
return -1; return -1;
} }
static inline int ble_svc_gap_device_key_material_set(uint8_t *session_key, uint8_t *iv) static inline int ble_svc_gap_device_key_material_set(uint8_t *session_key, uint8_t *iv)
{ {
(void)session_key;
(void)iv;
ESP_LOGE(BLE_SVC_GAP_TAG, "GAP service not enabled. Enable CONFIG_BT_NIMBLE_GAP_SERVICE to use this API."); ESP_LOGE(BLE_SVC_GAP_TAG, "GAP service not enabled. Enable CONFIG_BT_NIMBLE_GAP_SERVICE to use this API.");
return -1; return -1;
} }
@@ -2313,7 +2313,7 @@
#ifdef CONFIG_BT_NIMBLE_EXTRA_ADV_FIELDS #ifdef CONFIG_BT_NIMBLE_EXTRA_ADV_FIELDS
#define MYNEWT_VAL_BLE_EXTRA_ADV_FIELDS CONFIG_BT_NIMBLE_EXTRA_ADV_FIELDS #define MYNEWT_VAL_BLE_EXTRA_ADV_FIELDS CONFIG_BT_NIMBLE_EXTRA_ADV_FIELDS
#else #else
#define CONFIG_BT_NIMBLE_EXTRA_ADV_FIELDS (0) #define MYNEWT_VAL_BLE_EXTRA_ADV_FIELDS (0)
#endif #endif
#endif #endif
@@ -2358,7 +2358,7 @@
#ifdef CONFIG_BT_NIMBLE_STATIC_PASSKEY #ifdef CONFIG_BT_NIMBLE_STATIC_PASSKEY
#define MYNEWT_VAL_STATIC_PASSKEY CONFIG_BT_NIMBLE_STATIC_PASSKEY #define MYNEWT_VAL_STATIC_PASSKEY CONFIG_BT_NIMBLE_STATIC_PASSKEY
#else #else
#define CONFIG_BT_NIMBLE_STATIC_PASSKEY (0) #define MYNEWT_VAL_STATIC_PASSKEY (0)
#endif #endif
#endif #endif
@@ -33,6 +33,9 @@ static esp_bd_addr_t s_cached_remote_bda = {0x0,};
uint8_t get_keep_ble_on() uint8_t get_keep_ble_on()
{ {
if (g_ble_cfg_p == NULL) {
return 0;
}
return g_ble_cfg_p->keep_ble_on; return g_ble_cfg_p->keep_ble_on;
} }
@@ -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 * SPDX-License-Identifier: Unlicense OR CC0-1.0
*/ */
@@ -132,13 +132,13 @@ void ble_receive_apple_data_source(uint8_t *message, uint16_t message_len)
return; return;
} }
uint32_t NotificationUID = (message[1]) | (message[2]<< 8) | (message[3]<< 16) | (message[4] << 24); uint32_t NotificationUID = (message[1]) | (message[2]<< 8) | (message[3]<< 16) | (message[4] << 24);
uint32_t remian_attr_len = message_len - 5; uint32_t remain_attr_len = message_len - 5;
uint8_t *attrs = &message[5]; uint8_t *attrs = &message[5];
ESP_LOGI(NimBLE_ANCS_TAG, "recevice Notification Attributes response Command_id %d NotificationUID %" PRIu32, Command_id, NotificationUID); ESP_LOGI(NimBLE_ANCS_TAG, "recevice Notification Attributes response Command_id %d NotificationUID %" PRIu32, Command_id, NotificationUID);
while(remian_attr_len >= 3) { while(remain_attr_len > 0) {
uint8_t AttributeID = attrs[0]; uint8_t AttributeID = attrs[0];
uint16_t len = attrs[1] | (attrs[2] << 8); uint16_t len = attrs[1] | (attrs[2] << 8);
if(len > remian_attr_len - 3) { if(len > (remain_attr_len -3)) {
ESP_LOGE(NimBLE_ANCS_TAG, "data error"); ESP_LOGE(NimBLE_ANCS_TAG, "data error");
break; break;
} }
@@ -175,16 +175,16 @@ void ble_receive_apple_data_source(uint8_t *message, uint16_t message_len)
} }
attrs += (1 + 2 + len); attrs += (1 + 2 + len);
remian_attr_len -= (1 + 2 + len); remain_attr_len -= (1 + 2 + len);
} }
break; break;
} }
case CommandIDGetAppAttributes: case CommandIDGetAppAttributes:
ESP_LOGI(NimBLE_ANCS_TAG, "recevice APP Attributes response"); ESP_LOGI(NimBLE_ANCS_TAG, "received APP Attributes response");
break; break;
case CommandIDPerformNotificationAction: case CommandIDPerformNotificationAction:
ESP_LOGI(NimBLE_ANCS_TAG, "recevice Perform Notification Action"); ESP_LOGI(NimBLE_ANCS_TAG, "received Perform Notification Action");
break; break;
default: default:
ESP_LOGI(NimBLE_ANCS_TAG, "unknown Command ID"); ESP_LOGI(NimBLE_ANCS_TAG, "unknown Command ID");
@@ -213,5 +213,4 @@ char *Errcode_to_String(uint16_t status)
break; break;
} }
return Errstr; return Errstr;
} }
@@ -24,7 +24,6 @@ union ble_store_key;
#define BLE_HCI_LE_CS_SUBEVENT_DONE_STATUS_ABORTED 0xF #define BLE_HCI_LE_CS_SUBEVENT_DONE_STATUS_ABORTED 0xF
#define LOCAL_PROCEDURE_MEM 1024 // Replace with an appropriate constant value #define LOCAL_PROCEDURE_MEM 1024 // Replace with an appropriate constant value
struct ble_hs_cfg;
struct ble_gatt_register_ctxt; struct ble_gatt_register_ctxt;
/** GATT server. */ /** GATT server. */
@@ -520,7 +520,7 @@ ble_cts_cent_gap_event(struct ble_gap_event *event, void *arg)
(event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED"); (event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED");
/* Perform service discovery */ /* Perform service discovery */
rc = peer_disc_all(event->cache_assoc.conn_handle, rc = peer_disc_all(event->cache_assoc.conn_handle,
blecent_on_disc_complete, NULL); ble_cts_cent_on_disc_complete, NULL);
if(rc != 0) { if(rc != 0) {
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc); MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
return 0; return 0;
@@ -348,7 +348,7 @@ blecoex_gap_event(struct ble_gap_event *event, void *arg)
case BLE_GAP_EVENT_CONNECT: case BLE_GAP_EVENT_CONNECT:
MODLOG_DFLT(INFO, "%s connection %s; status=%d ", MODLOG_DFLT(INFO, "%s connection %s; status=%d ",
client_connect == 1 ? "Client" : "Server", client_connect == 1 ? "Client" : "Server",
event->connect.status == 0 ? "established" : "failed", event->connect.status == 0 ? "established" : "failed",
event->connect.status); event->connect.status);
@@ -628,8 +628,8 @@ ble_htp_cent_gap_event(struct ble_gap_event *event, void *arg)
event->cache_assoc.status, event->cache_assoc.status,
(event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED"); (event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED");
/* Perform service discovery */ /* Perform service discovery */
rc = peer_disc_all(event->cache_assoc.conn_handle, rc = peer_disc_all(event->connect.conn_handle,
blecent_on_disc_complete, NULL); ble_htp_cent_on_disc_complete, NULL);
if(rc != 0) { if(rc != 0) {
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc); MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
return 0; return 0;
@@ -581,8 +581,8 @@ ble_prox_cent_gap_event(struct ble_gap_event *event, void *arg)
event->cache_assoc.status, event->cache_assoc.status,
(event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED"); (event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED");
/* Perform service discovery */ /* Perform service discovery */
rc = peer_disc_all(event->cache_assoc.conn_handle, rc = peer_disc_all(event->connect.conn_handle,
blecent_on_disc_complete, NULL); ble_prox_cent_on_disc_complete, NULL);
if(rc != 0) { if(rc != 0) {
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc); MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
return 0; return 0;
+1 -1
View File
@@ -165,7 +165,7 @@ The following configuration flags can be adjusted to significantly reduce RAM us
| CONFIG_COMPILER_OPTIMIZATION_SIZE | n → y | 8408 | | CONFIG_COMPILER_OPTIMIZATION_SIZE | n → y | 8408 |
| CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE | n → y | 5896 | | CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE | n → y | 5896 |
| CONFIG_ESP_COEX_SW_COEXIST_ENABLE | y → n | 896 | | CONFIG_ESP_COEX_SW_COEXIST_ENABLE | y → n | 896 |
| ESP_TASK_WDT_EN | y → n | 528 | | CONFIG_ESP_TASK_WDT_EN | y → n | 528 |
| CONFIG_LOG_DEFAULT_LEVEL_NONE | n → y | 2592 | | CONFIG_LOG_DEFAULT_LEVEL_NONE | n → y | 2592 |
## Troubleshooting ## Troubleshooting
+1 -1
View File
@@ -103,7 +103,7 @@ Notification sent successfully
The following configuration flags can be adjusted to significantly reduce RAM usage in your ESP-IDF project while retaining basic BLE functionality. The following configuration flags can be adjusted to significantly reduce RAM usage in your ESP-IDF project while retaining basic BLE functionality.
| Config Option | Old → New Value | RAM Saved (Bytes) | | Config Option | Old → New Value | RAM Saved (Bytes) |
|--------------------------------------------------|-----------------|--------------------| | -------------------------------------------------|---------------- | ------------------ |
| CONFIG_BT_NIMBLE_SM_SC | y → n | 2016 | | CONFIG_BT_NIMBLE_SM_SC | y → n | 2016 |
| CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION | y → n | 32 | | CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION | y → n | 32 |
| CONFIG_BT_NIMBLE_GATT_MAX_PROCS | 4 → 2 | 112 | | CONFIG_BT_NIMBLE_GATT_MAX_PROCS | 4 → 2 | 112 |
@@ -515,7 +515,7 @@ peer_inc_add(struct peer *peer, uint16_t svc_start_handle,
} }
} }
/* Including the services into inlucding list */ /* Including the services into including list */
cur_svc = peer_svc_find_range(peer, gatt_incl_svc->handle); cur_svc = peer_svc_find_range(peer, gatt_incl_svc->handle);