|
1 | | -import micropython |
2 | | -from machine import signal as pop_signal, set_stdin_char, debug |
3 | | -import ujson |
| 1 | +from machine import signal as pop_signal, debug |
4 | 2 |
|
5 | 3 | from component import Component, Monitor, devices |
6 | 4 |
|
|
12 | 10 | monitor = Monitor(gpu) |
13 | 11 | gpu.fill(1, 1, monitor.widthSize, monitor.heightSize, " ") |
14 | 12 |
|
| 13 | +buf = [] |
| 14 | + |
| 15 | + |
| 16 | +def input_handler(): |
| 17 | + while not buf: |
| 18 | + signal_handler() |
| 19 | + |
| 20 | + return int(buf.pop(0)) |
| 21 | + |
15 | 22 |
|
16 | 23 | def print_handler(buf): |
17 | 24 | try: |
18 | | - for char in buf: |
19 | | - monitor.putChar(char) |
| 25 | + monitor.put(buf) |
20 | 26 | except BaseException as e: |
21 | | - debug("exc%s: %s" % (type(e).__name__ , e)) |
| 27 | + debug("print_handler exc =? %s: %s" % (type(e).__name__, e)) |
22 | 28 |
|
23 | 29 |
|
24 | | -def signal_handler(_): |
25 | | - micropython.schedule(signal_handle, None) |
26 | | - |
27 | | - |
28 | | -def signal_handle(_): |
| 30 | +def signal_handler(): |
29 | 31 | DEBUG = False |
30 | | - while True: |
31 | | - try: |
32 | | - # TODO: sleeping is possble with ticks=n |
33 | | - # sleeping with some ticks but signal available then resume computer and give signal |
34 | | - # ExecutionResult.Sleep(inf) => when signal is available then return signal |
35 | | - signal = pop_signal() |
36 | | - # debug("check signal " + repr(signal)) |
37 | | - if not signal: |
38 | | - break |
39 | | - |
40 | | - debug(ujson.dumps(signal) + '\n') |
41 | | - |
42 | | - name, args = signal # type: str, tuple |
43 | | - if name == "key_down" and len(args) >= 4: |
44 | | - # when redirectKeyEvent set then never called |
45 | | - _, char, _, _, *_ = args |
46 | | - set_stdin_char(int(char)) |
47 | | - elif name == "clipboard" and len(args) >= 3: |
48 | | - _, value, _, *_ = args |
49 | | - for char in value: |
50 | | - set_stdin_char(ord(char)) |
51 | | - elif name == "key_up" and len(args) >= 4: |
52 | | - pass |
53 | | - elif name == "component_added" and len(args) >= 2: |
54 | | - if DEBUG: |
55 | | - debug("signal", name, args, len(args)) |
56 | | - address, device_type, *_ = args |
57 | | - devices[device_type] = Component(address, device_type) |
58 | | - else: |
59 | | - if DEBUG: |
60 | | - debug("signal", name, args, len(args)) |
61 | | - except BaseException as e: |
62 | | - debug("exc%s: %s" % (type(e).__name__ , e)) |
| 32 | + try: |
| 33 | + signal = pop_signal(20) |
| 34 | + if signal is None: |
| 35 | + return |
| 36 | + |
| 37 | + # debug(ujson.dumps(signal) + '\n') |
| 38 | + name, args = signal # type: str, tuple |
| 39 | + if name == "key_down" and len(args) >= 4: |
| 40 | + # when redirectKeyEvent set then never called |
| 41 | + _, char, _, _, *_ = args |
| 42 | + buf.append(char) |
| 43 | + elif name == "clipboard" and len(args) >= 3: |
| 44 | + _, value, _, *_ = args |
| 45 | + # for char in value: |
| 46 | + # set_stdin_char(ord(char)) |
| 47 | + elif name == "key_up" and len(args) >= 4: |
| 48 | + pass |
| 49 | + elif name == "component_added" and len(args) >= 2: |
| 50 | + if DEBUG: |
| 51 | + debug("signal", name, args, len(args)) |
| 52 | + address, device_type, *_ = args |
| 53 | + devices[device_type] = Component(address, device_type) |
| 54 | + else: |
| 55 | + if DEBUG: |
| 56 | + debug("signal", name, args, len(args)) |
| 57 | + except BaseException as e: |
| 58 | + debug("signal_handler exc => %s: %s" % (type(e).__name__, e)) |
0 commit comments