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 define SERVICE_KEYBOARD = 1 class KeyboardService: th: sched.Thread* running: int usb_kbd_th: sched.Thread* def __init__(self): self.th = None self.running = 0 self.usb_kbd_th = None def kbd_thread(arg: rawptr) -> 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: rawptr) -> 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(&evt) else: sched.Scheduler._yield() return 0 kbd_svc: KeyboardService = KeyboardService() def start() -> int: global kbd_svc kbd_svc.__init__() keyboard.init() serial.puts("[kbd_svc] PS/2 keyboard initialized, IRQ1 installed\n") usb_kbd.init() kbd_svc.running = 1 return 0