chore(usbgadget): update usbgadget config only when needed (#474)

This commit is contained in:
Aveline
2025-05-19 21:48:43 +02:00
committed by GitHub
parent 0a4a1af80e
commit 7a9fb7cbb1
14 changed files with 1357 additions and 221 deletions

View File

@@ -8,6 +8,7 @@ import (
"sync"
"time"
"github.com/jetkvm/kvm/internal/logging"
"github.com/rs/zerolog"
)
@@ -28,7 +29,8 @@ type Config struct {
Manufacturer string `json:"manufacturer"`
Product string `json:"product"`
isEmpty bool
strictMode bool // when it's enabled, all warnings will be converted to errors
isEmpty bool
}
var defaultUsbGadgetDevices = Devices{
@@ -59,22 +61,31 @@ type UsbGadget struct {
enabledDevices Devices
strictMode bool // only intended for testing for now
absMouseAccumulatedWheelY float64
lastUserInput time.Time
tx *UsbGadgetTransaction
txLock sync.Mutex
log *zerolog.Logger
}
const configFSPath = "/sys/kernel/config"
const gadgetPath = "/sys/kernel/config/usb_gadget"
var defaultLogger = zerolog.New(os.Stdout).Level(zerolog.InfoLevel)
var defaultLogger = logging.GetSubsystemLogger("usbgadget")
// NewUsbGadget creates a new UsbGadget.
func NewUsbGadget(name string, enabledDevices *Devices, config *Config, logger *zerolog.Logger) *UsbGadget {
return newUsbGadget(name, defaultGadgetConfig, enabledDevices, config, logger)
}
func newUsbGadget(name string, configMap map[string]gadgetConfigItem, enabledDevices *Devices, config *Config, logger *zerolog.Logger) *UsbGadget {
if logger == nil {
logger = &defaultLogger
logger = defaultLogger
}
if enabledDevices == nil {
@@ -89,16 +100,19 @@ func NewUsbGadget(name string, enabledDevices *Devices, config *Config, logger *
name: name,
kvmGadgetPath: path.Join(gadgetPath, name),
configC1Path: path.Join(gadgetPath, name, "configs/c.1"),
configMap: defaultGadgetConfig,
configMap: configMap,
customConfig: *config,
configLock: sync.Mutex{},
keyboardLock: sync.Mutex{},
absMouseLock: sync.Mutex{},
relMouseLock: sync.Mutex{},
txLock: sync.Mutex{},
enabledDevices: *enabledDevices,
lastUserInput: time.Now(),
log: logger,
strictMode: config.strictMode,
absMouseAccumulatedWheelY: 0,
}
if err := g.Init(); err != nil {