mirror of https://github.com/jetkvm/kvm.git
Return the KeysDownState from keyboardReport
Also clear out the hidErrorRollOver once sent to reset the keyboard to nothing down.
This commit is contained in:
parent
894e66efaa
commit
7a4950973c
|
@ -261,7 +261,23 @@ func (u *UsbGadget) keyboardWriteHidFile(modifier byte, keys []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UsbGadget) KeyboardReport(modifier byte, keys []byte) error {
|
func (u *UsbGadget) UpdateKeysDown(modifier byte, keys []byte) KeysDownState {
|
||||||
|
// if we just reported an error roll over, we should clear the keys
|
||||||
|
if keys[0] == hidErrorRollOver {
|
||||||
|
for i := range keys {
|
||||||
|
keys[i] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
downState := KeysDownState{
|
||||||
|
Modifier: modifier,
|
||||||
|
Keys: []byte(keys[:]),
|
||||||
|
}
|
||||||
|
u.updateKeyDownState(downState)
|
||||||
|
return downState
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UsbGadget) KeyboardReport(modifier byte, keys []byte) (KeysDownState, error) {
|
||||||
u.keyboardLock.Lock()
|
u.keyboardLock.Lock()
|
||||||
defer u.keyboardLock.Unlock()
|
defer u.keyboardLock.Unlock()
|
||||||
defer u.resetUserInputTime()
|
defer u.resetUserInputTime()
|
||||||
|
@ -273,7 +289,12 @@ func (u *UsbGadget) KeyboardReport(modifier byte, keys []byte) error {
|
||||||
keys = append(keys, make([]byte, hidKeyBufferSize-len(keys))...)
|
keys = append(keys, make([]byte, hidKeyBufferSize-len(keys))...)
|
||||||
}
|
}
|
||||||
|
|
||||||
return u.keyboardWriteHidFile(modifier, keys)
|
err := u.keyboardWriteHidFile(modifier, keys)
|
||||||
|
if err != nil {
|
||||||
|
u.log.Warn().Uint8("modifier", modifier).Uints8("keys", keys).Msg("Could not write keyboard report to hidg0")
|
||||||
|
}
|
||||||
|
|
||||||
|
return u.UpdateKeysDown(modifier, keys), err
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -357,16 +378,10 @@ func (u *UsbGadget) KeypressReport(key byte, press bool) (KeysDownState, error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := u.keyboardWriteHidFile(modifier, keys); err != nil {
|
err := u.keyboardWriteHidFile(modifier, keys)
|
||||||
|
if err != nil {
|
||||||
u.log.Warn().Uint8("modifier", modifier).Uints8("keys", keys).Msg("Could not write keypress report to hidg0")
|
u.log.Warn().Uint8("modifier", modifier).Uints8("keys", keys).Msg("Could not write keypress report to hidg0")
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = KeysDownState{
|
return u.UpdateKeysDown(modifier, keys), err
|
||||||
Modifier: modifier,
|
|
||||||
Keys: []byte(keys[:]),
|
|
||||||
}
|
|
||||||
|
|
||||||
u.updateKeyDownState(result)
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,6 @@ func onRPCMessage(message webrtc.DataChannelMessage, session *Session) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
scopedLogger.Trace().Msg("Calling RPC handler")
|
|
||||||
result, err := callRPCHandler(scopedLogger, handler, request.Params)
|
result, err := callRPCHandler(scopedLogger, handler, request.Params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
scopedLogger.Error().Err(err).Msg("Error calling RPC handler")
|
scopedLogger.Error().Err(err).Msg("Error calling RPC handler")
|
||||||
|
|
2
usb.go
2
usb.go
|
@ -43,7 +43,7 @@ func initUsbGadget() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func rpcKeyboardReport(modifier byte, keys []byte) error {
|
func rpcKeyboardReport(modifier byte, keys []byte) (usbgadget.KeysDownState, error) {
|
||||||
return gadget.KeyboardReport(modifier, keys)
|
return gadget.KeyboardReport(modifier, keys)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue