3
3
import gc
4
4
import asyncio
5
5
from hardware import Rotary
6
+ from machine import I2C , Pin
7
+ from unit import CardKBUnit , KeyCode
8
+
9
+
10
+ class KeyEvent :
11
+ key = 0
12
+ status = False
6
13
7
14
8
15
class Framework :
@@ -49,6 +56,13 @@ async def run(self):
49
56
self ._app_selector .select (self ._launcher )
50
57
self ._launcher .start ()
51
58
59
+ self .i2c0 = I2C (0 , scl = Pin (15 ), sda = Pin (13 ), freq = 100000 )
60
+ self ._kb_status = False
61
+ if 0x5F in self .i2c0 .scan ():
62
+ self ._kb = CardKBUnit (self .i2c0 )
63
+ self ._event = KeyEvent ()
64
+ self ._kb_status = True
65
+
52
66
while True :
53
67
M5 .update ()
54
68
@@ -65,6 +79,11 @@ async def run(self):
65
79
app .stop ()
66
80
self ._app_selector .select (self ._launcher )
67
81
self ._launcher .start ()
82
+ elif M5 .BtnA .wasDoubleClicked ():
83
+ M5 .Speaker .tone (4500 , 50 )
84
+ app = self ._app_selector .current ()
85
+ if hasattr (app , "_keycode_ctrl_event_handler" ):
86
+ await app ._keycode_ctrl_event_handler (self )
68
87
69
88
if rotary .get_rotary_status ():
70
89
direction = rotary .get_rotary_increments ()
@@ -79,8 +98,32 @@ async def run(self):
79
98
if hasattr (app , "_keycode_dpad_up_event_handler" ):
80
99
await app ._keycode_dpad_up_event_handler (self )
81
100
101
+ if self ._kb_status :
102
+ if self ._kb .is_pressed ():
103
+ M5 .Speaker .tone (3500 , 50 )
104
+ self ._event .key = self ._kb .get_key ()
105
+ self ._event .status = False
106
+ await self .handle_input (self ._event )
107
+
82
108
await asyncio .sleep_ms (10 )
83
109
110
+ async def handle_input (self , event : KeyEvent ):
111
+ if event .key is KeyCode .KEYCODE_RIGHT :
112
+ M5 .Speaker .tone (3500 , 50 )
113
+ app = self ._app_selector .current ()
114
+ if hasattr (app , "_keycode_dpad_up_event_handler" ):
115
+ await app ._keycode_dpad_up_event_handler (self )
116
+ event .status = True
117
+ if KeyCode .KEYCODE_LEFT == event .key :
118
+ app = self ._app_selector .current ()
119
+ if hasattr (app , "_keycode_dpad_down_event_handler" ):
120
+ await app ._keycode_dpad_down_event_handler (self )
121
+ event .status = True
122
+ if event .status == False :
123
+ app = self ._app_selector .current ()
124
+ if hasattr (app , "_kb_event_handler" ):
125
+ await app ._kb_event_handler (event , self )
126
+
84
127
async def gc_task (self ):
85
128
while True :
86
129
gc .collect ()
0 commit comments