summaryrefslogtreecommitdiff
path: root/ports/esp32s2
diff options
context:
space:
mode:
Diffstat (limited to 'ports/esp32s2')
-rw-r--r--ports/esp32s2/common-hal/alarm/__init__.c54
-rw-r--r--ports/esp32s2/common-hal/microcontroller/__init__.c6
2 files changed, 26 insertions, 34 deletions
diff --git a/ports/esp32s2/common-hal/alarm/__init__.c b/ports/esp32s2/common-hal/alarm/__init__.c
index 7cf74a0ef..767b0de70 100644
--- a/ports/esp32s2/common-hal/alarm/__init__.c
+++ b/ports/esp32s2/common-hal/alarm/__init__.c
@@ -1,4 +1,4 @@
-/*
+ /*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
@@ -77,12 +77,10 @@ mp_obj_t common_hal_alarm_get_wake_alarm(void) {
return mp_const_none;
}
-mp_obj_t common_hal_alarm_sleep_until_alarms(size_t n_alarms, const mp_obj_t *alarms) {
- mp_raise_NotImplementedError(NULL);
-}
-
-void common_hal_alarm_set_deep_sleep_alarms(size_t n_alarms, const mp_obj_t *alarms) {
+STATIC void setup_alarms(size_t n_alarms, const mp_obj_t *alarms) {
bool time_alarm_set = false;
+ alarm_time_time_alarm_obj_t *time_alarm = MP_OBJ_NULL;
+
for (size_t i = 0; i < n_alarms; i++) {
if (MP_OBJ_IS_TYPE(alarms[i], &alarm_pin_pin_alarm_type)) {
mp_raise_NotImplementedError(translate("PinAlarm deep sleep not yet implemented"));
@@ -91,32 +89,32 @@ void common_hal_alarm_set_deep_sleep_alarms(size_t n_alarms, const mp_obj_t *ala
if (time_alarm_set) {
mp_raise_ValueError(translate("Only one alarm.time alarm can be set."));
}
+ time_alarm = MP_OBJ_TO_PTR(alarms[i]);
time_alarm_set = true;
}
}
- _deep_sleep_alarms = mp_obj_new_tuple(n_alarms, alarms);
+ if (time_alarm != MP_OBJ_NULL) {
+ // Compute how long to actually sleep, considering the time now.
+ mp_float_t now_secs = uint64_to_float(common_hal_time_monotonic_ms()) / 1000.0f;
+ mp_float_t wakeup_in_secs = MAX(0.0f, time_alarm->monotonic_time - now_secs);
+ esp_sleep_enable_timer_wakeup((uint64_t) (wakeup_in_secs * 1000000));
+ }
}
-// Return false if we should wake up immediately because a time alarm is in the past
-// or otherwise already triggered.
-bool common_hal_alarm_enable_deep_sleep_alarms(void) {
- for (size_t i = 0; i < _deep_sleep_alarms->len; i++) {
- mp_obj_t alarm = _deep_sleep_alarms->items[i];
- if (MP_OBJ_IS_TYPE(alarm, &alarm_pin_pin_alarm_type)) {
- // TODO: handle pin alarms
- mp_raise_NotImplementedError(translate("PinAlarm deep sleep not yet implemented"));
- }
- else if (MP_OBJ_IS_TYPE(alarm, &alarm_time_time_alarm_type)) {
- alarm_time_time_alarm_obj_t *time_alarm = MP_OBJ_TO_PTR(alarm);
- mp_float_t now_secs = uint64_to_float(common_hal_time_monotonic_ms()) / 1000.0f;
- // Compute how long to actually sleep, considering hte time now.
- mp_float_t wakeup_in_secs = time_alarm->monotonic_time - now_secs;
- if (wakeup_in_secs <= 0.0f) {
- return false;
- }
- esp_sleep_enable_timer_wakeup((uint64_t) (wakeup_in_secs * 1000000));
- }
- }
- return true;
+mp_obj_t common_hal_alarm_sleep_until_alarms(size_t n_alarms, const mp_obj_t *alarms) {
+ setup_alarms(n_alarms, alarms);
+
+ // Shut down wifi cleanly.
+ esp_wifi_stop();
+ esp_light_sleep_start();
+ return common_hal_alarm_get_wake_alarm();
+}
+
+void common_hal_alarm_exit_and_deep_sleep_until_alarms(size_t n_alarms, const mp_obj_t *alarms) {
+ setup_alarms(n_alarms, alarms);
+
+ // Shut down wifi cleanly.
+ esp_wifi_stop();
+ esp_deep_sleep_start();
}
diff --git a/ports/esp32s2/common-hal/microcontroller/__init__.c b/ports/esp32s2/common-hal/microcontroller/__init__.c
index 3578b86d0..184f5be69 100644
--- a/ports/esp32s2/common-hal/microcontroller/__init__.c
+++ b/ports/esp32s2/common-hal/microcontroller/__init__.c
@@ -81,12 +81,6 @@ void common_hal_mcu_reset(void) {
while(1);
}
-void NORETURN common_hal_mcu_deep_sleep(void) {
- // Shut down wifi cleanly.
- esp_wifi_stop();
- esp_deep_sleep_start();
-}
-
// The singleton microcontroller.Processor object, bound to microcontroller.cpu
// It currently only has properties, and no state.
const mcu_processor_obj_t common_hal_mcu_processor_obj = {