mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-03 15:04:39 +00:00
Merge branch 'feat/new_api_to_get_all_wakeup_causes' into 'master'
feat: add new api to get multiple wakeup causes Closes PM-472 See merge request espressif/esp-idf!40139
This commit is contained in:
@@ -1866,7 +1866,7 @@ esp_err_t esp_sleep_enable_touchpad_wakeup(void)
|
||||
|
||||
int esp_sleep_get_touchpad_wakeup_status(void)
|
||||
{
|
||||
if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_TOUCHPAD) {
|
||||
if (!(esp_sleep_get_wakeup_causes() & BIT(ESP_SLEEP_WAKEUP_TOUCHPAD))) {
|
||||
return -1;
|
||||
}
|
||||
uint32_t chan_num;
|
||||
@@ -2091,7 +2091,7 @@ static void ext1_wakeup_prepare(void)
|
||||
|
||||
uint64_t esp_sleep_get_ext1_wakeup_status(void)
|
||||
{
|
||||
if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_EXT1) {
|
||||
if (!(esp_sleep_get_wakeup_causes() & BIT(ESP_SLEEP_WAKEUP_EXT1))) {
|
||||
return 0;
|
||||
}
|
||||
uint32_t status = rtc_hal_ext1_get_wakeup_status();
|
||||
@@ -2115,7 +2115,7 @@ uint64_t esp_sleep_get_ext1_wakeup_status(void)
|
||||
#if SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP && SOC_DEEP_SLEEP_SUPPORTED
|
||||
uint64_t esp_sleep_get_gpio_wakeup_status(void)
|
||||
{
|
||||
if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_GPIO) {
|
||||
if (!(esp_sleep_get_wakeup_causes() & BIT(ESP_SLEEP_WAKEUP_GPIO))) {
|
||||
return 0;
|
||||
}
|
||||
return rtc_hal_gpio_get_wakeup_status();
|
||||
@@ -2350,6 +2350,97 @@ esp_sleep_wakeup_cause_t esp_sleep_get_wakeup_cause(void)
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t esp_sleep_get_wakeup_causes(void)
|
||||
{
|
||||
uint32_t wakeup_cause = 0;
|
||||
|
||||
if (esp_rom_get_reset_reason(0) != RESET_REASON_CORE_DEEP_SLEEP && !s_light_sleep_wakeup) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_UNDEFINED);
|
||||
return wakeup_cause;
|
||||
}
|
||||
|
||||
#if SOC_PMU_SUPPORTED
|
||||
uint32_t wakeup_cause_raw = pmu_ll_hp_get_wakeup_cause(&PMU);
|
||||
#else
|
||||
uint32_t wakeup_cause_raw = rtc_cntl_ll_get_wakeup_cause();
|
||||
#endif
|
||||
|
||||
if (wakeup_cause_raw & RTC_TIMER_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_TIMER);
|
||||
}
|
||||
if (wakeup_cause_raw & RTC_GPIO_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_GPIO);
|
||||
}
|
||||
if (wakeup_cause_raw & RTC_UART0_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_UART);
|
||||
}
|
||||
if (wakeup_cause_raw & RTC_UART1_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_UART1);
|
||||
}
|
||||
#if SOC_PMU_SUPPORTED && (SOC_UART_HP_NUM > 2)
|
||||
if (wakeup_cause_raw & RTC_UART2_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_UART2);
|
||||
}
|
||||
#endif
|
||||
#if SOC_PM_SUPPORT_EXT0_WAKEUP
|
||||
if (wakeup_cause_raw & RTC_EXT0_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_EXT0);
|
||||
}
|
||||
#endif
|
||||
#if SOC_PM_SUPPORT_EXT1_WAKEUP
|
||||
if (wakeup_cause_raw & RTC_EXT1_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_EXT1);
|
||||
}
|
||||
#endif
|
||||
#if SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP
|
||||
if (wakeup_cause_raw & RTC_TOUCH_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_TOUCHPAD);
|
||||
}
|
||||
#endif
|
||||
#if SOC_ULP_FSM_SUPPORTED
|
||||
if (wakeup_cause_raw & RTC_ULP_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_ULP);
|
||||
}
|
||||
#endif
|
||||
#if SOC_PM_SUPPORT_WIFI_WAKEUP
|
||||
if (wakeup_cause_raw & RTC_WIFI_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_WIFI);
|
||||
}
|
||||
#endif
|
||||
#if SOC_PM_SUPPORT_BT_WAKEUP
|
||||
if (wakeup_cause_raw & RTC_BT_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_BT);
|
||||
}
|
||||
#endif
|
||||
#if SOC_RISCV_COPROC_SUPPORTED
|
||||
if (wakeup_cause_raw & RTC_COCPU_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_ULP);
|
||||
}
|
||||
if (wakeup_cause_raw & RTC_COCPU_TRAP_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_COCPU_TRAP_TRIG);
|
||||
}
|
||||
#endif
|
||||
#if SOC_LP_CORE_SUPPORTED
|
||||
if (wakeup_cause_raw & RTC_LP_CORE_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_ULP);
|
||||
}
|
||||
#endif
|
||||
#if SOC_LP_VAD_SUPPORTED
|
||||
if (wakeup_cause_raw & RTC_LP_VAD_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_VAD);
|
||||
}
|
||||
#endif
|
||||
#if SOC_VBAT_SUPPORTED
|
||||
if (wakeup_cause_raw & RTC_VBAT_UNDER_VOLT_TRIG_EN) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_VBAT_UNDER_VOLT);
|
||||
}
|
||||
#endif
|
||||
if (wakeup_cause == 0) {
|
||||
wakeup_cause |= BIT(ESP_SLEEP_WAKEUP_UNDEFINED);
|
||||
}
|
||||
return wakeup_cause;
|
||||
}
|
||||
|
||||
esp_err_t esp_sleep_pd_config(esp_sleep_pd_domain_t domain, esp_sleep_pd_option_t option)
|
||||
{
|
||||
if (domain >= ESP_PD_DOMAIN_MAX || option > ESP_PD_OPTION_AUTO) {
|
||||
|
Reference in New Issue
Block a user