From: Cefn Hoile Date: Mon, 26 Feb 2018 22:29:51 +0000 (+0000) Subject: Agnostic now a package. Interactive testing now relies on monotonic. time now under... X-Git-Tag: 0.1.0~4^2~8 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/a8ed516cc3b6c4cdd7a346f897aa1a520071a239 Agnostic now a package. Interactive testing now relies on monotonic. time now under agnostic package. --- diff --git a/src/adafruit_blinka/__init__.py b/src/adafruit_blinka/__init__.py index dfcef6c..08ec27e 100644 --- a/src/adafruit_blinka/__init__.py +++ b/src/adafruit_blinka/__init__.py @@ -57,5 +57,5 @@ class Lockable(ContextManaged): def patch_system(): import sys - from adafruit_blinka import time + from adafruit_blinka.agnostic import time sys.modules['time'] = time \ No newline at end of file diff --git a/src/adafruit_blinka/agnostic.py b/src/adafruit_blinka/agnostic/__init__.py similarity index 100% rename from src/adafruit_blinka/agnostic.py rename to src/adafruit_blinka/agnostic/__init__.py diff --git a/src/adafruit_blinka/agnostic/time.py b/src/adafruit_blinka/agnostic/time.py new file mode 100644 index 0000000..078b833 --- /dev/null +++ b/src/adafruit_blinka/agnostic/time.py @@ -0,0 +1,27 @@ +from adafruit_blinka import agnostic +if agnostic.implementation == "circuitpython": + from time import * +elif agnostic.implementation == "micropython": + import utime + from utime import sleep + + from ucollections import namedtuple + _struct_time = namedtuple("struct_time", ("tm_year", "tm_mon", "tm_mday", "tm_hour", "tm_min", "tm_sec", "tm_wday", "tm_yday", "tm_isdst")) + + def marshal_time(tm_year, tm_mon, tm_mday, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=-1, tm_yday=-1, tm_isdst=-1): + _struct_time(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst) + + def struct_time(t): + return marshal_time(*t) + + total_ms = 0 + prev_ticks_ms = utime.ticks_ms() + def monotonic(): + """ + Assumes that monotonic is called more frequently than the wraparound of micropython's utime.ticks_ms() + """ + global prev_ticks_ms, total_ms + ticks_ms = utime.ticks_ms() + total_ms += utime.ticks_diff(ticks_ms, prev_ticks_ms) + prev_ticks_ms = ticks_ms + return total_ms * 0.001 \ No newline at end of file diff --git a/test/src/testing/__init__.py b/test/src/testing/__init__.py index 4f23d52..766f242 100644 --- a/test/src/testing/__init__.py +++ b/test/src/testing/__init__.py @@ -36,12 +36,12 @@ def multi_choice(q, choices, defaultPos=None): return None def await_true(name, fun, interval=0, patience=60): - from adafruit_blinka.agnostic import sleep - from utime import ticks_ms, ticks_add, ticks_diff + from adafruit_blinka.agnostic.time import sleep, monotonic print("Waiting {} sec until {} (CTRL+C give up)".format(patience, name)) - deadline = ticks_add(ticks_ms(), int(patience * 1000)) + + deadline = monotonic() + patience try: - while ticks_diff(deadline, ticks_ms()) > 0: + while deadline - monotonic() > 0: if fun(): return True else: