forked from espressif/esp-idf
esp32: fix coex bug
1. fix BLE connection missing in coex mode 2. modify other parameters to make coex priority more reasonable 3. fix modem sleep procedure trap cause Wifi disable RF when BT is working. Such cause that BR/EDR is difficult to be connected, BLE connection stability decrease and so on. 4. modify BR/EDR coexist duration to imrove BR/EDR connect success ratio. 5. Due to the hardware coexist bug, BLE scan interval/window should be less than 0x100(about 160ms). Therefore, it will cause BLE cannot scan any advertising packet while WiFi have higher priority behaviour(such like RX beacon, scan, TX/RX VO packets and etc.).
This commit is contained in:
@@ -915,7 +915,14 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
||||
|
||||
esp_phy_load_cal_and_init(PHY_BT_MODULE);
|
||||
|
||||
if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
|
||||
if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_NONE) {
|
||||
//Just register to sleep module, make the modem sleep modules check BT sleep status when sleep enter.
|
||||
//Thus, it will prevent WIFI from disabling RF when BT is not in sleep but is using RF.
|
||||
esp_modem_sleep_register(MODEM_BLE_MODULE);
|
||||
esp_modem_sleep_register(MODEM_CLASSIC_BT_MODULE);
|
||||
esp_modem_sleep_exit(MODEM_BLE_MODULE);
|
||||
esp_modem_sleep_exit(MODEM_CLASSIC_BT_MODULE);
|
||||
} else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
|
||||
esp_modem_sleep_register(MODEM_BLE_MODULE);
|
||||
esp_modem_sleep_register(MODEM_CLASSIC_BT_MODULE);
|
||||
} else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_EVED) {
|
||||
@@ -933,7 +940,8 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
||||
|
||||
ret = btdm_controller_enable(mode);
|
||||
if (ret) {
|
||||
if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
|
||||
if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_NONE
|
||||
|| btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
|
||||
esp_modem_sleep_deregister(MODEM_BLE_MODULE);
|
||||
esp_modem_sleep_deregister(MODEM_CLASSIC_BT_MODULE);
|
||||
} else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_EVED) {
|
||||
@@ -973,7 +981,8 @@ esp_err_t esp_bt_controller_disable(void)
|
||||
}
|
||||
|
||||
if (ret == ESP_BT_MODE_IDLE) {
|
||||
if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
|
||||
if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_NONE
|
||||
|| btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
|
||||
esp_modem_sleep_deregister(MODEM_BLE_MODULE);
|
||||
esp_modem_sleep_deregister(MODEM_CLASSIC_BT_MODULE);
|
||||
} else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_EVED) {
|
||||
|
Submodule components/bt/lib updated: e0740ac07b...48b2459bcb
@@ -202,6 +202,10 @@ esp_err_t esp_modem_sleep_exit(modem_sleep_module_t module);
|
||||
|
||||
/**
|
||||
* @brief Register module to make it be able to require to enter/exit modem sleep
|
||||
* Although the module has no sleep function, as long as the module use RF,
|
||||
* it must call esp_modem_sleep_regsiter. Otherwise, other modules with sleep
|
||||
* function will disable RF without checking the module which doesn't call
|
||||
* esp_modem_sleep_regsiter.
|
||||
*/
|
||||
esp_err_t esp_modem_sleep_register(modem_sleep_module_t module);
|
||||
|
||||
|
Submodule components/esp32/lib updated: 534a9b1410...0bfda8bbf6
Reference in New Issue
Block a user