package kvm import ( "github.com/jetkvm/kvm/internal/usbgadget" "time" ) 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, &logger, ) 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 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 { logger.Info("No active RPC session, skipping update state update") return } writeJSONRPCEvent("usbState", usbState, currentSession) }() } func checkUSBState() { newState := gadget.GetUsbState() if newState == usbState { return } usbState = newState logger.Infof("USB state changed from %s to %s", usbState, newState) requestDisplayUpdate() triggerUSBStateUpdate() }