@@ -196,7 +196,8 @@ extern void btdm_controller_enable_sleep(bool enable);
196196extern void btdm_controller_set_sleep_mode (uint8_t mode );
197197extern uint8_t btdm_controller_get_sleep_mode (void );
198198extern bool btdm_power_state_active (void );
199- extern void btdm_wakeup_request (void );
199+ extern void btdm_wakeup_request (bool request_lock );
200+ extern void btdm_wakeup_request_end (void );
200201/* Low Power Clock */
201202extern bool btdm_lpclk_select_src (uint32_t sel );
202203extern bool btdm_lpclk_set_div (uint32_t div );
@@ -879,16 +880,24 @@ bool esp_vhci_host_check_send_available(void)
879880
880881void esp_vhci_host_send_packet (uint8_t * data , uint16_t len )
881882{
883+ bool do_wakeup_request = false;
884+
882885 if (!btdm_power_state_active ()) {
883886#if CONFIG_PM_ENABLE
884887 if (semphr_take_wrapper (s_pm_lock_sem , 0 )) {
885888 esp_pm_lock_acquire (s_pm_lock );
886889 }
887890 esp_timer_stop (s_btdm_slp_tmr );
888891#endif
889- btdm_wakeup_request ();
892+ do_wakeup_request = true;
893+ btdm_wakeup_request (true);
890894 }
895+
891896 API_vhci_host_send_packet (data , len );
897+
898+ if (do_wakeup_request ) {
899+ btdm_wakeup_request_end ();
900+ }
892901}
893902
894903esp_err_t esp_vhci_host_register_callback (const esp_vhci_host_callback_t * callback )
@@ -1290,7 +1299,7 @@ esp_err_t esp_bt_controller_disable(void)
12901299 if (btdm_controller_get_sleep_mode () == BTDM_MODEM_SLEEP_MODE_ORIG ) {
12911300 btdm_controller_enable_sleep (false);
12921301 if (!btdm_power_state_active ()) {
1293- btdm_wakeup_request ();
1302+ btdm_wakeup_request (false );
12941303 }
12951304 while (!btdm_power_state_active ()) {
12961305 ets_delay_us (1000 );
@@ -1426,7 +1435,7 @@ void esp_bt_controller_wakeup_request(void)
14261435 return ;
14271436 }
14281437
1429- btdm_wakeup_request ();
1438+ btdm_wakeup_request (false );
14301439}
14311440
14321441esp_err_t esp_bredr_sco_datapath_set (esp_sco_data_path_t data_path )
0 commit comments