mirror of
https://github.com/luckfox-eng29/kvm.git
synced 2026-05-26 08:05:08 +02:00
feat(keyboard): update keyboard layouts and key display mappings for multiple languages
Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
This commit is contained in:
@@ -3,6 +3,7 @@ package hidrpc
|
||||
import "fmt"
|
||||
|
||||
type Handler interface {
|
||||
HandleHandshake(version byte) error
|
||||
HandleKeyboardReport(modifier byte, keys []byte) error
|
||||
HandleKeypressReport(key byte, press bool) error
|
||||
HandleKeypressKeepAlive() error
|
||||
@@ -25,6 +26,11 @@ func (s *Server) HandleMessage(data []byte) error {
|
||||
}
|
||||
|
||||
switch msg.Type {
|
||||
case MessageTypeHandshake:
|
||||
if len(msg.Data) < 1 {
|
||||
return fmt.Errorf("invalid handshake length: %d", len(msg.Data))
|
||||
}
|
||||
return s.handler.HandleHandshake(msg.Data[0])
|
||||
case MessageTypeKeyboardReport:
|
||||
if len(msg.Data) < 7 {
|
||||
return fmt.Errorf("invalid keyboard report length: %d", len(msg.Data))
|
||||
|
||||
@@ -30,6 +30,10 @@ func MarshalKeyboardReport(modifier byte, keys []byte) []byte {
|
||||
return data
|
||||
}
|
||||
|
||||
func MarshalHandshake(version byte) []byte {
|
||||
return []byte{MessageTypeHandshake, version}
|
||||
}
|
||||
|
||||
func MarshalKeypressReport(key byte, press bool) []byte {
|
||||
data := make([]byte, 3)
|
||||
data[0] = MessageTypeKeypressReport
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"reflect"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -211,15 +212,16 @@ func (u *UsbGadget) OpenKeyboardHidFile() error {
|
||||
}
|
||||
|
||||
func (u *UsbGadget) keyboardWriteHidFile(data []byte) error {
|
||||
if err := u.openKeyboardHidFile(); err != nil {
|
||||
return err
|
||||
var parts []string
|
||||
for _, b := range data {
|
||||
parts = append(parts, fmt.Sprintf("\\x%02x", b))
|
||||
}
|
||||
hexString := strings.Join(parts, "")
|
||||
|
||||
_, err := u.keyboardHidFile.Write(data)
|
||||
cmd := exec.Command("sh", "-c", fmt.Sprintf("echo -n -e '%s' > /dev/hidg0", hexString))
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
u.logWithSupression("keyboardWriteHidFile", 100, u.log, err, "failed to write to hidg0")
|
||||
u.keyboardHidFile.Close()
|
||||
u.keyboardHidFile = nil
|
||||
return err
|
||||
}
|
||||
u.resetLogSuppressionCounter("keyboardWriteHidFile")
|
||||
|
||||
Reference in New Issue
Block a user