From b1f345db70c056067f283bd1d34cf1414c755b75 Mon Sep 17 00:00:00 2001 From: Adam Shiervani Date: Thu, 18 Sep 2025 10:23:33 +0200 Subject: [PATCH] Use harcoded timer reset value for now --- internal/usbgadget/hid_keyboard.go | 14 +++------- internal/usbgadget/usbgadget.go | 42 ++++++++++++++---------------- 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/internal/usbgadget/hid_keyboard.go b/internal/usbgadget/hid_keyboard.go index 8335966d..d5504010 100644 --- a/internal/usbgadget/hid_keyboard.go +++ b/internal/usbgadget/hid_keyboard.go @@ -168,14 +168,10 @@ func (u *UsbGadget) scheduleAutoRelease(key byte) { u.kbdAutoReleaseTimers[key].Stop() } - duration := u.kbdAutoReleaseTimerExtension - if duration == 0 { - duration = DefaultAutoReleaseDuration - } - - u.log.Debug().Dur("duration", duration).Msg("autoRelease scheduled with duration") - - u.kbdAutoReleaseTimers[key] = time.AfterFunc(duration, func() { + // TODO: make this configurable + // We currently hardcode the duration to 100ms + // However, it should be the same as the duration of the keep-alive reset called baseExtension. + u.kbdAutoReleaseTimers[key] = time.AfterFunc(100*time.Millisecond, func() { u.performAutoRelease(key) }) } @@ -204,8 +200,6 @@ func (u *UsbGadget) DelayAutoReleaseWithDuration(resetDuration time.Duration) { return } - u.kbdAutoReleaseTimerExtension = resetDuration - u.log.Debug().Dur("reset_duration", resetDuration).Msg("delaying auto-release with dynamic duration") for _, timer := range u.kbdAutoReleaseTimers { diff --git a/internal/usbgadget/usbgadget.go b/internal/usbgadget/usbgadget.go index 36d54a2c..17abd9eb 100644 --- a/internal/usbgadget/usbgadget.go +++ b/internal/usbgadget/usbgadget.go @@ -68,9 +68,8 @@ type UsbGadget struct { keyboardState byte // keyboard latched state (NumLock, CapsLock, ScrollLock, Compose, Kana) keysDownState KeysDownState // keyboard dynamic state (modifier keys and pressed keys) - kbdAutoReleaseLock sync.Mutex - kbdAutoReleaseTimers map[byte]*time.Timer - kbdAutoReleaseTimerExtension time.Duration + kbdAutoReleaseLock sync.Mutex + kbdAutoReleaseTimers map[byte]*time.Timer keyboardStateLock sync.Mutex keyboardStateCtx context.Context @@ -123,25 +122,24 @@ func newUsbGadget(name string, configMap map[string]gadgetConfigItem, enabledDev keyboardCtx, keyboardCancel := context.WithCancel(context.Background()) g := &UsbGadget{ - name: name, - kvmGadgetPath: path.Join(gadgetPath, name), - configC1Path: path.Join(gadgetPath, name, "configs/c.1"), - configMap: configMap, - customConfig: *config, - configLock: sync.Mutex{}, - keyboardLock: sync.Mutex{}, - absMouseLock: sync.Mutex{}, - relMouseLock: sync.Mutex{}, - txLock: sync.Mutex{}, - keyboardStateCtx: keyboardCtx, - keyboardStateCancel: keyboardCancel, - keyboardState: 0, - keysDownState: KeysDownState{Modifier: 0, Keys: []byte{0, 0, 0, 0, 0, 0}}, // must be initialized to hidKeyBufferSize (6) zero bytes - kbdAutoReleaseTimers: make(map[byte]*time.Timer), - kbdAutoReleaseTimerExtension: 0, - enabledDevices: *enabledDevices, - lastUserInput: time.Now(), - log: logger, + name: name, + kvmGadgetPath: path.Join(gadgetPath, name), + configC1Path: path.Join(gadgetPath, name, "configs/c.1"), + configMap: configMap, + customConfig: *config, + configLock: sync.Mutex{}, + keyboardLock: sync.Mutex{}, + absMouseLock: sync.Mutex{}, + relMouseLock: sync.Mutex{}, + txLock: sync.Mutex{}, + keyboardStateCtx: keyboardCtx, + keyboardStateCancel: keyboardCancel, + keyboardState: 0, + keysDownState: KeysDownState{Modifier: 0, Keys: []byte{0, 0, 0, 0, 0, 0}}, // must be initialized to hidKeyBufferSize (6) zero bytes + kbdAutoReleaseTimers: make(map[byte]*time.Timer), + enabledDevices: *enabledDevices, + lastUserInput: time.Now(), + log: logger, strictMode: config.strictMode,