mirror of https://github.com/jetkvm/kvm.git
chore: use dynamic duration for scheduleAutoRelease
This commit is contained in:
parent
53789ebd75
commit
6892eeba42
|
@ -157,6 +157,9 @@ func (u *UsbGadget) SetOnKeepAliveReset(f func()) {
|
||||||
u.onKeepAliveReset = &f
|
u.onKeepAliveReset = &f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DefaultAutoReleaseDuration is the default duration for auto-release of a key.
|
||||||
|
const DefaultAutoReleaseDuration = 100 * time.Millisecond
|
||||||
|
|
||||||
func (u *UsbGadget) scheduleAutoRelease(key byte) {
|
func (u *UsbGadget) scheduleAutoRelease(key byte) {
|
||||||
u.kbdAutoReleaseLock.Lock()
|
u.kbdAutoReleaseLock.Lock()
|
||||||
defer unlockWithLog(&u.kbdAutoReleaseLock, u.log, "autoRelease scheduled")
|
defer unlockWithLog(&u.kbdAutoReleaseLock, u.log, "autoRelease scheduled")
|
||||||
|
@ -165,10 +168,14 @@ func (u *UsbGadget) scheduleAutoRelease(key byte) {
|
||||||
u.kbdAutoReleaseTimers[key].Stop()
|
u.kbdAutoReleaseTimers[key].Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This shouldn't use the global autoReleaseKeyboardStartInterval
|
duration := u.kbdAutoReleaseTimerExtension
|
||||||
// but rather the baseExtension from the keepalive jitter compensation logic.
|
if duration == 0 {
|
||||||
// Make them global as they will in the future likely be variable.
|
duration = DefaultAutoReleaseDuration
|
||||||
u.kbdAutoReleaseTimers[key] = time.AfterFunc(100*time.Millisecond, func() {
|
}
|
||||||
|
|
||||||
|
u.log.Debug().Dur("duration", duration).Msg("autoRelease scheduled with duration")
|
||||||
|
|
||||||
|
u.kbdAutoReleaseTimers[key] = time.AfterFunc(duration, func() {
|
||||||
u.performAutoRelease(key)
|
u.performAutoRelease(key)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -197,6 +204,8 @@ func (u *UsbGadget) DelayAutoReleaseWithDuration(resetDuration time.Duration) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u.kbdAutoReleaseTimerExtension = resetDuration
|
||||||
|
|
||||||
u.log.Debug().Dur("reset_duration", resetDuration).Msg("delaying auto-release with dynamic duration")
|
u.log.Debug().Dur("reset_duration", resetDuration).Msg("delaying auto-release with dynamic duration")
|
||||||
|
|
||||||
for _, timer := range u.kbdAutoReleaseTimers {
|
for _, timer := range u.kbdAutoReleaseTimers {
|
||||||
|
|
|
@ -70,6 +70,7 @@ type UsbGadget struct {
|
||||||
|
|
||||||
kbdAutoReleaseLock sync.Mutex
|
kbdAutoReleaseLock sync.Mutex
|
||||||
kbdAutoReleaseTimers map[byte]*time.Timer
|
kbdAutoReleaseTimers map[byte]*time.Timer
|
||||||
|
kbdAutoReleaseTimerExtension time.Duration
|
||||||
|
|
||||||
keyboardStateLock sync.Mutex
|
keyboardStateLock sync.Mutex
|
||||||
keyboardStateCtx context.Context
|
keyboardStateCtx context.Context
|
||||||
|
@ -137,6 +138,7 @@ func newUsbGadget(name string, configMap map[string]gadgetConfigItem, enabledDev
|
||||||
keyboardState: 0,
|
keyboardState: 0,
|
||||||
keysDownState: KeysDownState{Modifier: 0, Keys: []byte{0, 0, 0, 0, 0, 0}}, // must be initialized to hidKeyBufferSize (6) zero bytes
|
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),
|
kbdAutoReleaseTimers: make(map[byte]*time.Timer),
|
||||||
|
kbdAutoReleaseTimerExtension: 0,
|
||||||
enabledDevices: *enabledDevices,
|
enabledDevices: *enabledDevices,
|
||||||
lastUserInput: time.Now(),
|
lastUserInput: time.Now(),
|
||||||
log: logger,
|
log: logger,
|
||||||
|
|
Loading…
Reference in New Issue