diff --git a/components/esp8266/include/esp_sleep.h b/components/esp8266/include/esp_sleep.h index b783bb75..367dd892 100644 --- a/components/esp8266/include/esp_sleep.h +++ b/components/esp8266/include/esp_sleep.h @@ -26,6 +26,11 @@ typedef enum { WIFI_MODEM_SLEEP_T } wifi_sleep_type_t; +typedef enum esp_sleep_mode { + ESP_CPU_WAIT = 0, + ESP_CPU_LIGHTSLEEP, +} esp_sleep_mode_t; + typedef void (*fpm_wakeup_cb)(void); /** diff --git a/components/esp8266/lib/VERSION b/components/esp8266/lib/VERSION index 37f7fd40..0134131d 100644 --- a/components/esp8266/lib/VERSION +++ b/components/esp8266/lib/VERSION @@ -1,6 +1,6 @@ gwen: core: 743c778 - net80211: da5ae93 + net80211: 5d845dd pp: 2c0db4c wpa: 743c778 espnow: 743c778 diff --git a/components/esp8266/lib/libnet80211.a b/components/esp8266/lib/libnet80211.a index 6437ce87..16fbf3d6 100644 Binary files a/components/esp8266/lib/libnet80211.a and b/components/esp8266/lib/libnet80211.a differ diff --git a/components/esp8266/lib/libnet80211_dbg.a b/components/esp8266/lib/libnet80211_dbg.a index e0171918..aff7af3c 100644 Binary files a/components/esp8266/lib/libnet80211_dbg.a and b/components/esp8266/lib/libnet80211_dbg.a differ diff --git a/components/esp8266/source/esp_sleep.c b/components/esp8266/source/esp_sleep.c index 0a118c60..bff1fb51 100644 --- a/components/esp8266/source/esp_sleep.c +++ b/components/esp8266/source/esp_sleep.c @@ -51,7 +51,8 @@ typedef struct pm_soc_clk { uint32_t frc2_cnt; } pm_soc_clk_t; -static uint32_t s_lock_cnt = 1; +static uint16_t s_lock_cnt = 1; +static esp_sleep_mode_t s_sleep_mode = ESP_CPU_WAIT; static uint32_t s_sleep_wakup_triggers; static uint32_t s_sleep_duration; @@ -116,6 +117,11 @@ static inline void update_soc_clk(pm_soc_clk_t *clk, uint32_t us) WdevTimOffSet += us; } +static int cpu_is_wait_mode(void) +{ + return (s_sleep_mode == ESP_CPU_WAIT) || s_lock_cnt; +} + void esp_wifi_hw_open(void) { phy_open_rf(); @@ -192,9 +198,14 @@ void esp_sleep_unlock(void) soc_restore_local_irq(irqflag); } +void esp_sleep_set_mode(esp_sleep_mode_t mode) +{ + s_sleep_mode = mode; +} + void esp_sleep_start(void) { - if (s_lock_cnt) { + if (cpu_is_wait_mode()) { soc_wait_int(); return ; } @@ -207,7 +218,7 @@ void esp_sleep_start(void) const esp_irqflag_t irqflag = soc_save_local_irq(); const uint32_t wdevflag = save_local_wdev(); - if (s_lock_cnt) { + if (cpu_is_wait_mode()) { cpu_wait = 0; goto exit; }