mirror of
https://github.com/jetkvm/kvm.git
synced 2025-09-16 08:38:14 +00:00
* chore(network): improve connectivity check * refactor(network): rewrite network and timesync component * feat(display): show cloud connection status * chore: change logging verbosity * chore(websecure): update log message * fix(ota): validate root certificate when downloading update * feat(ui): add network settings tab * fix(display): cloud connecting animation * fix: golintci issues * feat: add network settings tab * feat(timesync): query servers in parallel * refactor(network): move to internal/network package * feat(timesync): add metrics * refactor(log): move log to internal/logging package * refactor(mdms): move mdns to internal/mdns package * feat(developer): add pprof endpoint * feat(logging): add a simple logging streaming endpoint * fix(mdns): do not start mdns until network is up * feat(network): allow users to update network settings from ui * fix(network): handle errors when net.IPAddr is nil * fix(mdns): scopedLogger SIGSEGV * fix(dhcp): watch directory instead of file to catch fsnotify.Create event * refactor(nbd): move platform-specific code to different files * refactor(native): move platform-specific code to different files * chore: fix linter issues * chore(dev_deploy): allow to override PION_LOG_TRACE
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
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()
|
|
}
|