]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Agnostic now a package. Interactive testing now relies on monotonic. time now under...
authorCefn Hoile <github.com@cefn.com>
Mon, 26 Feb 2018 22:29:51 +0000 (22:29 +0000)
committerCefn Hoile <github.com@cefn.com>
Mon, 26 Feb 2018 22:29:51 +0000 (22:29 +0000)
src/adafruit_blinka/__init__.py
src/adafruit_blinka/agnostic/__init__.py [moved from src/adafruit_blinka/agnostic.py with 100% similarity]
src/adafruit_blinka/agnostic/time.py [new file with mode: 0644]
test/src/testing/__init__.py

index dfcef6c8d87615b0649c23c1bf77d8e0e3deea3e..08ec27e52ea151cd277c0c7092b92703a4e29092 100644 (file)
@@ -57,5 +57,5 @@ class Lockable(ContextManaged):
 
 def patch_system():
     import sys
 
 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
     sys.modules['time'] = time
\ No newline at end of file
diff --git a/src/adafruit_blinka/agnostic/time.py b/src/adafruit_blinka/agnostic/time.py
new file mode 100644 (file)
index 0000000..078b833
--- /dev/null
@@ -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
index 4f23d52d2fc20ba83ec609e86ca7830b5cb92be4..766f24230924b42d66ba4f7a2b7fe93064b510d0 100644 (file)
@@ -36,12 +36,12 @@ def multi_choice(q, choices, defaultPos=None):
         return None
 
 def await_true(name, fun, interval=0, patience=60):
         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))
     print("Waiting {} sec until {} (CTRL+C give up)".format(patience, name))
-    deadline = ticks_add(ticks_ms(), int(patience * 1000))
+
+    deadline =  monotonic() + patience
     try:
     try:
-        while ticks_diff(deadline, ticks_ms()) > 0:
+        while deadline - monotonic() > 0:
             if fun():
                 return True
             else:
             if fun():
                 return True
             else: