mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
fix(nimble): Migrate to NimBLE 1.9.0
This commit is contained in:
@@ -170,6 +170,12 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CONFIG_BT_DUAL_MODE_ARCH AND CONFIG_BT_CONTROLLER_ENABLED)
|
||||
list(APPEND nimble_host_srcs
|
||||
"${CMAKE_CURRENT_LIST_DIR}/../../porting/mem/bt_osi_mem.c"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Reuse the code from the controller to reduce flash usage
|
||||
if(CONFIG_BT_CONTROLLER_DISABLED OR NOT CONFIG_SOC_ESP_NIMBLE_CONTROLLER)
|
||||
list(APPEND nimble_host_srcs
|
||||
@@ -179,10 +185,17 @@ if(CONFIG_BT_CONTROLLER_DISABLED OR NOT CONFIG_SOC_ESP_NIMBLE_CONTROLLER)
|
||||
"${CMAKE_CURRENT_LIST_DIR}/nimble/porting/nimble/src/mem.c"
|
||||
"${CMAKE_CURRENT_LIST_DIR}/nimble/porting/nimble/src/os_mbuf.c"
|
||||
"${CMAKE_CURRENT_LIST_DIR}/nimble/porting/nimble/src/os_msys_init.c"
|
||||
"${CMAKE_CURRENT_LIST_DIR}/nimble/porting/npl/freertos/src/npl_os_freertos.c"
|
||||
"${CMAKE_CURRENT_LIST_DIR}/../../porting/mem/bt_osi_mem.c"
|
||||
)
|
||||
if(NOT CONFIG_BT_DUAL_MODE_ARCH)
|
||||
list(APPEND nimble_host_srcs
|
||||
"${CMAKE_CURRENT_LIST_DIR}/nimble/porting/npl/freertos/src/npl_os_freertos.c"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
list(REMOVE_DUPLICATES nimble_host_srcs)
|
||||
|
||||
list(APPEND nimble_host_include_dirs
|
||||
${CMAKE_CURRENT_LIST_DIR}/nimble/nimble/host/include
|
||||
${CMAKE_CURRENT_LIST_DIR}/nimble/nimble/include
|
||||
@@ -209,6 +222,7 @@ list(APPEND nimble_host_include_dirs
|
||||
|
||||
${CMAKE_CURRENT_LIST_DIR}/nimble/porting/nimble/include
|
||||
${CMAKE_CURRENT_LIST_DIR}/port/include
|
||||
${CMAKE_CURRENT_LIST_DIR}/../../porting/include
|
||||
${CMAKE_CURRENT_LIST_DIR}/nimble/nimble/transport/include
|
||||
)
|
||||
|
||||
@@ -218,13 +232,17 @@ if(CONFIG_BT_CONTROLLER_DISABLED)
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CONFIG_BT_CONTROLLER_DISABLED OR NOT CONFIG_SOC_ESP_NIMBLE_CONTROLLER)
|
||||
# Add NPL include directories based on which NPL implementation is being used
|
||||
if(CONFIG_BT_DUAL_MODE_ARCH)
|
||||
# esp-idf NPL include already added above
|
||||
else()
|
||||
# freertos NPL include needed for non-dual-mode targets
|
||||
list(APPEND nimble_host_include_dirs
|
||||
${CMAKE_CURRENT_LIST_DIR}/../../porting/include
|
||||
${CMAKE_CURRENT_LIST_DIR}/nimble/porting/npl/freertos/include
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
# BLE NIMBLE MESH (Deprecated)
|
||||
if(CONFIG_BT_NIMBLE_MESH)
|
||||
list(APPEND nimble_host_srcs
|
||||
|
||||
@@ -359,6 +359,14 @@ menu "GAP"
|
||||
Required when the host delays CONNECT so applications never receive other
|
||||
events before CONNECT event.
|
||||
|
||||
config BT_NIMBLE_UNHANDLED_HCI_EVENT
|
||||
bool "Post unhandled HCI events to GAP"
|
||||
depends on BT_NIMBLE_ENABLED
|
||||
default n
|
||||
help
|
||||
For events that are not handled by stack, they would be directly posted to application
|
||||
Application is responsible for handling such events.
|
||||
|
||||
endmenu #GAP
|
||||
|
||||
menu "GATT / ATT"
|
||||
|
||||
@@ -215,6 +215,7 @@ static void ble_hci_rx_acl(uint8_t *data, uint16_t len)
|
||||
os_mbuf_free_chain(m);
|
||||
return;
|
||||
}
|
||||
/* Host path may block on the NimBLE event queue; must not run inside OS critical. */
|
||||
ble_transport_to_hs_acl(m);
|
||||
}
|
||||
#endif
|
||||
|
||||
Submodule components/bt/host/nimble/nimble updated: 5311c952a5...920a1e0b75
@@ -102,6 +102,10 @@
|
||||
#define MYNEWT_VAL_BLE_EXT_ADV (CONFIG_BT_NIMBLE_EXT_ADV)
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_HS_EXT_ADV_LEGACY_INSTANCE
|
||||
#define MYNEWT_VAL_BLE_HS_EXT_ADV_LEGACY_INSTANCE (0)
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_EXT_ADV_V2
|
||||
#ifdef CONFIG_BT_NIMBLE_EXT_ADV_V2
|
||||
#define MYNEWT_VAL_BLE_EXT_ADV_V2 (CONFIG_BT_NIMBLE_EXT_ADV_V2)
|
||||
@@ -228,6 +232,18 @@
|
||||
#define MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES (CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES)
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_HS_16_COMPAT
|
||||
#define MYNEWT_VAL_BLE_HS_16_COMPAT (1)
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_HS_GAP_UNHANDLED_HCI_EVENT
|
||||
#ifdef CONFIG_BT_NIMBLE_UNHANDLED_HCI_EVENT
|
||||
#define MYNEWT_VAL_BLE_HS_GAP_UNHANDLED_HCI_EVENT CONFIG_BT_NIMBLE_UNHANDLED_HCI_EVENT
|
||||
#else
|
||||
#define MYNEWT_VAL_BLE_HS_GAP_UNHANDLED_HCI_EVENT (0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_BT_NIMBLE_ENABLE_PERIODIC_ADV
|
||||
#define MYNEWT_VAL_BLE_PERIODIC_ADV (0)
|
||||
#else
|
||||
@@ -601,8 +617,13 @@
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_ATT_PREFERRED_MTU
|
||||
#ifdef CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU
|
||||
#define MYNEWT_VAL_BLE_ATT_PREFERRED_MTU CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU
|
||||
#else
|
||||
#define MYNEWT_VAL_BLE_ATT_PREFERRED_MTU (23)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_ATT_SVR_FIND_INFO
|
||||
#define MYNEWT_VAL_BLE_ATT_SVR_FIND_INFO (1)
|
||||
@@ -2025,10 +2046,14 @@
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_HCI_VS
|
||||
#ifdef CONFIG_BT_NIMBLE_VS_SUPPORT
|
||||
#define MYNEWT_VAL_BLE_HCI_VS CONFIG_BT_NIMBLE_VS_SUPPORT
|
||||
#define MYNEWT_VAL_BLE_HCI_VS_OCF_OFFSET (0)
|
||||
#else
|
||||
#define MYNEWT_VAL_BLE_HCI_VS (0)
|
||||
#define MYNEWT_VAL_BLE_HCI_VS (0)
|
||||
#endif
|
||||
#endif
|
||||
#ifndef MYNEWT_VAL_BLE_HCI_VS_OCF_OFFSET
|
||||
#define MYNEWT_VAL_BLE_HCI_VS_OCF_OFFSET (0)
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_OPTIMIZE_MULTI_CONN
|
||||
@@ -2119,6 +2144,14 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_ISO_MAX_BISES
|
||||
#ifdef CONFIG_BT_NIMBLE_ISO_MAX_BISES
|
||||
#define MYNEWT_VAL_BLE_ISO_MAX_BISES CONFIG_BT_NIMBLE_ISO_MAX_BISES
|
||||
#else
|
||||
#define MYNEWT_VAL_BLE_ISO_MAX_BISES (4)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_ISO_BIS_PER_BIG
|
||||
#ifdef CONFIG_BT_NIMBLE_ISO_BIS_PER_BIG
|
||||
#define MYNEWT_VAL_BLE_ISO_BIS_PER_BIG CONFIG_BT_NIMBLE_ISO_BIS_PER_BIG
|
||||
@@ -2223,6 +2256,39 @@
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_STOP_BITS
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_STOP_BITS (1)
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PORT
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PORT MYNEWT_VAL_BLE_TRANSPORT_UART_PORT
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PARITY__none
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PARITY__none MYNEWT_VAL_BLE_TRANSPORT_UART_PARITY__none
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PARITY__odd
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PARITY__odd MYNEWT_VAL_BLE_TRANSPORT_UART_PARITY__odd
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PARITY__even
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_PARITY__even MYNEWT_VAL_BLE_TRANSPORT_UART_PARITY__even
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_FLOW_CONTROL__rtscts
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_FLOW_CONTROL__rtscts \
|
||||
MYNEWT_VAL_BLE_TRANSPORT_UART_FLOW_CONTROL__rtscts
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_BAUDRATE
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_BAUDRATE MYNEWT_VAL_BLE_TRANSPORT_UART_BAUDRATE
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_DATA_BITS
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_DATA_BITS MYNEWT_VAL_BLE_TRANSPORT_UART_DATA_BITS
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_TRANSPORT_UART_LL_STOP_BITS
|
||||
#define MYNEWT_VAL_BLE_TRANSPORT_UART_LL_STOP_BITS MYNEWT_VAL_BLE_TRANSPORT_UART_STOP_BITS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MYNEWT_VAL_BLE_PERIODIC_ADV_WITH_RESPONSES
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#define __ESP_NIMBLE_MEM_H__
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "bt_osi_mem.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -101,7 +102,9 @@ uint32_t nimble_mem_dbg_get_max_size_section(uint8_t index);
|
||||
void *p; \
|
||||
do { \
|
||||
p = nimble_mem_malloc(size); \
|
||||
nimble_mem_dbg_record(p, size, __func__, __LINE__); \
|
||||
if (p) { \
|
||||
nimble_mem_dbg_record(p, size, __func__, __LINE__); \
|
||||
} \
|
||||
} while (0); \
|
||||
p; \
|
||||
})
|
||||
@@ -111,7 +114,9 @@ uint32_t nimble_mem_dbg_get_max_size_section(uint8_t index);
|
||||
void *p; \
|
||||
do { \
|
||||
p = nimble_mem_calloc(count, size); \
|
||||
nimble_mem_dbg_record(p, (count) * (size), __func__, __LINE__); \
|
||||
if (p) { \
|
||||
nimble_mem_dbg_record(p, (count) * (size), __func__, __LINE__); \
|
||||
} \
|
||||
} while (0); \
|
||||
p; \
|
||||
})
|
||||
|
||||
@@ -12,12 +12,14 @@
|
||||
|
||||
static uint8_t log_count;
|
||||
#if CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
static size_t host_mem_used_size = 0;
|
||||
static _Atomic size_t host_mem_used_size = 0;
|
||||
#endif // CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
|
||||
void *nimble_mem_realloc(void *ptr, size_t size);
|
||||
|
||||
#if CONFIG_BT_NIMBLE_MEM_DEBUG
|
||||
|
||||
#define NIMBLE_MEM_DBG_INFO_MAX (1024*3)
|
||||
#define NIMBLE_MEM_DBG_INFO_MAX (1024 * 3)
|
||||
typedef struct {
|
||||
void *p;
|
||||
int size;
|
||||
@@ -118,7 +120,7 @@ void nimble_mem_dbg_clean(void *p, const char *func, int line)
|
||||
}
|
||||
|
||||
if (i >= NIMBLE_MEM_DBG_INFO_MAX) {
|
||||
ESP_LOGE("BT_NIMBLE_MEM", "%s full %s %d !!\n", __func__, func, line);
|
||||
ESP_LOGE("BT_NIMBLE_MEM", "%s pointer %s %d not found!!\n", __func__, func, line);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,6 +193,67 @@ uint32_t nimble_mem_dbg_get_max_size_section(uint8_t index)
|
||||
return nimble_mem_dbg_max_size_section[index].max_size;
|
||||
}
|
||||
|
||||
void *nimble_mem_dbg_realloc(void *ptr, size_t new_size, const char *func, int line)
|
||||
{
|
||||
size_t old_size = 0;
|
||||
int i;
|
||||
|
||||
void *new_ptr = nimble_mem_realloc(ptr, new_size);
|
||||
if (new_ptr == NULL && new_size > 0) {
|
||||
// realloc failed, keep old ptr record
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Find and clean old record if ptr is not NULL
|
||||
if (ptr != NULL) {
|
||||
for (i = 0; i < NIMBLE_MEM_DBG_INFO_MAX; i++) {
|
||||
if (nimble_mem_dbg_info[i].p == ptr) {
|
||||
old_size = nimble_mem_dbg_info[i].size;
|
||||
nimble_mem_dbg_current_size -= old_size;
|
||||
|
||||
nimble_mem_dbg_info[i].p = NULL;
|
||||
nimble_mem_dbg_info[i].size = 0;
|
||||
nimble_mem_dbg_info[i].func = NULL;
|
||||
nimble_mem_dbg_info[i].line = 0;
|
||||
nimble_mem_dbg_count--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Record the new allocation if new_size > 0
|
||||
if (new_ptr != NULL && new_size > 0) {
|
||||
for (i = 0; i < NIMBLE_MEM_DBG_INFO_MAX; i++) {
|
||||
if (nimble_mem_dbg_info[i].p == NULL) {
|
||||
nimble_mem_dbg_info[i].p = new_ptr;
|
||||
nimble_mem_dbg_info[i].size = new_size;
|
||||
nimble_mem_dbg_info[i].func = func;
|
||||
nimble_mem_dbg_info[i].line = line;
|
||||
nimble_mem_dbg_count++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= NIMBLE_MEM_DBG_INFO_MAX) {
|
||||
ESP_LOGE("BT_NIMBLE_MEM", "%s full %s %d !!\n", __func__, func, line);
|
||||
return new_ptr;
|
||||
}
|
||||
|
||||
nimble_mem_dbg_current_size += new_size;
|
||||
if (nimble_mem_dbg_max_size < nimble_mem_dbg_current_size) {
|
||||
nimble_mem_dbg_max_size = nimble_mem_dbg_current_size;
|
||||
}
|
||||
|
||||
for (i = 0; i < NIMBLE_MEM_DBG_MAX_SECTION_NUM; i++) {
|
||||
if (nimble_mem_dbg_max_size_section[i].used &&
|
||||
nimble_mem_dbg_max_size_section[i].max_size < nimble_mem_dbg_current_size) {
|
||||
nimble_mem_dbg_max_size_section[i].max_size = nimble_mem_dbg_current_size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new_ptr;
|
||||
}
|
||||
#endif // CONFIG_BT_NIMBLE_MEM_DEBUG
|
||||
|
||||
#if !CONFIG_BT_NIMBLE_LOW_SPEED_MODE
|
||||
@@ -218,7 +281,8 @@ void *nimble_mem_malloc(size_t size)
|
||||
}
|
||||
#if CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
if(mem) {
|
||||
host_mem_used_size += heap_caps_get_allocated_size(mem);
|
||||
size_t alloc_size = heap_caps_get_allocated_size(mem);
|
||||
__atomic_fetch_add(&host_mem_used_size, alloc_size, __ATOMIC_RELAXED);
|
||||
}
|
||||
#endif // CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
return mem;
|
||||
@@ -241,7 +305,8 @@ void *nimble_mem_calloc(size_t n, size_t size)
|
||||
#endif
|
||||
#if CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
if(mem) {
|
||||
host_mem_used_size += heap_caps_get_allocated_size(mem);
|
||||
size_t alloc_size = heap_caps_get_allocated_size(mem);
|
||||
__atomic_fetch_add(&host_mem_used_size, alloc_size, __ATOMIC_RELAXED);
|
||||
}
|
||||
#endif // CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
return mem;
|
||||
@@ -274,17 +339,21 @@ void *nimble_mem_realloc(void *ptr, size_t size)
|
||||
|
||||
#if CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
if (mem) {
|
||||
/* Successful realloc: replace old_size contribution with new block size. */
|
||||
size_t new_size = heap_caps_get_allocated_size(mem);
|
||||
host_mem_used_size = host_mem_used_size - old_size + new_size;
|
||||
__atomic_fetch_sub(&host_mem_used_size, old_size, __ATOMIC_RELAXED);
|
||||
__atomic_fetch_add(&host_mem_used_size, new_size, __ATOMIC_RELAXED);
|
||||
} else if (ptr && size == 0) {
|
||||
host_mem_used_size -= old_size;
|
||||
/* realloc(ptr, 0) freed the block and returned NULL; deduct old_size. */
|
||||
__atomic_fetch_sub(&host_mem_used_size, old_size, __ATOMIC_RELAXED);
|
||||
}
|
||||
/* If mem == NULL and size != 0, realloc failed; ptr is still valid and
|
||||
* host_mem_used_size remains unchanged, which is the correct state. */
|
||||
#endif // CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
|
||||
return mem;
|
||||
}
|
||||
|
||||
|
||||
#if !CONFIG_BT_NIMBLE_LOW_SPEED_MODE
|
||||
IRAM_ATTR
|
||||
#endif
|
||||
@@ -293,8 +362,7 @@ void nimble_mem_free(void *ptr)
|
||||
#if CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
if (ptr) {
|
||||
size_t alloc_size = heap_caps_get_allocated_size(ptr);
|
||||
// assert(host_mem_used_size >= alloc_size);
|
||||
host_mem_used_size -= alloc_size;
|
||||
__atomic_fetch_sub(&host_mem_used_size, alloc_size, __ATOMIC_RELAXED);
|
||||
}
|
||||
#endif // CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED
|
||||
if (ptr) {
|
||||
|
||||
Reference in New Issue
Block a user