- devfs.vp: string.split 传 PATH_BUFFER_SIZE(配合 split 新增容量参数) - fat32_types.vp: lfn_extract 越界钳制(base+i > MAX_LFN 返回 -1) - sheet.vp: gfx.Renderer 实参修正为 (fb, zb, w, h)(原单参导致 w/h=0 渲染空操作) - 同批包含 VKernel 其余既有移植改动与 vpsdk/Apps/Libs 工作区内容
51 lines
1.2 KiB
Plaintext
51 lines
1.2 KiB
Plaintext
import t, c
|
|
import drivers.input.keyboard.keyboard as keyboard
|
|
import drivers.usb.hid.usb_kbd as usb_kbd
|
|
import drivers.serial.uart.serial as serial
|
|
import sched.sched as sched
|
|
import viperlib
|
|
|
|
SERVICE_KEYBOARD: t.CDefine = 1
|
|
|
|
@t.Object
|
|
class KeyboardService:
|
|
th: sched.Thread | t.CPtr
|
|
running: int
|
|
usb_kbd_th: sched.Thread | t.CPtr
|
|
|
|
def __init__(self):
|
|
self.th = None
|
|
self.running = 0
|
|
self.usb_kbd_th = None
|
|
|
|
kbd_svc: KeyboardService
|
|
|
|
|
|
def kbd_thread(arg: t.CPtr) -> int:
|
|
serial.puts("[kbd_svc] started\n")
|
|
while True:
|
|
if keyboard.has_data():
|
|
sc: uint8 = keyboard.read_scancode()
|
|
else:
|
|
sched.Scheduler._yield()
|
|
return 0
|
|
|
|
def usb_kbd_thread(arg: t.CPtr) -> int:
|
|
serial.puts("[usb_kbd_svc] started\n")
|
|
evt: usb_kbd.usb_kbd_event
|
|
while True:
|
|
if usb_kbd.has_data():
|
|
usb_kbd.read_event(c.Addr(evt))
|
|
else:
|
|
sched.Scheduler._yield()
|
|
return 0
|
|
|
|
def start() -> int:
|
|
global kbd_svc
|
|
kbd_svc = KeyboardService()
|
|
keyboard.init()
|
|
serial.puts("[kbd_svc] PS/2 keyboard initialized, IRQ1 installed\n")
|
|
usb_kbd.init()
|
|
kbd_svc.running = 1
|
|
return 0
|