From 257728feabe5bcb4323c1b53a3289df7041da478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CYangZhao=E2=80=9D?= Date: Wed, 24 Mar 2021 11:34:40 +0800 Subject: [PATCH 1/4] Fix the bug of modem sleep which may lead to the crash issue "assert(-218959118,0)" --- components/bt/controller/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/controller/lib b/components/bt/controller/lib index a0f8c35197..1541ed995b 160000 --- a/components/bt/controller/lib +++ b/components/bt/controller/lib @@ -1 +1 @@ -Subproject commit a0f8c35197270b14a8dc50dec37b5ba0136c0fea +Subproject commit 1541ed995ba21efd898c84dd95660d59d6746fd7 From 1fb45977fa2c8769867fe1520042896c63fdf2a0 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 23 Mar 2021 16:55:30 +0800 Subject: [PATCH 2/4] component/coex: Decouple Wi-Fi and bluetooth with coexist to reduce binary file size --- components/bt/controller/esp32/bt.c | 111 ++++++++++++++++++++++++++-- components/bt/controller/lib | 2 +- 2 files changed, 106 insertions(+), 7 deletions(-) diff --git a/components/bt/controller/esp32/bt.c b/components/bt/controller/esp32/bt.c index 2ce1fcec6f..a4f1c39373 100644 --- a/components/bt/controller/esp32/bt.c +++ b/components/bt/controller/esp32/bt.c @@ -176,6 +176,14 @@ struct osi_funcs_t { int (* _coex_register_bt_cb)(coex_func_cb_t cb); uint32_t (* _coex_bb_reset_lock)(void); void (* _coex_bb_reset_unlock)(uint32_t restore); + int (* _coex_schm_register_btdm_callback)(void *callback); + void (* _coex_schm_status_bit_clear)(uint32_t type, uint32_t status); + void (* _coex_schm_status_bit_set)(uint32_t type, uint32_t status); + uint32_t (* _coex_schm_interval_get)(void); + uint8_t (* _coex_schm_curr_period_get)(void); + void *(* _coex_schm_curr_phase_get)(void); + int (* _coex_wifi_channel_get)(uint8_t *primary, uint8_t *secondary); + int (* _coex_register_wifi_channel_change_callback)(void *cb); uint32_t _magic; }; @@ -224,6 +232,14 @@ extern int coex_bt_release(uint32_t event); extern int coex_register_bt_cb(coex_func_cb_t cb); extern uint32_t coex_bb_reset_lock(void); extern void coex_bb_reset_unlock(uint32_t restore); +extern int coex_schm_register_btdm_callback(void *callback); +extern void coex_schm_status_bit_clear(uint32_t type, uint32_t status); +extern void coex_schm_status_bit_set(uint32_t type, uint32_t status); +extern uint32_t coex_schm_interval_get(void); +extern uint8_t coex_schm_curr_period_get(void); +extern void * coex_schm_curr_phase_get(void); +extern int coex_wifi_channel_get(uint8_t *primary, uint8_t *secondary); +extern int coex_register_wifi_channel_change_callback(void *cb); extern void coex_ble_adv_priority_high_set(bool high); extern char _bss_start_btdm; @@ -294,7 +310,14 @@ static int coex_bt_release_wrapper(uint32_t event); static int coex_register_bt_cb_wrapper(coex_func_cb_t cb); static uint32_t coex_bb_reset_lock_wrapper(void); static void coex_bb_reset_unlock_wrapper(uint32_t restore); - +static int coex_schm_register_btdm_callback_wrapper(void *callback); +static void coex_schm_status_bit_clear_wrapper(uint32_t type, uint32_t status); +static void coex_schm_status_bit_set_wrapper(uint32_t type, uint32_t status); +static uint32_t coex_schm_interval_get_wrapper(void); +static uint8_t coex_schm_curr_period_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_register_wifi_channel_change_callback_wrapper(void *cb); /* Local variable definition *************************************************************************** */ @@ -348,6 +371,14 @@ static const struct osi_funcs_t osi_funcs_ro = { ._coex_register_bt_cb = coex_register_bt_cb_wrapper, ._coex_bb_reset_lock = coex_bb_reset_lock_wrapper, ._coex_bb_reset_unlock = coex_bb_reset_unlock_wrapper, + ._coex_schm_register_btdm_callback = coex_schm_register_btdm_callback_wrapper, + ._coex_schm_status_bit_clear = coex_schm_status_bit_clear_wrapper, + ._coex_schm_status_bit_set = coex_schm_status_bit_set_wrapper, + ._coex_schm_interval_get = coex_schm_interval_get_wrapper, + ._coex_schm_curr_period_get = coex_schm_curr_period_get_wrapper, + ._coex_schm_curr_phase_get = coex_schm_curr_phase_get_wrapper, + ._coex_wifi_channel_get = coex_wifi_channel_get_wrapper, + ._coex_register_wifi_channel_change_callback = coex_register_wifi_channel_change_callback_wrapper, ._magic = OSI_MAGIC_VALUE, }; @@ -1001,7 +1032,7 @@ static void coex_bt_wakeup_request_end(void) return; } -int IRAM_ATTR coex_bt_request_wrapper(uint32_t event, uint32_t latency, uint32_t duration) +static int IRAM_ATTR coex_bt_request_wrapper(uint32_t event, uint32_t latency, uint32_t duration) { #if CONFIG_SW_COEXIST_ENABLE return coex_bt_request(event, latency, duration); @@ -1010,7 +1041,7 @@ int IRAM_ATTR coex_bt_request_wrapper(uint32_t event, uint32_t latency, uint32_t #endif } -int IRAM_ATTR coex_bt_release_wrapper(uint32_t event) +static int IRAM_ATTR coex_bt_release_wrapper(uint32_t event) { #if CONFIG_SW_COEXIST_ENABLE return coex_bt_release(event); @@ -1019,7 +1050,7 @@ int IRAM_ATTR coex_bt_release_wrapper(uint32_t event) #endif } -int coex_register_bt_cb_wrapper(coex_func_cb_t cb) +static int coex_register_bt_cb_wrapper(coex_func_cb_t cb) { #if CONFIG_SW_COEXIST_ENABLE return coex_register_bt_cb(cb); @@ -1028,7 +1059,7 @@ int coex_register_bt_cb_wrapper(coex_func_cb_t cb) #endif } -uint32_t IRAM_ATTR coex_bb_reset_lock_wrapper(void) +static uint32_t IRAM_ATTR coex_bb_reset_lock_wrapper(void) { #if CONFIG_SW_COEXIST_ENABLE return coex_bb_reset_lock(); @@ -1037,13 +1068,81 @@ uint32_t IRAM_ATTR coex_bb_reset_lock_wrapper(void) #endif } -void IRAM_ATTR coex_bb_reset_unlock_wrapper(uint32_t restore) +static void IRAM_ATTR coex_bb_reset_unlock_wrapper(uint32_t restore) { #if CONFIG_SW_COEXIST_ENABLE coex_bb_reset_unlock(restore); #endif } +static int coex_schm_register_btdm_callback_wrapper(void *callback) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_register_btdm_callback(callback); +#else + return 0; +#endif +} + +static void coex_schm_status_bit_clear_wrapper(uint32_t type, uint32_t status) +{ +#if CONFIG_SW_COEXIST_ENABLE + coex_schm_status_bit_clear(type, status); +#endif +} + +static void coex_schm_status_bit_set_wrapper(uint32_t type, uint32_t status) +{ +#if CONFIG_SW_COEXIST_ENABLE + coex_schm_status_bit_set(type, status); +#endif +} + +static uint32_t coex_schm_interval_get_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_interval_get(); +#else + return 0; +#endif +} + +static uint8_t coex_schm_curr_period_get_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_curr_period_get(); +#else + return 0; +#endif +} + +static void * coex_schm_curr_phase_get_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_curr_phase_get(); +#else + return NULL; +#endif +} + +static int coex_wifi_channel_get_wrapper(uint8_t *primary, uint8_t *secondary) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_wifi_channel_get(primary, secondary); +#else + return 0; +#endif +} + +static int coex_register_wifi_channel_change_callback_wrapper(void *cb) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_register_wifi_channel_change_callback(cb); +#else + return 0; +#endif +} + bool esp_vhci_host_check_send_available(void) { return API_vhci_host_check_send_available(); diff --git a/components/bt/controller/lib b/components/bt/controller/lib index 1541ed995b..e6111ea30a 160000 --- a/components/bt/controller/lib +++ b/components/bt/controller/lib @@ -1 +1 @@ -Subproject commit 1541ed995ba21efd898c84dd95660d59d6746fd7 +Subproject commit e6111ea30aa81959c7e85956ba2db78407910859 From 8e482c94233402665c5bb98520e3c389b7ca03e9 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 23 Mar 2021 21:11:12 +0800 Subject: [PATCH 3/4] components/bt: Fix assert without sw coexist enabled --- components/bt/controller/esp32/bt.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/bt/controller/esp32/bt.c b/components/bt/controller/esp32/bt.c index a4f1c39373..c7c8ccf809 100644 --- a/components/bt/controller/esp32/bt.c +++ b/components/bt/controller/esp32/bt.c @@ -1112,7 +1112,7 @@ static uint8_t coex_schm_curr_period_get_wrapper(void) #if CONFIG_SW_COEXIST_ENABLE return coex_schm_curr_period_get(); #else - return 0; + return 1; #endif } @@ -1130,7 +1130,7 @@ static int coex_wifi_channel_get_wrapper(uint8_t *primary, uint8_t *secondary) #if CONFIG_SW_COEXIST_ENABLE return coex_wifi_channel_get(primary, secondary); #else - return 0; + return -1; #endif } @@ -1139,7 +1139,7 @@ static int coex_register_wifi_channel_change_callback_wrapper(void *cb) #if CONFIG_SW_COEXIST_ENABLE return coex_register_wifi_channel_change_callback(cb); #else - return 0; + return -1; #endif } From 72b27f1782528f67b8f0c302a0efd6da6e2684b0 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 23 Mar 2021 21:14:03 +0800 Subject: [PATCH 4/4] components/bt: Synchronize multiple branch of bt lib --- components/bt/controller/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/controller/lib b/components/bt/controller/lib index e6111ea30a..55d1bc8b7c 160000 --- a/components/bt/controller/lib +++ b/components/bt/controller/lib @@ -1 +1 @@ -Subproject commit e6111ea30aa81959c7e85956ba2db78407910859 +Subproject commit 55d1bc8b7ccbdcd19be0b9b52d6abfc7fad2866a