Clean up API

This commit is contained in:
Lucian Copeland 2021-04-02 14:08:48 -04:00
parent 91e530d36c
commit 17585e1e07
11 changed files with 23 additions and 29 deletions

7
main.c
View File

@ -163,7 +163,7 @@ STATIC void start_mp(supervisor_allocation* heap) {
// Record which alarm woke us up, if any. An object may be created so the heap must be functional. // Record which alarm woke us up, if any. An object may be created so the heap must be functional.
shared_alarm_save_wake_alarm(); shared_alarm_save_wake_alarm();
// Reset alarm module only after we retrieved the wakeup alarm. // Reset alarm module only after we retrieved the wakeup alarm.
common_hal_alarm_reset(); alarm_reset();
#endif #endif
#if CIRCUITPY_NETWORK #if CIRCUITPY_NETWORK
@ -293,9 +293,13 @@ STATIC bool run_code_py(safe_mode_t safe_mode) {
stack_resize(); stack_resize();
filesystem_flush(); filesystem_flush();
supervisor_allocation* heap = allocate_remaining_memory(); supervisor_allocation* heap = allocate_remaining_memory();
// Prepare the VM state. Includes an alarm check/reset for sleep.
start_mp(heap); start_mp(heap);
// This is where the user's python code is actually executed:
found_main = maybe_run_list(supported_filenames, &result); found_main = maybe_run_list(supported_filenames, &result);
// If that didn't work, double check the extensions
#if CIRCUITPY_FULL_BUILD #if CIRCUITPY_FULL_BUILD
if (!found_main){ if (!found_main){
found_main = maybe_run_list(double_extension_filenames, &result); found_main = maybe_run_list(double_extension_filenames, &result);
@ -305,6 +309,7 @@ STATIC bool run_code_py(safe_mode_t safe_mode) {
} }
#endif #endif
// Finished executing python code. Cleanup includes a board reset.
cleanup_after_vm(heap); cleanup_after_vm(heap);
if (result.return_code & PYEXEC_FORCED_EXIT) { if (result.return_code & PYEXEC_FORCED_EXIT) {

View File

@ -54,7 +54,7 @@ const alarm_sleep_memory_obj_t alarm_sleep_memory_obj = {
}, },
}; };
void common_hal_alarm_reset(void) { void alarm_reset(void) {
alarm_sleep_memory_reset(); alarm_sleep_memory_reset();
alarm_pin_pinalarm_reset(); alarm_pin_pinalarm_reset();
alarm_time_timealarm_reset(); alarm_time_timealarm_reset();
@ -144,7 +144,7 @@ mp_obj_t common_hal_alarm_light_sleep_until_alarms(size_t n_alarms, const mp_obj
} }
mp_obj_t wake_alarm = _get_wake_alarm(n_alarms, alarms); mp_obj_t wake_alarm = _get_wake_alarm(n_alarms, alarms);
alarm_pin_pinalarm_reset_alarms(n_alarms, alarms); alarm_reset();
return wake_alarm; return wake_alarm;
} }

View File

@ -31,6 +31,6 @@
const alarm_sleep_memory_obj_t alarm_sleep_memory_obj; const alarm_sleep_memory_obj_t alarm_sleep_memory_obj;
extern void common_hal_alarm_reset(void); extern void alarm_reset(void);
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_ALARM__INIT__H #endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_ALARM__INIT__H

View File

@ -38,7 +38,7 @@
#include "components/soc/src/esp32s2/include/hal/gpio_ll.h" #include "components/soc/src/esp32s2/include/hal/gpio_ll.h"
#include "components/xtensa/include/esp_debug_helpers.h" #include "components/xtensa/include/esp_debug_helpers.h"
void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, mcu_pin_obj_t *pin, bool value, bool edge, bool pull) { void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, const mcu_pin_obj_t *pin, bool value, bool edge, bool pull) {
if (edge) { if (edge) {
mp_raise_ValueError(translate("Cannot wake on pin edge. Only level.")); mp_raise_ValueError(translate("Cannot wake on pin edge. Only level."));
} }
@ -51,7 +51,7 @@ void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, mcu
self->pull = pull; self->pull = pull;
} }
mcu_pin_obj_t *common_hal_alarm_pin_pinalarm_get_pin(alarm_pin_pinalarm_obj_t *self) { const mcu_pin_obj_t *common_hal_alarm_pin_pinalarm_get_pin(alarm_pin_pinalarm_obj_t *self) {
return self->pin; return self->pin;
} }

