proof of concept for waiting for events

This commit is contained in:
Jan Pochyla 2016-05-03 18:35:11 +02:00 committed by Pavol Rusnak
parent b5f8c2303c
commit d612037eda
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
2 changed files with 37 additions and 18 deletions

View File

@ -2,6 +2,7 @@ from trezor import loop
from trezor import ui
from trezor.utils import unimport_func
def layout_tap_to_confirm(address, amount, currency):
ui.display.bar(0, 0, 240, 40, ui.GREEN)
@ -14,15 +15,20 @@ def layout_tap_to_confirm(address, amount, currency):
ui.display.text(10, 160, address[18:], ui.MONO, ui.BLACK, ui.WHITE)
f = open('apps/playground/tap_64.toig', 'rb')
_background = ui.WHITE
def func(foreground):
ui.display.text(68, 212, 'TAP TO CONFIRM', ui.BOLD, foreground, _background)
bg = ui.WHITE
def func(fg):
ui.display.text(68, 212, 'TAP TO CONFIRM', ui.BOLD, fg, bg)
f.seek(0)
ui.display.icon(3, 170, f.read(), _background, foreground)
ui.display.icon(3, 170, f.read(), bg, fg)
animation = ui.animate_pulse(func, ui.BLACK, ui.GREY, speed=200000)
yield loop.Wait([
animation,
loop.EVT_TSTART,
])
yield from ui.animate_pulse(func, ui.BLACK, ui.GREY, speed=200000)
@unimport_func
def zprava():
@ -43,10 +49,12 @@ def zprava():
# m2 = GetAddress.load(BytesIO(data))
# print(m2.__dict__)
def dispatch():
# Callback for HID messages
print("Dispatch playground")
def boot():
# Initilize app on boot time.
# This should hookup HID message types dispatcher() wants to receive.

View File

@ -10,7 +10,7 @@ EVT_TMOVE = const(-2)
EVT_TEND = const(-3)
EVT_MSG = const(-4)
evt_handlers = {
event_handlers = {
EVT_TSTART: None,
EVT_TMOVE: None,
EVT_TEND: None,
@ -101,19 +101,27 @@ def run_forever(start_gens):
if event:
# Run interrupt handler
log.info(__name__, "Received data: %s", event)
continue
event_id, *args = event
event_id = -event_id
gen = event_handlers.get(event_id, None)
event_handlers[event_id] = None
if not gen:
log.info(__name__, 'No handler for event: %s', event)
continue
if not args:
args = None
else:
if time_queue:
# Run something from the time queue
_, gen = heappop(time_queue)
args = None
else:
# Sleep again
delay = delay_max
continue
try:
ret = gen.send(None)
ret = gen.send(args)
except StopIteration as e:
log.debug(__name__, '%s finished', gen)
@ -123,13 +131,16 @@ def run_forever(start_gens):
log.exception(__name__, e)
continue
if isinstance(ret, int):
if ret >= 0:
# Sleep until ret, call us later
__call_at(ret, gen)
else:
# Wait for event
raise NotImplementedError()
if isinstance(ret, int) and ret >= 0:
# Sleep until ret, call us later
__call_at(ret, gen)
elif isinstance(ret, int) and ret in event_handlers:
# Wait for event
if event_handlers[ret]:
raise Exception('Already waiting for %s: %s' %
(ret, event_handlers[ret]))
event_handlers[ret] = gen
elif isinstance(ret, Wait):
# Register the origin generator as a waiting callback
@ -140,4 +151,4 @@ def run_forever(start_gens):
__call_at(None, gen)
else:
raise Exception("Unhandled result %s by %s" % (ret, gen))
raise Exception('Unhandled result %s by %s' % (ret, gen))