Files
MicroPythonOS/draft_code/keyboard_test_works_simplify.py
T
Thomas Farstrike f2ac71d6f2 Add draft_code
2025-06-13 09:55:17 +02:00

104 lines
2.9 KiB
Python

# Hardware initialization for Unix and MacOS systems
import lcd_bus
import lvgl as lv
import sdl_display
import task_handler
# Add lib/ to the path for modules, otherwise it will only search in ~/.micropython/lib and /usr/lib/micropython
import sys
sys.path.append('lib/')
import mpos.ui
#TFT_HOR_RES=640
#TFT_VER_RES=480
TFT_HOR_RES=320
TFT_VER_RES=240
def window_cb(args): # doesn't get called
print(f"Window callback: {args}")
bus = lcd_bus.SDLBus(flags=0)
bus.register_window_callback(window_cb)
# bus.set_window_size(320,240,-1,False) # -1 might be 25 but it always becomes black, except for format 0
buf1 = bus.allocate_framebuffer(TFT_HOR_RES * TFT_VER_RES * 2, 0)
display = sdl_display.SDLDisplay(data_bus=bus,display_width=TFT_HOR_RES,display_height=TFT_VER_RES,frame_buffer1=buf1,color_space=lv.COLOR_FORMAT.RGB565)
display.init()
import sdl_pointer
mouse = sdl_pointer.SDLPointer()
import sdl_keyboard
keyboard = sdl_keyboard.SDLKeyboard()
# seems indev isn't properly initialized
def keypad_cb(indev, indev_data):
#print(f"keypad_cb {indev} {indev_data}")
#key = indev.get_key() # always 0
#print(f"key {key}")
#key = indev_data.get("key")
#print(f"key {key}")
pressed, code = keyboard._get_key()
print(f"periodic pressed: {pressed}, code: {code}")
# I mean we could read the key and put it in the textarea but I want some kind of keypress :-/
def keyboard_cb(event):
event_code=event.get_code()
print(f"keyboard_test YES: code={event_code}") # target={event.get_target()}, user_data={event.get_user_data()}, param={event.get_param()}
def button_cb(event):
event_code=event.get_code()
name = mpos.ui.get_event_name(event_code)
print(f"button_cb YES: code={event_code} and name {name}")
# for some reason, this text areas is receiving mouse events, and draw events, but not key events...
def ta_callback_again(event):
event_code=event.get_code()
if event_code in [19,23,25,26,27,28,29,30,49]:
return
name = mpos.ui.get_event_name(event_code)
print(f"ta_callback_again {event_code} and {name}")
#print(f"ta_callback_again: code={event_code}") # target={event.get_target()}, user_data={event.get_user_data()}, param={event.get_param()}
keyboard.add_event_cb(keyboard_cb, lv.EVENT.ALL, None)
#group = lv.group_create()
#group = keyboard.get_group()
th = task_handler.TaskHandler(duration=5) # 5ms is recommended for MicroPython+LVGL on desktop
screen = lv.screen_active()
b = lv.button(screen)
b.center()
b.add_event_cb(button_cb, lv.EVENT.ALL, None)
#group.add_obj(b)
ta = lv.textarea(screen)
ta.set_one_line(True)
ta.align(lv.ALIGN.TOP_LEFT,0,0)
#group.add_obj(ta)
keyboard = lv.keyboard(screen)
keyboard.set_textarea(ta)
# this does something, but just gives indev 0, being error...
#indev = lv.indev_create()
#indev.set_type(lv.INDEV_TYPE.KEYPAD)
#indev.set_read_cb(keypad_cb)
ta.add_event_cb(ta_callback_again, lv.EVENT.ALL, None)
#keyboard.set_group(group)