From 95923460905aa6f014fcbe90fea9ed31bb26dfce Mon Sep 17 00:00:00 2001 From: Xia Xiaotian Date: Thu, 10 Oct 2019 15:03:07 +0800 Subject: [PATCH] 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 --- components/bt/Kconfig | 15 +++++++++++++++ components/bt/bt.c | 7 +++++++ components/bt/lib | 2 +- components/esp32/esp_adapter.c | 8 ++++++++ components/esp32/include/esp_coexist_internal.h | 6 ++++++ components/esp32/include/esp_wifi_os_adapter.h | 3 ++- components/esp32/lib | 2 +- 7 files changed, 40 insertions(+), 3 deletions(-) diff --git a/components/bt/Kconfig b/components/bt/Kconfig index 477d1cefe..da2a31ead 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -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 diff --git a/components/bt/bt.c b/components/bt/bt.c index c93d55fbc..898e77b64 100644 --- a/components/bt/bt.c +++ b/components/bt/bt.c @@ -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; diff --git a/components/bt/lib b/components/bt/lib index 8e73c8d61..494fd0322 160000 --- a/components/bt/lib +++ b/components/bt/lib @@ -1 +1 @@ -Subproject commit 8e73c8d616da202265c76719ee9e37f40c7ad161 +Subproject commit 494fd0322ab7ab325ede4274757332fc78b0e9e0 diff --git a/components/esp32/esp_adapter.c b/components/esp32/esp_adapter.c index 1a0ecb18e..96914401d 100644 --- a/components/esp32/esp_adapter.c +++ b/components/esp32/esp_adapter.c @@ -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, diff --git a/components/esp32/include/esp_coexist_internal.h b/components/esp32/include/esp_coexist_internal.h index 1d94d6db7..63f35666d 100644 --- a/components/esp32/include/esp_coexist_internal.h +++ b/components/esp32/include/esp_coexist_internal.h @@ -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. * diff --git a/components/esp32/include/esp_wifi_os_adapter.h b/components/esp32/include/esp_wifi_os_adapter.h index 165caa6ed..c8b8766de 100644 --- a/components/esp32/include/esp_wifi_os_adapter.h +++ b/components/esp32/include/esp_wifi_os_adapter.h @@ -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; diff --git a/components/esp32/lib b/components/esp32/lib index d8ed35901..fd85a8267 160000 --- a/components/esp32/lib +++ b/components/esp32/lib @@ -1 +1 @@ -Subproject commit d8ed35901f604ce5f3087336bb1b41b8c3b887c8 +Subproject commit fd85a826728dc41dc357263ca38e3341abd6949f