mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Update bt lib for ESP32
- Add config to set duplicate scan list refresh period - overwrite the oldest device infor if the list is full - Fixed duplicate scan period is not accurate - Change default TX power to 9 dBm - Fixed disconnect reason 0x1f (unspecified error) - Fixed connection timeout due to terminate ind has not been acknowledged - Fixed some memory was not released after bluetooth controller initialization failed on ESP32
This commit is contained in:
parent
79f74f8f76
commit
18d0ba010d
@ -370,6 +370,22 @@ menu "Bluetooth"
|
|||||||
Maximum number of devices which can be recorded in scan duplicate filter.
|
Maximum number of devices which can be recorded in scan duplicate filter.
|
||||||
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
When the maximum amount of device in the filter is reached, the cache will be refreshed.
|
||||||
|
|
||||||
|
config BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD
|
||||||
|
int "Duplicate scan list refresh period (seconds)"
|
||||||
|
depends on BTDM_BLE_SCAN_DUPL
|
||||||
|
range 0 1000
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
If the period value is non-zero, the controller will periodically clear the device information
|
||||||
|
stored in the scan duuplicate filter. If it is 0, the scan duuplicate filter will not be cleared
|
||||||
|
until the scanning is disabled. Duplicate advertisements for this period should not be sent to the
|
||||||
|
Host in advertising report events.
|
||||||
|
There are two scenarios where the ADV packet will be repeatedly reported:
|
||||||
|
1. The duplicate scan cache is full, the controller will delete the oldest device information and
|
||||||
|
add new device information.
|
||||||
|
2. When the refresh period is up, the controller will clear all device information and start filtering
|
||||||
|
again.
|
||||||
|
|
||||||
config BTDM_BLE_MESH_SCAN_DUPL_EN
|
config BTDM_BLE_MESH_SCAN_DUPL_EN
|
||||||
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
bool "Special duplicate scan mechanism for BLE Mesh scan"
|
||||||
depends on BTDM_BLE_SCAN_DUPL
|
depends on BTDM_BLE_SCAN_DUPL
|
||||||
|
@ -310,6 +310,7 @@ static uint8_t coex_schm_curr_period_get_wrapper(void);
|
|||||||
static void * coex_schm_curr_phase_get_wrapper(void);
|
static void * coex_schm_curr_phase_get_wrapper(void);
|
||||||
static int coex_wifi_channel_get_wrapper(uint8_t *primary, uint8_t *secondary);
|
static int coex_wifi_channel_get_wrapper(uint8_t *primary, uint8_t *secondary);
|
||||||
static int coex_register_wifi_channel_change_callback_wrapper(void *cb);
|
static int coex_register_wifi_channel_change_callback_wrapper(void *cb);
|
||||||
|
static void bt_controller_deinit_internal(void);
|
||||||
|
|
||||||
/* Local variable definition
|
/* Local variable definition
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
@ -1303,26 +1304,9 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
#ifdef CONFIG_PM_ENABLE
|
|
||||||
if (!s_btdm_allow_light_sleep) {
|
bt_controller_deinit_internal();
|
||||||
if (s_light_sleep_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_light_sleep_pm_lock);
|
|
||||||
s_light_sleep_pm_lock = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (s_pm_lock != NULL) {
|
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
|
||||||
s_pm_lock = NULL;
|
|
||||||
}
|
|
||||||
if (s_btdm_slp_tmr != NULL) {
|
|
||||||
esp_timer_delete(s_btdm_slp_tmr);
|
|
||||||
s_btdm_slp_tmr = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (s_wakeup_req_sem) {
|
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
|
||||||
s_wakeup_req_sem = NULL;
|
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1334,6 +1318,13 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
|
|
||||||
btdm_controller_deinit();
|
btdm_controller_deinit();
|
||||||
|
|
||||||
|
bt_controller_deinit_internal();
|
||||||
|
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bt_controller_deinit_internal(void)
|
||||||
|
{
|
||||||
periph_module_disable(PERIPH_BT_MODULE);
|
periph_module_disable(PERIPH_BT_MODULE);
|
||||||
|
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
@ -1355,18 +1346,22 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
|
|
||||||
s_pm_lock_acquired = false;
|
s_pm_lock_acquired = false;
|
||||||
#endif
|
#endif
|
||||||
semphr_delete_wrapper(s_wakeup_req_sem);
|
|
||||||
s_wakeup_req_sem = NULL;
|
|
||||||
|
|
||||||
free(osi_funcs_p);
|
if (s_wakeup_req_sem) {
|
||||||
osi_funcs_p = NULL;
|
semphr_delete_wrapper(s_wakeup_req_sem);
|
||||||
|
s_wakeup_req_sem = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (osi_funcs_p) {
|
||||||
|
free(osi_funcs_p);
|
||||||
|
osi_funcs_p = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
|
||||||
|
|
||||||
btdm_lpcycle_us = 0;
|
btdm_lpcycle_us = 0;
|
||||||
btdm_controller_set_sleep_mode(BTDM_MODEM_SLEEP_MODE_NONE);
|
btdm_controller_set_sleep_mode(BTDM_MODEM_SLEEP_MODE_NONE);
|
||||||
|
|
||||||
return ESP_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bt_shutdown(void)
|
static void bt_shutdown(void)
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit dbaeb136cacf8c7d071f838c1053f90299f57720
|
Subproject commit d4a224c5d682d6b5a76542c6918b6a59dd0b2f8c
|
@ -25,7 +25,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL 0x20200622
|
#define ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL 0x20221207
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Bluetooth mode for controller enable/disable
|
* @brief Bluetooth mode for controller enable/disable
|
||||||
@ -103,6 +103,12 @@ the adv packet will be discarded until the memory is restored. */
|
|||||||
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
#define MESH_DUPLICATE_SCAN_CACHE_SIZE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD
|
||||||
|
#define SCAN_DUPL_CACHE_REFRESH_PERIOD CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD
|
||||||
|
#else
|
||||||
|
#define SCAN_DUPL_CACHE_REFRESH_PERIOD 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_BTDM_CTRL_MODE_BLE_ONLY)
|
#if defined(CONFIG_BTDM_CTRL_MODE_BLE_ONLY)
|
||||||
#define BTDM_CONTROLLER_MODE_EFF ESP_BT_MODE_BLE
|
#define BTDM_CONTROLLER_MODE_EFF ESP_BT_MODE_BLE
|
||||||
#elif defined(CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY)
|
#elif defined(CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY)
|
||||||
@ -154,6 +160,7 @@ the adv packet will be discarded until the memory is restored. */
|
|||||||
.pcm_role = CONFIG_BTDM_CTRL_PCM_ROLE_EFF, \
|
.pcm_role = CONFIG_BTDM_CTRL_PCM_ROLE_EFF, \
|
||||||
.pcm_polar = CONFIG_BTDM_CTRL_PCM_POLAR_EFF, \
|
.pcm_polar = CONFIG_BTDM_CTRL_PCM_POLAR_EFF, \
|
||||||
.hli = BTDM_CTRL_HLI, \
|
.hli = BTDM_CTRL_HLI, \
|
||||||
|
.dup_list_refresh_period = SCAN_DUPL_CACHE_REFRESH_PERIOD, \
|
||||||
.magic = ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL, \
|
.magic = ESP_BT_CONTROLLER_CONFIG_MAGIC_VAL, \
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,6 +203,7 @@ typedef struct {
|
|||||||
uint8_t pcm_role; /*!< PCM role (master & slave)*/
|
uint8_t pcm_role; /*!< PCM role (master & slave)*/
|
||||||
uint8_t pcm_polar; /*!< PCM polar trig (falling clk edge & rising clk edge) */
|
uint8_t pcm_polar; /*!< PCM polar trig (falling clk edge & rising clk edge) */
|
||||||
bool hli; /*!< Using high level interrupt or not */
|
bool hli; /*!< Using high level interrupt or not */
|
||||||
|
uint16_t dup_list_refresh_period; /*!< Duplicate scan list refresh period */
|
||||||
uint32_t magic; /*!< Magic number */
|
uint32_t magic; /*!< Magic number */
|
||||||
} esp_bt_controller_config_t;
|
} esp_bt_controller_config_t;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user