package kvm import ( "time" "github.com/jetkvm/kvm/internal/usbgadget" ) var gadget *usbgadget.UsbGadget // initUsbGadget initializes the USB gadget. // call it only after the config is loaded. func initUsbGadget() { gadget = usbgadget.NewUsbGadget( "jetkvm", config.UsbDevices, config.UsbConfig, usbLogger, ) go func() { for { checkUSBState() time.Sleep(500 * time.Millisecond) } }() } func rpcKeyboardReport(modifier uint8, keys []uint8) error { return gadget.KeyboardReport(modifier, keys) } func rpcAbsMouseReport(x, y int, buttons uint8) error { return gadget.AbsMouseReport(x, y, buttons) } func rpcRelMouseReport(dx, dy int8, buttons uint8) error { return gadget.RelMouseReport(dx, dy, buttons) } func rpcWheelReport(wheelY int8) error { return gadget.AbsMouseWheelReport(wheelY) } var usbState = "unknown" func rpcGetUSBState() (state string) { return gadget.GetUsbState() } func triggerUSBStateUpdate() { go func() { if currentSession == nil { usbLogger.Info().Msg("No active RPC session, skipping update state update") return } writeJSONRPCEvent("usbState", usbState, currentSession) }() } func checkUSBState() { newState := gadget.GetUsbState() if newState == usbState { return } usbState = newState usbLogger.Info().Str("from", usbState).Str("to", newState).Msg("USB state changed") requestDisplayUpdate(true) triggerUSBStateUpdate() }