summaryrefslogtreecommitdiff
path: root/ports
diff options
context:
space:
mode:
Diffstat (limited to 'ports')
-rw-r--r--ports/atmel-samd/common-hal/microcontroller/__init__.c4
-rw-r--r--ports/cxd56/common-hal/microcontroller/__init__.c4
-rw-r--r--ports/esp32s2/common-hal/alarm/__init__.c54
-rw-r--r--ports/esp32s2/common-hal/microcontroller/__init__.c6
-rw-r--r--ports/litex/common-hal/microcontroller/__init__.c4
-rw-r--r--ports/mimxrt10xx/common-hal/microcontroller/__init__.c4
-rw-r--r--ports/nrf/common-hal/microcontroller/__init__.c4
-rw-r--r--ports/stm/common-hal/microcontroller/__init__.c4
8 files changed, 26 insertions, 58 deletions
diff --git a/ports/atmel-samd/common-hal/microcontroller/__init__.c b/ports/atmel-samd/common-hal/microcontroller/__init__.c
index ca39f2838..50a1ec038 100644
--- a/ports/atmel-samd/common-hal/microcontroller/__init__.c
+++ b/ports/atmel-samd/common-hal/microcontroller/__init__.c
@@ -84,10 +84,6 @@ void common_hal_mcu_reset(void) {
reset();
}
-void common_hal_mcu_deep_sleep(void) {
- //deep sleep call here
-}
-
// 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 = {
diff --git a/ports/cxd56/common-hal/microcontroller/__init__.c b/ports/cxd56/common-hal/microcontroller/__init__.c
index 57140dec7..7aa3b839d 100644
--- a/ports/cxd56/common-hal/microcontroller/__init__.c
+++ b/ports/cxd56/common-hal/microcontroller/__init__.c
@@ -81,10 +81,6 @@ void common_hal_mcu_reset(void) {
boardctl(BOARDIOC_RESET, 0);
}
-void common_hal_mcu_deep_sleep(void) {
- //deep sleep call here
-}
-
STATIC const mp_rom_map_elem_t mcu_pin_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_UART2_RXD), MP_ROM_PTR(&pin_UART2_RXD) },
{ MP_ROM_QSTR(MP_QSTR_UART2_TXD), MP_ROM_PTR(&pin_UART2_TXD) },
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 = {
diff --git a/ports/litex/common-hal/microcontroller/__init__.c b/ports/litex/common-hal/microcontroller/__init__.c
index e6f50ed5a..3c9166114 100644
--- a/ports/litex/common-hal/microcontroller/__init__.c
+++ b/ports/litex/common-hal/microcontroller/__init__.c
@@ -89,10 +89,6 @@ void common_hal_mcu_reset(void) {
while(1);
}
-void common_hal_mcu_deep_sleep(void) {
- //deep sleep call here
-}
-
// 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 = {
diff --git a/ports/mimxrt10xx/common-hal/microcontroller/__init__.c b/ports/mimxrt10xx/common-hal/microcontroller/__init__.c
index 0329ced69..6a8537e2d 100644
--- a/ports/mimxrt10xx/common-hal/microcontroller/__init__.c
+++ b/ports/mimxrt10xx/common-hal/microcontroller/__init__.c
@@ -86,10 +86,6 @@ void common_hal_mcu_reset(void) {
NVIC_SystemReset();
}
-void common_hal_mcu_deep_sleep(void) {
- //deep sleep call here
-}
-
// 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 = {
diff --git a/ports/nrf/common-hal/microcontroller/__init__.c b/ports/nrf/common-hal/microcontroller/__init__.c
index 9911896bf..06aac9409 100644
--- a/ports/nrf/common-hal/microcontroller/__init__.c
+++ b/ports/nrf/common-hal/microcontroller/__init__.c
@@ -95,10 +95,6 @@ void common_hal_mcu_reset(void) {
reset_cpu();
}
-void common_hal_mcu_deep_sleep(void) {
- //deep sleep call here
-}
-
// 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 = {
diff --git a/ports/stm/common-hal/microcontroller/__init__.c b/ports/stm/common-hal/microcontroller/__init__.c
index bc81b0e4f..a827399cc 100644
--- a/ports/stm/common-hal/microcontroller/__init__.c
+++ b/ports/stm/common-hal/microcontroller/__init__.c
@@ -81,10 +81,6 @@ void common_hal_mcu_reset(void) {
NVIC_SystemReset();
}
-void common_hal_mcu_deep_sleep(void) {
- //deep sleep call here
-}
-
// 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 = {