diff --git a/components/bt/Kconfig b/components/bt/Kconfig index a1ab51c74..6d340656b 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -358,6 +358,21 @@ menu "Bluetooth" If you set `BTDM_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 ESP32_WIFI_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 choice BT_HOST diff --git a/components/bt/controller/bt.c b/components/bt/controller/bt.c index 0453a102e..fd093e5cc 100644 --- a/components/bt/controller/bt.c +++ b/components/bt/controller/bt.c @@ -225,6 +225,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; @@ -1191,6 +1192,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/controller/lib b/components/bt/controller/lib index 484307604..aaadbf2c2 160000 --- a/components/bt/controller/lib +++ b/components/bt/controller/lib @@ -1 +1 @@ -Subproject commit 484307604fad19b82afca4ff2e57fda63158c2b4 +Subproject commit aaadbf2c26002ae85c175cb0e469a3b0bf57bf02 diff --git a/components/esp32/esp_adapter.c b/components/esp32/esp_adapter.c index 4fdd5ce65..0e8ec3be7 100644 --- a/components/esp32/esp_adapter.c +++ b/components/esp32/esp_adapter.c @@ -440,6 +440,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_ESP32_WIFI_SW_COEXIST_ENABLE @@ -591,6 +598,7 @@ wifi_osi_funcs_t g_wifi_osi_funcs = { ._modem_sleep_register = esp_modem_sleep_register, ._modem_sleep_deregister = esp_modem_sleep_deregister, ._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/esp_wifi/include/esp_coexist_internal.h b/components/esp_wifi/include/esp_coexist_internal.h index 1d94d6db7..63f35666d 100644 --- a/components/esp_wifi/include/esp_coexist_internal.h +++ b/components/esp_wifi/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/esp_wifi/include/esp_private/wifi_os_adapter.h b/components/esp_wifi/include/esp_private/wifi_os_adapter.h index 912ec3a53..89422c51c 100644 --- a/components/esp_wifi/include/esp_private/wifi_os_adapter.h +++ b/components/esp_wifi/include/esp_private/wifi_os_adapter.h @@ -21,7 +21,7 @@ extern "C" { #endif -#define ESP_WIFI_OS_ADAPTER_VERSION 0x00000003 +#define ESP_WIFI_OS_ADAPTER_VERSION 0x00000004 #define ESP_WIFI_OS_ADAPTER_MAGIC 0xDEADBEAF #define OSI_FUNCS_TIME_BLOCKING 0xffffffff @@ -120,6 +120,7 @@ typedef struct { int32_t (* _modem_sleep_register)(uint32_t module); int32_t (* _modem_sleep_deregister)(uint32_t module); 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/esp_wifi/lib_esp32 b/components/esp_wifi/lib_esp32 index 9518ffc61..e0e387d91 160000 --- a/components/esp_wifi/lib_esp32 +++ b/components/esp_wifi/lib_esp32 @@ -1 +1 @@ -Subproject commit 9518ffc61013bcc6dfab034470fbb1bc60225c24 +Subproject commit e0e387d9118a5e7c939b8025e8db680c5620a6a2 diff --git a/components/idf_test/include/idf_performance.h b/components/idf_test/include/idf_performance.h index 8a952c406..8bc95a253 100644 --- a/components/idf_test/include/idf_performance.h +++ b/components/idf_test/include/idf_performance.h @@ -17,7 +17,7 @@ // throughput performance by iperf #define IDF_PERFORMANCE_MIN_TCP_RX_THROUGHPUT 45 #define IDF_PERFORMANCE_MIN_TCP_TX_THROUGHPUT 40 -#define IDF_PERFORMANCE_MIN_UDP_RX_THROUGHPUT 64 +#define IDF_PERFORMANCE_MIN_UDP_RX_THROUGHPUT 63 #define IDF_PERFORMANCE_MIN_UDP_TX_THROUGHPUT 50 // events dispatched per second by event loop library #define IDF_PERFORMANCE_MIN_EVENT_DISPATCH 25000