View File

@ -29,7 +29,7 @@
typedef struct { typedef struct {
mp_obj_base_t base; mp_obj_base_t base;
mcu_pin_obj_t *pin; const mcu_pin_obj_t *pin;
bool value; bool value;
bool pull; bool pull;
} alarm_pin_pinalarm_obj_t; } alarm_pin_pinalarm_obj_t;

View File

@ -45,7 +45,7 @@
#define STM_ALARM_FLAG RTC->BKP0R #define STM_ALARM_FLAG RTC->BKP0R
void common_hal_alarm_reset(void) { void alarm_reset(void) {
// Reset the alarm flag // Reset the alarm flag
STM_ALARM_FLAG = 0x00; STM_ALARM_FLAG = 0x00;
// alarm_sleep_memory_reset(); // alarm_sleep_memory_reset();
@ -131,7 +131,7 @@ mp_obj_t common_hal_alarm_light_sleep_until_alarms(size_t n_alarms, const mp_obj
} }
mp_obj_t wake_alarm = _get_wake_alarm(n_alarms, alarms); mp_obj_t wake_alarm = _get_wake_alarm(n_alarms, alarms);
common_hal_alarm_reset(); alarm_reset();
return wake_alarm; return wake_alarm;
} }

View File

@ -31,6 +31,6 @@
const alarm_sleep_memory_obj_t alarm_sleep_memory_obj; const alarm_sleep_memory_obj_t alarm_sleep_memory_obj;
extern void common_hal_alarm_reset(void); extern void alarm_reset(void);
#endif // MICROPY_INCLUDED_STM32_COMMON_HAL_ALARM__INIT__H #endif // MICROPY_INCLUDED_STM32_COMMON_HAL_ALARM__INIT__H

View File

@ -43,7 +43,7 @@ STATIC void pin_alarm_callback(uint8_t num) {
HAL_GPIO_EXTI_IRQHandler(pin_mask(num)); HAL_GPIO_EXTI_IRQHandler(pin_mask(num));
} }
void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, mcu_pin_obj_t *pin, bool value, bool edge, bool pull) { void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, const mcu_pin_obj_t *pin, bool value, bool edge, bool pull) {
if (!edge) { if (!edge) {
mp_raise_NotImplementedError(translate("Only edge detection is available on this hardware")); mp_raise_NotImplementedError(translate("Only edge detection is available on this hardware"));
} }
@ -70,7 +70,7 @@ void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, mcu
self->pull = pull; self->pull = pull;
} }
mcu_pin_obj_t *common_hal_alarm_pin_pinalarm_get_pin(alarm_pin_pinalarm_obj_t *self) { const mcu_pin_obj_t *common_hal_alarm_pin_pinalarm_get_pin(alarm_pin_pinalarm_obj_t *self) {
return self->pin; return self->pin;
} }
@ -112,6 +112,7 @@ void alarm_pin_pinalarm_reset(void) {
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
alarm_pin_triggered = 0; alarm_pin_triggered = 0;
woke_up = false; woke_up = false;
deep_wkup_enabled = false;
} }
// Deep sleep alarms don't actually make use of EXTI, but we pretend they're the same. // Deep sleep alarms don't actually make use of EXTI, but we pretend they're the same.
@ -135,17 +136,6 @@ void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_ob
} }
} }
void alarm_pin_pinalarm_reset_alarms(bool deep_sleep, size_t n_alarms, const mp_obj_t *alarms) {
alarm_pin_triggered = 0;
deep_wkup_enabled = false;
for (size_t i = 0; i < n_alarms; i++) {
if (MP_OBJ_IS_TYPE(alarms[i], &alarm_pin_pinalarm_type)) {
alarm_pin_pinalarm_obj_t *alarm = MP_OBJ_TO_PTR(alarms[i]);
stm_peripherals_exti_disable(alarm->pin->number);
}
}
}
// If we don't have WKUP enabled, ensure it's disabled // If we don't have WKUP enabled, ensure it's disabled
// TODO; is this really required? // TODO; is this really required?
void alarm_pin_pinalarm_prepare_for_deep_sleep(void) { void alarm_pin_pinalarm_prepare_for_deep_sleep(void) {

View File

@ -29,14 +29,13 @@
typedef struct { typedef struct {
mp_obj_base_t base; mp_obj_base_t base;
mcu_pin_obj_t *pin; const mcu_pin_obj_t *pin;
bool value; bool value;
bool pull; bool pull;
} alarm_pin_pinalarm_obj_t; } alarm_pin_pinalarm_obj_t;
void alarm_pin_pinalarm_reset(void); void alarm_pin_pinalarm_reset(void);
void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_obj_t *alarms); void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_obj_t *alarms);
void alarm_pin_pinalarm_reset_alarms(bool deep_sleep, size_t n_alarms, const mp_obj_t *alarms);
void alarm_pin_pinalarm_prepare_for_deep_sleep(void); void alarm_pin_pinalarm_prepare_for_deep_sleep(void);
mp_obj_t alarm_pin_pinalarm_get_wakeup_alarm(size_t n_alarms, const mp_obj_t *alarms); mp_obj_t alarm_pin_pinalarm_get_wakeup_alarm(size_t n_alarms, const mp_obj_t *alarms);
bool alarm_pin_pinalarm_woke_us_up(void); bool alarm_pin_pinalarm_woke_us_up(void);

View File

@ -73,7 +73,7 @@ STATIC mp_obj_t alarm_pin_pinalarm_make_new(const mp_obj_type_t *type, mp_uint_t
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(0, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); mp_arg_parse_all(0, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[ARG_pin].u_obj); const mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[ARG_pin].u_obj);
common_hal_alarm_pin_pinalarm_construct(self, common_hal_alarm_pin_pinalarm_construct(self,
pin, pin,
@ -89,7 +89,7 @@ STATIC mp_obj_t alarm_pin_pinalarm_make_new(const mp_obj_type_t *type, mp_uint_t
//| //|
STATIC mp_obj_t alarm_pin_pinalarm_obj_get_pin(mp_obj_t self_in) { STATIC mp_obj_t alarm_pin_pinalarm_obj_get_pin(mp_obj_t self_in) {
alarm_pin_pinalarm_obj_t *self = MP_OBJ_TO_PTR(self_in); alarm_pin_pinalarm_obj_t *self = MP_OBJ_TO_PTR(self_in);
mcu_pin_obj_t *pin = common_hal_alarm_pin_pinalarm_get_pin(self); const mcu_pin_obj_t *pin = common_hal_alarm_pin_pinalarm_get_pin(self);
if (pin == NULL) { if (pin == NULL) {
return mp_const_none; return mp_const_none;
} }

View File

@ -34,8 +34,8 @@
extern const mp_obj_type_t alarm_pin_pinalarm_type; extern const mp_obj_type_t alarm_pin_pinalarm_type;
void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, mcu_pin_obj_t *pin, bool value, bool edge, bool pull); void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, const mcu_pin_obj_t *pin, bool value, bool edge, bool pull);
extern mcu_pin_obj_t *common_hal_alarm_pin_pinalarm_get_pin(alarm_pin_pinalarm_obj_t *self); extern const mcu_pin_obj_t *common_hal_alarm_pin_pinalarm_get_pin(alarm_pin_pinalarm_obj_t *self);
extern bool common_hal_alarm_pin_pinalarm_get_value(alarm_pin_pinalarm_obj_t *self); extern bool common_hal_alarm_pin_pinalarm_get_value(alarm_pin_pinalarm_obj_t *self);
extern bool common_hal_alarm_pin_pinalarm_get_edge(alarm_pin_pinalarm_obj_t *self); extern bool common_hal_alarm_pin_pinalarm_get_edge(alarm_pin_pinalarm_obj_t *self);
extern bool common_hal_alarm_pin_pinalarm_get_pull(alarm_pin_pinalarm_obj_t *self); extern bool common_hal_alarm_pin_pinalarm_get_pull(alarm_pin_pinalarm_obj_t *self);