forked from espressif/esp-idf
Coexist: fix some coexist bugs
1. Fix high beacon and broadcast packets loss ratio of WiFi to make MDNS test pass. 2. Improve stability of WiFi performance with a little sacrifice of throughput. 3. Improve BLE advertising and connection performance with dynamic priority. It sacrifices a little WiFi throughput, but achieves balance between WiFi and Bluetooth. 4. fix bug bb reset lock flag to avoid bb reset lock unhandle 5. fix bug wifi reset mac cause task watch dog timeout 6. fix bug wifi reset mac position
This commit is contained in:
@@ -315,6 +315,21 @@ menu Bluetooth
|
||||
If you set `BLE_ADV_REPORT_DISCARD_THRSHOLD` to a small value or printf every adv lost event, it
|
||||
may cause adv packets lost more.
|
||||
|
||||
menuconfig BTDM_COEX_BT_OPTIONS
|
||||
bool "Coexistence Bluetooth Side Options"
|
||||
depends on SW_COEXIST_ENABLE
|
||||
default n
|
||||
help
|
||||
Options of Bluetooth Side of WiFi and bluetooth coexistence.
|
||||
|
||||
config BTDM_COEX_BLE_ADV_HIGH_PRIORITY
|
||||
bool "Improve BLE ADV priority for WiFi & BLE coexistence"
|
||||
depends on BTDM_COEX_BT_OPTIONS
|
||||
default n
|
||||
help
|
||||
Improve BLE ADV coexistence priority to make it better performance.
|
||||
For example, BLE mesh need to enable this option to improve BLE adv performance.
|
||||
|
||||
endmenu
|
||||
|
||||
menuconfig BLUEDROID_ENABLED
|
||||
|
@@ -218,6 +218,7 @@ extern int coex_bt_release_wrapper(uint32_t event);
|
||||
extern int coex_register_bt_cb_wrapper(coex_func_cb_t cb);
|
||||
extern uint32_t coex_bb_reset_lock_wrapper(void);
|
||||
extern void coex_bb_reset_unlock_wrapper(uint32_t restore);
|
||||
extern void coex_ble_adv_priority_high_set(bool high);
|
||||
|
||||
extern char _bss_start_btdm;
|
||||
extern char _bss_end_btdm;
|
||||
@@ -1161,6 +1162,12 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
|
||||
goto error;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BTDM_COEX_BLE_ADV_HIGH_PRIORITY
|
||||
coex_ble_adv_priority_high_set(true);
|
||||
#else
|
||||
coex_ble_adv_priority_high_set(false);
|
||||
#endif
|
||||
|
||||
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_INITED;
|
||||
|
||||
return ESP_OK;
|
||||
|
Submodule components/bt/lib updated: 8e73c8d616...494fd0322a
@@ -441,6 +441,13 @@ static uint32_t coex_status_get_wrapper(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void coex_condition_set_wrapper(uint32_t type, bool dissatisfy)
|
||||
{
|
||||
#if CONFIG_SW_COEXIST_ENABLE
|
||||
coex_condition_set(type, dissatisfy);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int coex_wifi_request_wrapper(uint32_t event, uint32_t latency, uint32_t duration)
|
||||
{
|
||||
#if CONFIG_SW_COEXIST_ENABLE
|
||||
@@ -598,6 +605,7 @@ wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._sc_ack_send = sc_ack_send_wrapper,
|
||||
._sc_ack_send_stop = sc_ack_send_stop,
|
||||
._coex_status_get = coex_status_get_wrapper,
|
||||
._coex_condition_set = coex_condition_set_wrapper,
|
||||
._coex_wifi_request = coex_wifi_request_wrapper,
|
||||
._coex_wifi_release = coex_wifi_release_wrapper,
|
||||
._magic = ESP_WIFI_OS_ADAPTER_MAGIC,
|
||||
|
@@ -79,6 +79,12 @@ esp_err_t coex_preference_set(coex_prefer_t prefer);
|
||||
*/
|
||||
uint32_t coex_status_get(void);
|
||||
|
||||
/**
|
||||
* @brief Set software coexist condition.
|
||||
* @return : software coexist condition
|
||||
*/
|
||||
void coex_condition_set(uint32_t type, bool dissatisfy);
|
||||
|
||||
/**
|
||||
* @brief WiFi requests coexistence.
|
||||
*
|
||||
|
@@ -21,7 +21,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ESP_WIFI_OS_ADAPTER_VERSION 0x00000002
|
||||
#define ESP_WIFI_OS_ADAPTER_VERSION 0x00000004
|
||||
#define ESP_WIFI_OS_ADAPTER_MAGIC 0xDEADBEAF
|
||||
|
||||
#define OSI_FUNCS_TIME_BLOCKING 0xffffffff
|
||||
@@ -121,6 +121,7 @@ typedef struct {
|
||||
void (* _sc_ack_send)(void *param);
|
||||
void (* _sc_ack_send_stop)(void);
|
||||
uint32_t (* _coex_status_get)(void);
|
||||
void (* _coex_condition_set)(uint32_t type, bool dissatisfy);
|
||||
int32_t (* _coex_wifi_request)(uint32_t event, uint32_t latency, uint32_t duration);
|
||||
int32_t (* _coex_wifi_release)(uint32_t event);
|
||||
int32_t _magic;
|
||||
|
Submodule components/esp32/lib updated: d8ed35901f...fd85a82672
Reference in New Issue
Block a user