Skip to content

Commit 16b62ad

Browse files
committed
Move hold key handling into Go backend analogous to https://www.kernel.org/doc/Documentation/usb/gadget_hid.txt
1 parent 978bef4 commit 16b62ad

File tree

5 files changed

+20
-12
lines changed

5 files changed

+20
-12
lines changed

internal/usbgadget/hid_keyboard.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (u *UsbGadget) keyboardWriteHidFile(data []byte) error {
7474
return nil
7575
}
7676

77-
func (u *UsbGadget) KeyboardReport(modifier uint8, keys []uint8) error {
77+
func (u *UsbGadget) KeyboardReport(modifier uint8, keys []uint8, hold bool) error {
7878
u.keyboardLock.Lock()
7979
defer u.keyboardLock.Unlock()
8080

@@ -90,6 +90,13 @@ func (u *UsbGadget) KeyboardReport(modifier uint8, keys []uint8) error {
9090
return err
9191
}
9292

93+
if !hold {
94+
err := u.keyboardWriteHidFile(make([]uint8, 8))
95+
if err != nil {
96+
return err
97+
}
98+
}
99+
93100
u.resetUserInputTime()
94101
return nil
95102
}

jsonrpc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ var rpcHandlers = map[string]RPCHandler{
978978
"getNetworkSettings": {Func: rpcGetNetworkSettings},
979979
"setNetworkSettings": {Func: rpcSetNetworkSettings, Params: []string{"settings"}},
980980
"renewDHCPLease": {Func: rpcRenewDHCPLease},
981-
"keyboardReport": {Func: rpcKeyboardReport, Params: []string{"modifier", "keys"}},
981+
"keyboardReport": {Func: rpcKeyboardReport, Params: []string{"modifier", "keys", "hold"}},
982982
"absMouseReport": {Func: rpcAbsMouseReport, Params: []string{"x", "y", "buttons"}},
983983
"relMouseReport": {Func: rpcRelMouseReport, Params: []string{"dx", "dy", "buttons"}},
984984
"wheelReport": {Func: rpcWheelReport, Params: []string{"wheelY"}},

ui/src/components/popovers/PasteModal.tsx

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import { keys, modifiers } from "@/keyboardMappings";
1313
import { layouts, chars } from "@/keyboardLayouts";
1414
import notifications from "@/notifications";
1515

16-
const hidKeyboardPayload = (keys: number[], modifier: number) => {
17-
return { keys, modifier };
16+
const hidKeyboardPayload = (keys: number[], modifier: number, hold: boolean) => {
17+
return { keys, modifier, hold };
1818
};
1919

2020
const modifierCode = (shift?: boolean, altRight?: boolean) => {
@@ -82,13 +82,10 @@ export default function PasteModal() {
8282
await new Promise<void>((resolve, reject) => {
8383
send(
8484
"keyboardReport",
85-
hidKeyboardPayload([kei], modz[index]),
85+
hidKeyboardPayload([kei], modz[index], false),
8686
params => {
8787
if ("error" in params) return reject(params.error);
88-
send("keyboardReport", hidKeyboardPayload([], 0), params => {
89-
if ("error" in params) return reject(params.error);
90-
resolve();
91-
});
88+
resolve();
9289
},
9390
);
9491
});

ui/src/hooks/useKeyboard.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import { useHidStore, useRTCStore } from "@/hooks/stores";
44
import { useJsonRpc } from "@/hooks/useJsonRpc";
55
import { keys, modifiers } from "@/keyboardMappings";
66

7+
const hidKeyboardPayload = (keys: number[], modifier: number, hold: boolean) => {
8+
return { keys, modifier, hold };
9+
};
10+
711
export default function useKeyboard() {
812
const [send] = useJsonRpc();
913

@@ -17,7 +21,7 @@ export default function useKeyboard() {
1721
if (rpcDataChannel?.readyState !== "open") return;
1822
const accModifier = modifiers.reduce((acc, val) => acc + val, 0);
1923

20-
send("keyboardReport", { keys, modifier: accModifier });
24+
send("keyboardReport", hidKeyboardPayload(keys, accModifier, true));
2125

2226
// We do this for the info bar to display the currently pressed keys for the user
2327
updateActiveKeysAndModifiers({ keys: keys, modifiers: modifiers });

usb.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ func initUsbGadget() {
2626
}()
2727
}
2828

29-
func rpcKeyboardReport(modifier uint8, keys []uint8) error {
30-
return gadget.KeyboardReport(modifier, keys)
29+
func rpcKeyboardReport(modifier uint8, keys []uint8, hold bool) error {
30+
return gadget.KeyboardReport(modifier, keys, hold)
3131
}
3232

3333
func rpcAbsMouseReport(x, y int, buttons uint8) error {

0 commit comments

Comments
 (0)