summaryrefslogtreecommitdiff
path: root/src/ticks.py
blob: 1f7e94369e606ef08a35ed36684c9033a8ae7655 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from supervisor import ticks_ms

# See the example at
# https://docs.circuitpython.org/en/latest/shared-bindings/supervisor/index.html?#supervisor.ticks_ms
_TICKS_PERIOD = const(1<<29)
_TICKS_MAX = const(_TICKS_PERIOD-1)
_TICKS_HALFPERIOD = const(_TICKS_PERIOD//2)

def add(ticks, delta):
    "Add a delta to a base number of ticks, performing wraparound at 2**29ms."
    return (ticks + delta) % _TICKS_PERIOD

def diff(ticks1, ticks2):
    "Compute the signed difference between two ticks values, assuming that they are within 2**28 ticks"
    diff = (ticks1 - ticks2) & _TICKS_MAX
    diff = ((diff + _TICKS_HALFPERIOD) & _TICKS_MAX) - _TICKS_HALFPERIOD
    return diff

def less(ticks):
    "Return true iff ticks1 is less than ticks2, assuming that they are within 2**28 ticks"
    return diff(ticks_ms(), ticks) < 0