@@ -67,15 +67,29 @@ STATIC mp_obj_t task_queue_make_new(const mp_obj_type_t *type, size_t n_args, si
67
67
/******************************************************************************/
68
68
// Ticks for task ordering in pairing heap
69
69
70
+ // CIRCUITPY-CHANGE: ticks() must match adafruit_ticks()
71
+ #define _TICKS_PERIOD (1lu << 29)
72
+ #define _TICKS_MAX (_TICKS_PERIOD - 1)
73
+ #define _TICKS_HALFPERIOD (_TICKS_PERIOD >> 1)
74
+
75
+ #if !CIRCUITPY || (defined(__unix__ ) || defined(__APPLE__ ))
70
76
STATIC mp_obj_t ticks (void ) {
71
- return MP_OBJ_NEW_SMALL_INT (mp_hal_ticks_ms () & ( MICROPY_PY_TIME_TICKS_PERIOD - 1 ) );
77
+ return MP_OBJ_NEW_SMALL_INT (mp_hal_ticks_ms () & _TICKS_MAX );
72
78
}
79
+ #else
80
+ // We don't share the implementation above because our supervisor_ticks_ms
81
+ // starts the epoch about 65 seconds before the first overflow (see
82
+ // shared-bindings/supervisor/__init__.c). We assume/require that
83
+ // supervisor.ticks_ms is picked as the ticks implementation under
84
+ // CircuitPython for the Python-coded bits of asyncio.
85
+ #define ticks () supervisor_ticks_ms()
86
+ #endif
73
87
88
+ // CIRCUITPY-CHANGE: ticks_diff must match adafruit_ticks
74
89
STATIC mp_int_t ticks_diff (mp_obj_t t1_in , mp_obj_t t0_in ) {
75
90
mp_uint_t t0 = MP_OBJ_SMALL_INT_VALUE (t0_in );
76
91
mp_uint_t t1 = MP_OBJ_SMALL_INT_VALUE (t1_in );
77
- mp_int_t diff = ((t1 - t0 + MICROPY_PY_TIME_TICKS_PERIOD / 2 ) & (MICROPY_PY_TIME_TICKS_PERIOD - 1 ))
78
- - MICROPY_PY_TIME_TICKS_PERIOD / 2 ;
92
+ mp_int_t diff = ((t1 - t0 + _TICKS_HALFPERIOD ) & _TICKS_MAX ) - _TICKS_HALFPERIOD ;
79
93
return diff ;
80
94
}
81
95
0 commit comments