|
76 | 76 | { MP_ROM_QSTR(MP_QSTR_PIN_WAKE), MP_ROM_INT(ESP_SLEEP_WAKEUP_EXT0) }, \
|
77 | 77 | { MP_ROM_QSTR(MP_QSTR_EXT0_WAKE), MP_ROM_INT(ESP_SLEEP_WAKEUP_EXT0) }, \
|
78 | 78 | { MP_ROM_QSTR(MP_QSTR_EXT1_WAKE), MP_ROM_INT(ESP_SLEEP_WAKEUP_EXT1) }, \
|
| 79 | + { MP_ROM_QSTR(MP_QSTR_EXT1_WAKE), MP_ROM_INT(ESP_SLEEP_WAKEUP_GPIO) }, \ |
79 | 80 | { MP_ROM_QSTR(MP_QSTR_TIMER_WAKE), MP_ROM_INT(ESP_SLEEP_WAKEUP_TIMER) }, \
|
80 | 81 | { MP_ROM_QSTR(MP_QSTR_TOUCHPAD_WAKE), MP_ROM_INT(ESP_SLEEP_WAKEUP_TOUCHPAD) }, \
|
81 | 82 | { MP_ROM_QSTR(MP_QSTR_ULP_WAKE), MP_ROM_INT(ESP_SLEEP_WAKEUP_ULP) }, \
|
@@ -146,7 +147,36 @@ static void machine_sleep_helper(wake_type_t wake_type, size_t n_args, const mp_
|
146 | 147 | esp_sleep_enable_timer_wakeup(((uint64_t)expiry) * 1000);
|
147 | 148 | }
|
148 | 149 |
|
149 |
| - #if !CONFIG_IDF_TARGET_ESP32C3 |
| 150 | + #if CONFIG_IDF_TARGET_ESP32C3 |
| 151 | + |
| 152 | + if (machine_rtc_config.ext1_pins != 0) { |
| 153 | + gpio_int_type_t intr_type = machine_rtc_config.ext1_level ? GPIO_INTR_HIGH_LEVEL : GPIO_INTR_LOW_LEVEL; |
| 154 | + |
| 155 | + for (int i = 0; i < GPIO_NUM_MAX; ++i) { |
| 156 | + gpio_num_t gpio = (gpio_num_t)i; |
| 157 | + uint64_t bm = 1ULL << i; |
| 158 | + |
| 159 | + if (machine_rtc_config.ext1_pins & bm) { |
| 160 | + gpio_sleep_set_direction(gpio, GPIO_MODE_INPUT); |
| 161 | + |
| 162 | + if (MACHINE_WAKE_SLEEP == wake_type) { |
| 163 | + gpio_wakeup_enable(gpio, intr_type); |
| 164 | + } |
| 165 | + } |
| 166 | + } |
| 167 | + |
| 168 | + if (MACHINE_WAKE_DEEPSLEEP == wake_type) { |
| 169 | + if (ESP_OK != esp_deep_sleep_enable_gpio_wakeup( |
| 170 | + machine_rtc_config.ext1_pins, |
| 171 | + machine_rtc_config.ext1_level ? ESP_GPIO_WAKEUP_GPIO_HIGH : ESP_GPIO_WAKEUP_GPIO_LOW)) { |
| 172 | + mp_raise_ValueError(MP_ERROR_TEXT("wake-up pin not supported")); |
| 173 | + } |
| 174 | + } else { |
| 175 | + esp_sleep_enable_gpio_wakeup(); |
| 176 | + } |
| 177 | + } |
| 178 | + |
| 179 | + #else |
150 | 180 |
|
151 | 181 | if (machine_rtc_config.ext0_pin != -1 && (machine_rtc_config.ext0_wake_types & wake_type)) {
|
152 | 182 | esp_sleep_enable_ext0_wakeup(machine_rtc_config.ext0_pin, machine_rtc_config.ext0_level ? 1 : 0);
|
|
0 commit comments