You've already forked MicroPythonOS
mirror of
https://github.com/m5stack/MicroPythonOS.git
synced 2026-05-20 11:51:27 -07:00
114 lines
3.0 KiB
Python
114 lines
3.0 KiB
Python
|
|
import lcd_bus
|
||
|
|
import lvgl as lv
|
||
|
|
import sdl_display
|
||
|
|
import task_handler
|
||
|
|
import sys
|
||
|
|
sys.path.append('lib/')
|
||
|
|
import sdl_pointer
|
||
|
|
import sdl_keyboard
|
||
|
|
|
||
|
|
# Initialize display
|
||
|
|
TFT_HOR_RES = 320
|
||
|
|
TFT_VER_RES = 240
|
||
|
|
bus = lcd_bus.SDLBus(flags=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()
|
||
|
|
|
||
|
|
# Initialize mouse
|
||
|
|
mouse = sdl_pointer.SDLPointer()
|
||
|
|
|
||
|
|
# Initialize keyboard
|
||
|
|
#keyboard = sdl_keyboard.SDLKeyboard()
|
||
|
|
|
||
|
|
pressed = False
|
||
|
|
def get_key(indev,data):
|
||
|
|
print("simulating get_key")
|
||
|
|
global pressed
|
||
|
|
if not pressed:
|
||
|
|
# input your keypad code
|
||
|
|
data.state = 1 #1 for press 0 for released
|
||
|
|
data.key=100
|
||
|
|
#pressed = True
|
||
|
|
else:
|
||
|
|
data.state = 0 #1 for press 0 for released
|
||
|
|
data.key=100
|
||
|
|
pressed = False
|
||
|
|
|
||
|
|
|
||
|
|
# Create group
|
||
|
|
group = lv.group_create()
|
||
|
|
group.set_default()
|
||
|
|
|
||
|
|
keyboard=lv.indev_create()
|
||
|
|
keyboard.set_type(lv.INDEV_TYPE.KEYPAD)
|
||
|
|
keyboard.set_read_cb(get_key)
|
||
|
|
keyboard.set_group(group)
|
||
|
|
|
||
|
|
#keyboard.set_group(group)
|
||
|
|
|
||
|
|
# Create widgets
|
||
|
|
screen = lv.screen_active()
|
||
|
|
|
||
|
|
# Textarea
|
||
|
|
ta = lv.textarea(screen)
|
||
|
|
ta.set_one_line(True)
|
||
|
|
ta.set_placeholder_text("Type here")
|
||
|
|
ta.align(lv.ALIGN.TOP_LEFT, 10, 10)
|
||
|
|
group.add_obj(ta)
|
||
|
|
|
||
|
|
# Switch
|
||
|
|
sw = lv.switch(screen)
|
||
|
|
sw.align(lv.ALIGN.TOP_LEFT, 10, 50)
|
||
|
|
group.add_obj(sw)
|
||
|
|
|
||
|
|
# Test Button
|
||
|
|
btn = lv.button(screen)
|
||
|
|
btn.align(lv.ALIGN.TOP_LEFT, 10, 90)
|
||
|
|
lbl = lv.label(btn)
|
||
|
|
lbl.set_text("Test Button")
|
||
|
|
group.add_obj(btn)
|
||
|
|
|
||
|
|
# Simulate NEXT key button
|
||
|
|
btn_next = lv.button(screen)
|
||
|
|
btn_next.align(lv.ALIGN.BOTTOM_LEFT, 10, -10)
|
||
|
|
lbl_next = lv.label(btn_next)
|
||
|
|
lbl_next.set_text("NEXT")
|
||
|
|
def btn_next_cb(event):
|
||
|
|
if event.get_code() == lv.EVENT.CLICKED:
|
||
|
|
keyboard._keypad_cb(None, 1, 9, 0) # Simulate KEY_TAB (lv.KEY.NEXT) press
|
||
|
|
keyboard._keypad_cb(None, 0, 9, 0) # Simulate release
|
||
|
|
btn_next.add_event_cb(btn_next_cb, lv.EVENT.CLICKED, None)
|
||
|
|
|
||
|
|
# Simulate ENTER key button
|
||
|
|
btn_enter = lv.button(screen)
|
||
|
|
btn_enter.align(lv.ALIGN.BOTTOM_LEFT, 100, -10)
|
||
|
|
lbl_enter = lv.label(btn_enter)
|
||
|
|
lbl_enter.set_text("ENTER")
|
||
|
|
def btn_enter_cb(event):
|
||
|
|
if event.get_code() == lv.EVENT.CLICKED:
|
||
|
|
keyboard._keypad_cb(None, 1, 13, 0) # Simulate KEY_RETURN (lv.KEY.ENTER) press
|
||
|
|
keyboard._keypad_cb(None, 0, 13, 0) # Simulate release
|
||
|
|
btn_enter.add_event_cb(btn_enter_cb, lv.EVENT.CLICKED, None)
|
||
|
|
|
||
|
|
# Debug focus
|
||
|
|
def check_focus():
|
||
|
|
focused = lv.group_get_focused(group)
|
||
|
|
print(f"Focused widget: {focused}")
|
||
|
|
th = task_handler.TaskHandler(duration=5)
|
||
|
|
th.register_task(check_focus, 1000)
|
||
|
|
|
||
|
|
# Debug events
|
||
|
|
def event_cb(event, name):
|
||
|
|
event_code = event.get_code()
|
||
|
|
print(f"{name} event: code={event_code}, name={getattr(lv, 'EVENT_' + str(event_code), 'UNKNOWN')}")
|
||
|
|
ta.add_event_cb(lambda e: event_cb(e, "Textarea"), lv.EVENT.ALL, None)
|
||
|
|
sw.add_event_cb(lambda e: event_cb(e, "Switch"), lv.EVENT.ALL, None)
|
||
|
|
btn.add_event_cb(lambda e: event_cb(e, "Button"), lv.EVENT.ALL, None)
|