33import gc
44import asyncio
55from 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
613
714
815class Framework :
@@ -49,6 +56,13 @@ async def run(self):
4956 self ._app_selector .select (self ._launcher )
5057 self ._launcher .start ()
5158
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+
5266 while True :
5367 M5 .update ()
5468
@@ -65,6 +79,11 @@ async def run(self):
6579 app .stop ()
6680 self ._app_selector .select (self ._launcher )
6781 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 )
6887
6988 if rotary .get_rotary_status ():
7089 direction = rotary .get_rotary_increments ()
@@ -79,8 +98,32 @@ async def run(self):
7998 if hasattr (app , "_keycode_dpad_up_event_handler" ):
8099 await app ._keycode_dpad_up_event_handler (self )
81100
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+
82108 await asyncio .sleep_ms (10 )
83109
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+
84127 async def gc_task (self ):
85128 while True :
86129 gc .collect ()
0 commit comments