From 6f4e257601bfeadd494dff03bd7188762b934ab3 Mon Sep 17 00:00:00 2001 From: baohongde Date: Thu, 26 Dec 2019 15:36:31 +0800 Subject: [PATCH 1/5] Increase TCP send buffer and receive window limitation when TCP window scale is enabled --- components/lwip/Kconfig | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/lwip/Kconfig b/components/lwip/Kconfig index f03844147d..586bf0e02c 100644 --- a/components/lwip/Kconfig +++ b/components/lwip/Kconfig @@ -320,7 +320,8 @@ menu "LWIP" config LWIP_TCP_SND_BUF_DEFAULT int "Default send buffer size" default 5744 # 4 * default MSS - range 2440 65535 + range 2440 65535 if !LWIP_WND_SCALE + range 2440 1024000 if LWIP_WND_SCALE help Set default send buffer size for new TCP sockets. @@ -336,7 +337,8 @@ menu "LWIP" config LWIP_TCP_WND_DEFAULT int "Default receive window size" default 5744 # 4 * default MSS - range 2440 65535 + range 2440 65535 if !LWIP_WND_SCALE + range 2440 1024000 if LWIP_WND_SCALE help Set default TCP receive window size for new TCP sockets. From c48a94d4a8c4415af36060f7d5fa782453c9efc8 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 18 Feb 2020 11:07:16 +0800 Subject: [PATCH 2/5] components/mesh: Fix some bugs about mesh fix send acl pkt after ble have sent terminate ind modify min adv interval to 10ms --- .../bt/host/bluedroid/stack/include/stack/btm_ble_api.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h b/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h index 2ac01ea2eb..75d156c730 100644 --- a/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h +++ b/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h @@ -105,7 +105,7 @@ typedef UINT8 tBTM_BLE_SFP; #endif /* adv parameter boundary values */ -#define BTM_BLE_ADV_INT_MIN 0x0020 +#define BTM_BLE_ADV_INT_MIN 0x0010 #define BTM_BLE_ADV_INT_MAX 0x4000 /* Full scan boundary values */ @@ -2104,8 +2104,8 @@ tBTM_STATUS BTM_UpdateBleDuplicateExceptionalList(uint8_t subcode, uint32_t type ** ** Function BTM_GetCurrentConnParams ** -** Description This function is called to read the current connection parameters -** of the device +** Description This function is called to read the current connection parameters +** of the device ** ** Returns TRUE or FALSE ** From 78ecc043d526a2829c2148a07b6214ee87e91b34 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 18 Feb 2020 11:53:55 +0800 Subject: [PATCH 3/5] Improve coexistence performance according to specific WiFi/BT/BLE scienario 1. Improve WiFi performance in some Classic BT scienario(idle, inquire scan, connecting, connected, sniff, a2dp pause, etc). 2. Support WiFi + Classic BT + BLE mesh coexistence scienario. 3. Improve WiFi scan and connect performance in coexistence scienario. --- components/bt/Kconfig | 4 +-- components/bt/controller/lib | 2 +- .../bt/host/bluedroid/bta/av/bta_av_aact.c | 14 ++++++++ .../bt/host/bluedroid/bta/dm/bta_dm_act.c | 3 +- .../bt/host/bluedroid/bta/dm/bta_dm_main.c | 32 +++++++++++++++++ .../host/bluedroid/bta/include/bta/bta_api.h | 16 ++++++++- components/esp_wifi/Kconfig | 31 ---------------- components/esp_wifi/include/esp_coexist.h | 36 ++++++++++++++++++- components/esp_wifi/lib_esp32 | 2 +- components/esp_wifi/sdkconfig.rename | 5 --- components/esp_wifi/src/phy_init.c | 1 - 11 files changed, 102 insertions(+), 44 deletions(-) diff --git a/components/bt/Kconfig b/components/bt/Kconfig index 2261333b8a..f105b2a4a0 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -332,8 +332,8 @@ menu "Bluetooth" config BTDM_CTRL_FULL_SCAN_SUPPORTED bool "BLE full scan feature supported" - depends on BTDM_CTRL_MODE_BLE_ONLY - default n + depends on BTDM_CONTROLLER_MODE_BLE_ONLY || BTDM_CONTROLLER_MODE_BTDM + default y help The full scan function is mainly used to provide BLE scan performance. This is required for scenes with high scan performance requirements, such as BLE Mesh scenes. diff --git a/components/bt/controller/lib b/components/bt/controller/lib index 0a707c811e..f1ea6a5b8c 160000 --- a/components/bt/controller/lib +++ b/components/bt/controller/lib @@ -1 +1 @@ -Subproject commit 0a707c811ee824c9777b8712d2edf979fa8d2a2e +Subproject commit f1ea6a5b8c50de1b561cd75090140ad9af68070a diff --git a/components/bt/host/bluedroid/bta/av/bta_av_aact.c b/components/bt/host/bluedroid/bta/av/bta_av_aact.c index 52f0809ab6..fb4a1fe93f 100644 --- a/components/bt/host/bluedroid/bta/av/bta_av_aact.c +++ b/components/bt/host/bluedroid/bta/av/bta_av_aact.c @@ -41,6 +41,7 @@ #if( defined BTA_AR_INCLUDED ) && (BTA_AR_INCLUDED == TRUE) #include "bta/bta_ar_api.h" #endif +#include "bta/bta_api.h" /***************************************************************************** ** Constants @@ -508,8 +509,21 @@ static void bta_av_proc_stream_evt(UINT8 handle, BD_ADDR bd_addr, UINT8 event, t /* look up application event */ if ((p_data == NULL) || (p_data->hdr.err_code == 0)) { p_msg->hdr.event = bta_av_stream_evt_ok[event]; + if (p_msg->hdr.event == BTA_AV_STR_START_OK_EVT) { + BTA_DmCoexEventTrigger(BTA_COEX_EVT_STREAMING_STARTED); + } else if (p_msg->hdr.event == BTA_AV_STR_START_FAIL_EVT || + p_msg->hdr.event == BTA_AV_STR_SUSPEND_CFM_EVT || + p_msg->hdr.event == BTA_AV_STR_CLOSE_EVT) { + BTA_DmCoexEventTrigger(BTA_COEX_EVT_STREAMING_STOPPED); + } } else { p_msg->hdr.event = bta_av_stream_evt_fail[event]; + if (p_msg->hdr.event == BTA_AV_STR_START_FAIL_EVT || + p_msg->hdr.event == BTA_AV_STR_START_OK_EVT || + p_msg->hdr.event == BTA_AV_STR_SUSPEND_CFM_EVT || + p_msg->hdr.event == BTA_AV_STR_CLOSE_EVT) { + BTA_DmCoexEventTrigger(BTA_COEX_EVT_STREAMING_STOPPED); + } } p_msg->initiator = FALSE; diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c index bb7c83dbc0..6ff8d1dc71 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c @@ -821,7 +821,6 @@ void bta_dm_set_visibility(tBTA_DM_MSG *p_data) if (p_data->set_visibility.pair_mode != BTA_DM_IGNORE || p_data->set_visibility.conn_paired_only != BTA_DM_IGNORE) { BTM_SetPairableMode((BOOLEAN)(!(bta_dm_cb.disable_pair_mode)), bta_dm_cb.conn_paired_only); } - } /******************************************************************************* @@ -3230,6 +3229,7 @@ static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) p_msg->transport = p_data->conn.transport; p_msg->handle = p_data->conn.handle; #endif + BTA_DmCoexEventTrigger(BTA_COEX_EVT_ACL_CONNECTED); break; case BTM_BL_DISCN_EVT: bdcpy(p_msg->bd_addr, p_data->discn.p_bda); @@ -3237,6 +3237,7 @@ static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) p_msg->transport = p_data->discn.transport; p_msg->handle = p_data->discn.handle; #endif + BTA_DmCoexEventTrigger(BTA_COEX_EVT_ACL_DISCONNECTED); break; case BTM_BL_UPDATE_EVT: p_msg->busy_level = p_data->update.busy_level; diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c index d62974ea2e..5f0c93bce3 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c @@ -28,6 +28,7 @@ #include "osi/allocator.h" #include +#include "esp_coexist.h" /***************************************************************************** ** Constants and types @@ -402,6 +403,37 @@ BOOLEAN bta_dm_sm_execute(BT_HDR *p_msg) return TRUE; } +void BTA_DmCoexEventTrigger(uint32_t event) +{ + switch(event) { + case BTA_COEX_EVT_SCAN_STARTED: + case BTA_COEX_EVT_SCAN_STOPPED: + case BTA_COEX_EVT_SNIFF_ENTER: + case BTA_COEX_EVT_SNIFF_EXIT: + case BTA_COEX_EVT_A2DP_PAUSED_ENTER: + case BTA_COEX_EVT_A2DP_PAUSED_EXIT: + break; + case BTA_COEX_EVT_ACL_CONNECTED: + esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_STREAMING); + esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_PAUSED); + break; + case BTA_COEX_EVT_ACL_DISCONNECTED: + esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_STREAMING); + esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_PAUSED); + break; + case BTA_COEX_EVT_STREAMING_STARTED: + esp_coex_status_bit_set(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_STREAMING); + esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_PAUSED); + break; + case BTA_COEX_EVT_STREAMING_STOPPED: + esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_STREAMING); + esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_PAUSED); + break; + default: + break; + } +} + /******************************************************************************* ** ** Function bta_dm_sm_search_disable diff --git a/components/bt/host/bluedroid/bta/include/bta/bta_api.h b/components/bt/host/bluedroid/bta/include/bta/bta_api.h index c9349e80ec..0a3b41d5da 100644 --- a/components/bt/host/bluedroid/bta/include/bta/bta_api.h +++ b/components/bt/host/bluedroid/bta/include/bta/bta_api.h @@ -2636,9 +2636,23 @@ extern void BTA_VendorInit (void); ** *******************************************************************************/ extern void BTA_VendorCleanup (void); - #endif +enum { + BTA_COEX_EVT_SCAN_STARTED = 1, + BTA_COEX_EVT_SCAN_STOPPED, + BTA_COEX_EVT_ACL_CONNECTED, + BTA_COEX_EVT_ACL_DISCONNECTED, + BTA_COEX_EVT_STREAMING_STARTED, + BTA_COEX_EVT_STREAMING_STOPPED, + BTA_COEX_EVT_SNIFF_ENTER, + BTA_COEX_EVT_SNIFF_EXIT, + BTA_COEX_EVT_A2DP_PAUSED_ENTER, + BTA_COEX_EVT_A2DP_PAUSED_EXIT, +}; + +extern void BTA_DmCoexEventTrigger(uint32_t event); + #ifdef __cplusplus } #endif diff --git a/components/esp_wifi/Kconfig b/components/esp_wifi/Kconfig index 8e1430578a..306dfc8f0c 100644 --- a/components/esp_wifi/Kconfig +++ b/components/esp_wifi/Kconfig @@ -12,37 +12,6 @@ menu "Wi-Fi" If only Bluetooth is used, it is recommended to disable this option to reduce binary file size. - choice ESP32_WIFI_SW_COEXIST_PREFERENCE - prompt "WiFi/Bluetooth coexistence performance preference" - depends on ESP32_WIFI_SW_COEXIST_ENABLE - default ESP32_WIFI_SW_COEXIST_PREFERENCE_BALANCE - help - Choose Bluetooth/WiFi/Balance for different preference. - If choose WiFi, it will make WiFi performance better. Such, keep WiFi Audio more fluent. - If choose Bluetooth, it will make Bluetooth performance better. Such, keep Bluetooth(A2DP) Audio more - fluent. - If choose Balance, the performance of WiFi and bluetooth will be balance. It's default. Normally, just - choose balance, the A2DP audio can play fluently, too. - Except config preference in menuconfig, you can also call esp_coex_preference_set() dynamically. - - config ESP32_WIFI_SW_COEXIST_PREFERENCE_WIFI - bool "WiFi" - - config ESP32_WIFI_SW_COEXIST_PREFERENCE_BT - bool "Bluetooth(include BR/EDR and BLE)" - - config ESP32_WIFI_SW_COEXIST_PREFERENCE_BALANCE - bool "Balance" - - endchoice - - config ESP32_WIFI_SW_COEXIST_PREFERENCE_VALUE - int - depends on ESP32_WIFI_SW_COEXIST_ENABLE - default 0 if ESP32_WIFI_SW_COEXIST_PREFERENCE_WIFI - default 1 if ESP32_WIFI_SW_COEXIST_PREFERENCE_BT - default 2 if ESP32_WIFI_SW_COEXIST_PREFERENCE_BALANCE - config ESP32_WIFI_STATIC_RX_BUFFER_NUM int "Max number of WiFi static RX buffers" range 2 25 if !SPIRAM_TRY_ALLOCATE_WIFI_LWIP diff --git a/components/esp_wifi/include/esp_coexist.h b/components/esp_wifi/include/esp_coexist.h index c9b241d3dc..1ff624d9b5 100644 --- a/components/esp_wifi/include/esp_coexist.h +++ b/components/esp_wifi/include/esp_coexist.h @@ -32,6 +32,22 @@ typedef enum { ESP_COEX_PREFER_NUM, /*!< Prefer value numbers */ } esp_coex_prefer_t; +/** + * @brief coex status type + */ +typedef enum { + ESP_COEX_ST_TYPE_WIFI = 0, + ESP_COEX_ST_TYPE_BLE, + ESP_COEX_ST_TYPE_BT, +} esp_coex_status_type_t; + +#define ESP_COEX_BLE_ST_MESH_CONFIG 0x08 +#define ESP_COEX_BLE_ST_MESH_TRAFFIC 0x10 +#define ESP_COEX_BLE_ST_MESH_STANDBY 0x20 + +#define ESP_COEX_BT_ST_A2DP_STREAMING 0x10 +#define ESP_COEX_BT_ST_A2DP_PAUSED 0x20 + /** * @brief Get software coexist version string * @@ -40,7 +56,8 @@ typedef enum { const char *esp_coex_version_get(void); /** - * @brief Set coexist preference of performance + * @deprecated Use esp_coex_status_bit_set() and esp_coex_status_bit_clear() instead. + * Set coexist preference of performance * For example, if prefer to bluetooth, then it will make A2DP(play audio via classic bt) * more smooth while wifi is runnning something. * If prefer to wifi, it will do similar things as prefer to bluetooth. @@ -51,6 +68,23 @@ const char *esp_coex_version_get(void); */ esp_err_t esp_coex_preference_set(esp_coex_prefer_t prefer); +/** + * @brief Set coex schm status + * @param type : WIFI/BLE/BT + * @param status : WIFI/BLE/BT STATUS + * @return : ESP_OK - success, other - failed + */ +esp_err_t esp_coex_status_bit_set(esp_coex_status_type_t type, uint32_t status); + +/** + * @brief Clear coex schm status + * @param type : WIFI/BLE/BT + * @param status : WIFI/BLE/BT STATUS + * @return : ESP_OK - success, other - failed + */ +esp_err_t esp_coex_status_bit_clear(esp_coex_status_type_t type, uint32_t status); + + #ifdef __cplusplus } #endif diff --git a/components/esp_wifi/lib_esp32 b/components/esp_wifi/lib_esp32 index 6de7aa2cd7..595c6bd742 160000 --- a/components/esp_wifi/lib_esp32 +++ b/components/esp_wifi/lib_esp32 @@ -1 +1 @@ -Subproject commit 6de7aa2cd72eb9a423378cf5e4f7e80df091fbca +Subproject commit 595c6bd742834f02dd659abec437f9e233e3cdf0 diff --git a/components/esp_wifi/sdkconfig.rename b/components/esp_wifi/sdkconfig.rename index a9de8bd4ec..8d55abed31 100644 --- a/components/esp_wifi/sdkconfig.rename +++ b/components/esp_wifi/sdkconfig.rename @@ -2,8 +2,3 @@ # CONFIG_DEPRECATED_OPTION CONFIG_NEW_OPTION CONFIG_SW_COEXIST_ENABLE CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE -CONFIG_SW_COEXIST_PREFERENCE CONFIG_ESP32_WIFI_SW_COEXIST_PREFERENCE -CONFIG_SW_COEXIST_PREFERENCE_WIFI CONFIG_ESP32_WIFI_SW_COEXIST_PREFERENCE_WIFI -CONFIG_SW_COEXIST_PREFERENCE_BT CONFIG_ESP32_WIFI_SW_COEXIST_PREFERENCE_BT -CONFIG_SW_COEXIST_PREFERENCE_BALANCE CONFIG_ESP32_WIFI_SW_COEXIST_PREFERENCE_BALANCE -CONFIG_SW_COEXIST_PREFERENCE_VALUE CONFIG_ESP32_WIFI_SW_COEXIST_PREFERENCE_VALUE diff --git a/components/esp_wifi/src/phy_init.c b/components/esp_wifi/src/phy_init.c index 6b867dfa07..01d684c02b 100644 --- a/components/esp_wifi/src/phy_init.c +++ b/components/esp_wifi/src/phy_init.c @@ -237,7 +237,6 @@ esp_err_t esp_phy_rf_init(const esp_phy_init_data_t* init_data, esp_phy_calibrat uint32_t phy_bt_wifi_mask = BIT(PHY_BT_MODULE) | BIT(PHY_WIFI_MODULE); if ((s_module_phy_rf_init & phy_bt_wifi_mask) == phy_bt_wifi_mask) { //both wifi & bt enabled coex_init(); - coex_preference_set(CONFIG_ESP32_WIFI_SW_COEXIST_PREFERENCE_VALUE); coex_resume(); } } From d07b9e97d708c2e4de10db1a55988a444d4f1d29 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 18 Feb 2020 17:39:26 +0800 Subject: [PATCH 4/5] components/coex: Fix a2dp stuck after creating anther connection --- components/bt/host/bluedroid/bta/dm/bta_dm_act.c | 2 -- components/bt/host/bluedroid/bta/dm/bta_dm_main.c | 6 ------ 2 files changed, 8 deletions(-) diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c index 6ff8d1dc71..cf971ecc08 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c @@ -3229,7 +3229,6 @@ static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) p_msg->transport = p_data->conn.transport; p_msg->handle = p_data->conn.handle; #endif - BTA_DmCoexEventTrigger(BTA_COEX_EVT_ACL_CONNECTED); break; case BTM_BL_DISCN_EVT: bdcpy(p_msg->bd_addr, p_data->discn.p_bda); @@ -3237,7 +3236,6 @@ static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) p_msg->transport = p_data->discn.transport; p_msg->handle = p_data->discn.handle; #endif - BTA_DmCoexEventTrigger(BTA_COEX_EVT_ACL_DISCONNECTED); break; case BTM_BL_UPDATE_EVT: p_msg->busy_level = p_data->update.busy_level; diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c index 5f0c93bce3..38c094f822 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c @@ -412,14 +412,8 @@ void BTA_DmCoexEventTrigger(uint32_t event) case BTA_COEX_EVT_SNIFF_EXIT: case BTA_COEX_EVT_A2DP_PAUSED_ENTER: case BTA_COEX_EVT_A2DP_PAUSED_EXIT: - break; case BTA_COEX_EVT_ACL_CONNECTED: - esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_STREAMING); - esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_PAUSED); - break; case BTA_COEX_EVT_ACL_DISCONNECTED: - esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_STREAMING); - esp_coex_status_bit_clear(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_PAUSED); break; case BTA_COEX_EVT_STREAMING_STARTED: esp_coex_status_bit_set(ESP_COEX_ST_TYPE_BT, ESP_COEX_BT_ST_A2DP_STREAMING); From 53e355b355888e1bf33634d42daff821e23fee13 Mon Sep 17 00:00:00 2001 From: baohongde Date: Wed, 19 Feb 2020 11:41:03 +0800 Subject: [PATCH 5/5] components/coex: Fix misspell in Kconfig --- components/bt/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/Kconfig b/components/bt/Kconfig index f105b2a4a0..1292dd846b 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -332,7 +332,7 @@ menu "Bluetooth" config BTDM_CTRL_FULL_SCAN_SUPPORTED bool "BLE full scan feature supported" - depends on BTDM_CONTROLLER_MODE_BLE_ONLY || BTDM_CONTROLLER_MODE_BTDM + depends on BTDM_CTRL_MODE_BLE_ONLY || BTDM_CTRL_MODE_BTDM default y help The full scan function is mainly used to provide BLE scan performance.