wasp: nrf_rtc: Add a tiny bit of extra resolution
We now have a couple of applications (stopwatch, Game of Life) that benefit from sub-second precision. The micropython RTC/utime code for nrf still needs a major overhaul but this allows us to paper over the cracks for just a little longer.
This commit is contained in:
parent
5b277e94f1
commit
9348e758b2
2 changed files with 15 additions and 10 deletions
|
@ -163,7 +163,7 @@ class GameOfLifeApp():
|
||||||
"""Activate the application."""
|
"""Activate the application."""
|
||||||
self._draw()
|
self._draw()
|
||||||
wasp.system.request_event(wasp.EventMask.TOUCH)
|
wasp.system.request_event(wasp.EventMask.TOUCH)
|
||||||
wasp.system.request_tick(1000)
|
wasp.system.request_tick(625)
|
||||||
|
|
||||||
def tick(self, ticks):
|
def tick(self, ticks):
|
||||||
"""Notify the application that its periodic tick is due."""
|
"""Notify the application that its periodic tick is due."""
|
||||||
|
|
|
@ -20,8 +20,8 @@ class RTC(object):
|
||||||
|
|
||||||
def __init__(self, counter):
|
def __init__(self, counter):
|
||||||
self.counter = counter
|
self.counter = counter
|
||||||
self.uptime = 0
|
self._uptime = 0
|
||||||
self.set_localtime((2020, 2, 18, 12, 0, 0, 0, 0))
|
self.set_localtime((2020, 3, 1, 3, 0, 0, 0, 0))
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
newcount = self.counter.counter()
|
newcount = self.counter.counter()
|
||||||
|
@ -30,11 +30,11 @@ class RTC(object):
|
||||||
return False
|
return False
|
||||||
if split < 0:
|
if split < 0:
|
||||||
split += (1 << 24)
|
split += (1 << 24)
|
||||||
elapsed = split // 8
|
|
||||||
self.lastcount += elapsed * 8
|
|
||||||
self.lastcount &= (1 << 24) - 1
|
|
||||||
|
|
||||||
self.uptime += elapsed
|
self.lastcount += split
|
||||||
|
self.lastcount &= (1 << 24) - 1
|
||||||
|
self._uptime += split
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def set_localtime(self, t):
|
def set_localtime(self, t):
|
||||||
|
@ -51,16 +51,21 @@ class RTC(object):
|
||||||
t = (yyyy, mm, dd, HH, MM, SS, 0, 0)
|
t = (yyyy, mm, dd, HH, MM, SS, 0, 0)
|
||||||
|
|
||||||
lt = time.mktime(t)
|
lt = time.mktime(t)
|
||||||
self.offset = lt - self.uptime
|
self.offset = lt - self._uptime
|
||||||
|
|
||||||
def get_localtime(self):
|
def get_localtime(self):
|
||||||
self.update()
|
self.update()
|
||||||
return time.localtime(self.offset + self.uptime)
|
return time.localtime(self.offset + (self._uptime >> 3))
|
||||||
|
|
||||||
def get_time(self):
|
def get_time(self):
|
||||||
localtime = self.get_localtime()
|
localtime = self.get_localtime()
|
||||||
return localtime[3:6]
|
return localtime[3:6]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def uptime(self):
|
||||||
|
"""Provide the current uptime in seconds."""
|
||||||
|
return self._uptime // 8
|
||||||
|
|
||||||
def get_uptime_ms(self):
|
def get_uptime_ms(self):
|
||||||
"""Return the current uptime in milliseconds."""
|
"""Return the current uptime in milliseconds."""
|
||||||
return self.uptime * 1000
|
return self._uptime * 125
|
||||||
|
|
Loading…
Reference in a new issue