40
40
#include "supervisor/shared/workflow.h"
41
41
42
42
STATIC uint8_t true_deep_wake_reason ;
43
+ STATIC mp_obj_t most_recent_alarm ;
43
44
44
45
void alarm_reset (void ) {
46
+ most_recent_alarm = NULL ;
45
47
// Reset the alarm flag
46
48
STM_ALARM_FLAG = 0x00 ;
47
49
// alarm_sleep_memory_reset();
@@ -93,6 +95,10 @@ STATIC mp_obj_t _get_wake_alarm(size_t n_alarms, const mp_obj_t *alarms) {
93
95
}
94
96
95
97
mp_obj_t common_hal_alarm_get_wake_alarm (void ) {
98
+ // If we woke from light sleep, override with that alarm
99
+ if (most_recent_alarm != NULL ) {
100
+ return most_recent_alarm ;
101
+ }
96
102
return _get_wake_alarm (0 , NULL );
97
103
}
98
104
@@ -106,9 +112,8 @@ STATIC void _idle_until_alarm(void) {
106
112
// Poll for alarms.
107
113
while (!mp_hal_is_interrupted ()) {
108
114
RUN_BACKGROUND_TASKS ;
109
- // Allow ctrl-C interrupt.
115
+ // Detect if interrupt was alarm or ctrl-C interrupt.
110
116
if (common_hal_alarm_woken_from_sleep ()) {
111
- shared_alarm_save_wake_alarm ();
112
117
return ;
113
118
}
114
119
port_idle_until_interrupt ();
@@ -128,11 +133,19 @@ mp_obj_t common_hal_alarm_light_sleep_until_alarms(size_t n_alarms, const mp_obj
128
133
}
129
134
130
135
mp_obj_t wake_alarm = _get_wake_alarm (n_alarms , alarms );
131
- alarm_reset ();
136
+
137
+ // TODO: make this less roundabout
138
+ most_recent_alarm = wake_alarm ;
139
+ shared_alarm_save_wake_alarm ();
140
+
141
+ // Can't use alarm_reset since it resets most_recent_alarm
142
+ alarm_pin_pinalarm_reset ();
143
+ alarm_time_timealarm_reset ();
132
144
return wake_alarm ;
133
145
}
134
146
135
147
void common_hal_alarm_set_deep_sleep_alarms (size_t n_alarms , const mp_obj_t * alarms ) {
148
+ most_recent_alarm = NULL ;
136
149
_setup_sleep_alarms (true, n_alarms , alarms );
137
150
}
138
151
@@ -147,9 +160,6 @@ void NORETURN common_hal_alarm_enter_deep_sleep(void) {
147
160
148
161
// Set a flag in the backup registers to indicate sleep wakeup
149
162
STM_ALARM_FLAG = 0x01 ;
150
- // HAL_PWR_EnableBkUpAccess();
151
- // __HAL_RCC_BACKUPRESET_FORCE();
152
- // __HAL_RCC_BACKUPRESET_RELEASE();
153
163
154
164
HAL_PWR_EnterSTANDBYMode ();
155
165
0 commit comments