@@ -219,6 +219,21 @@ STATIC mp_obj_t pyb_rtc_alarm(mp_obj_t self_in, mp_obj_t alarm_id, mp_obj_t time
219
219
}
220
220
STATIC MP_DEFINE_CONST_FUN_OBJ_3 (pyb_rtc_alarm_obj , pyb_rtc_alarm );
221
221
222
+ STATIC mp_obj_t pyb_rtc_alarm_left (size_t n_args , const mp_obj_t * args ) {
223
+ // check we want alarm0
224
+ if (n_args > 1 && mp_obj_get_int (args [1 ]) != 0 ) {
225
+ mp_raise_ValueError ("invalid alarm" );
226
+ }
227
+
228
+ uint64_t now = pyb_rtc_get_us_since_2000 ();
229
+ if (pyb_rtc_alarm0_expiry <= now ) {
230
+ return MP_OBJ_NEW_SMALL_INT (0 );
231
+ } else {
232
+ return mp_obj_new_int ((pyb_rtc_alarm0_expiry - now ) / 1000 );
233
+ }
234
+ }
235
+ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (pyb_rtc_alarm_left_obj , 1 , 2 , pyb_rtc_alarm_left );
236
+
222
237
STATIC mp_obj_t pyb_rtc_irq (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
223
238
enum { ARG_trigger , ARG_wake };
224
239
static const mp_arg_t allowed_args [] = {
@@ -244,6 +259,7 @@ STATIC const mp_map_elem_t pyb_rtc_locals_dict_table[] = {
244
259
{ MP_OBJ_NEW_QSTR (MP_QSTR_datetime ), (mp_obj_t )& pyb_rtc_datetime_obj },
245
260
{ MP_OBJ_NEW_QSTR (MP_QSTR_memory ), (mp_obj_t )& pyb_rtc_memory_obj },
246
261
{ MP_OBJ_NEW_QSTR (MP_QSTR_alarm ), (mp_obj_t )& pyb_rtc_alarm_obj },
262
+ { MP_OBJ_NEW_QSTR (MP_QSTR_alarm_left ), (mp_obj_t )& pyb_rtc_alarm_left_obj },
247
263
{ MP_OBJ_NEW_QSTR (MP_QSTR_irq ), (mp_obj_t )& pyb_rtc_irq_obj },
248
264
{ MP_OBJ_NEW_QSTR (MP_QSTR_ALARM0 ), MP_OBJ_NEW_SMALL_INT (0 ) },
249
265
};
0 commit comments