Compare commits

...

3 Commits

Author SHA1 Message Date
Cameron Fleming eed948dd5b
Merge b776ad0047 into 63b3ef0151 2025-02-12 16:42:24 +01:00
Andrew Nicholson 63b3ef0151
Enable "Boot Interface Subclass" for keyboard and mouse. (#113)
This is often required for the keyboard/mouse to be recognized in
BIOS/UEFI firmware.
2025-02-12 15:08:03 +01:00
Cameron Fleming b776ad0047 feat: restore EDID on reboot
This commit adds the config entry "EdidString" and saves the EDID string
when it's modified via the RPC.

The EDID is restored when the jetkvm_native control socket connects
(usually at boot)

Signed-off-by: Cameron Fleming <cameron@nevexo.space>
2025-01-06 16:11:59 +00:00
4 changed files with 25 additions and 2 deletions

View File

@ -22,6 +22,7 @@ type Config struct {
LocalAuthToken string `json:"local_auth_token"`
LocalAuthMode string `json:"localAuthMode"` //TODO: fix it with migration
WakeOnLanDevices []WakeOnLanDevice `json:"wake_on_lan_devices"`
EdidString string `json:"hdmi_edid_string"`
}
const configPath = "/userdata/kvm_config.json"

View File

@ -183,6 +183,12 @@ func rpcSetEDID(edid string) error {
if err != nil {
return err
}
// Save EDID to config, allowing it to be restored on reboot.
LoadConfig()
config.EdidString = edid
SaveConfig()
return nil
}

View File

@ -152,6 +152,9 @@ func handleCtrlClient(conn net.Conn) {
ctrlSocketConn = conn
// Restore HDMI EDID if applicable
go restoreHdmiEdid()
readBuf := make([]byte, 4096)
for {
n, err := conn.Read(readBuf)
@ -304,3 +307,16 @@ func ensureBinaryUpdated(destPath string) error {
return nil
}
// Restore the HDMI EDID value from the config.
// Called after successful connection to jetkvm_native.
func restoreHdmiEdid() {
LoadConfig()
if config.EdidString != "" {
logger.Infof("Restoring HDMI EDID to %v", config.EdidString)
_, err := CallCtrlAction("set_edid", map[string]interface{}{"edid": config.EdidString})
if err != nil {
logger.Errorf("Failed to restore HDMI EDID: %v", err)
}
}
}

4
usb.go
View File

@ -132,7 +132,7 @@ func writeGadgetConfig() error {
}
err = writeGadgetAttrs(hid0Path, [][]string{
{"protocol", "1"},
{"subclass", "0"},
{"subclass", "1"},
{"report_length", "8"},
})
if err != nil {
@ -152,7 +152,7 @@ func writeGadgetConfig() error {
}
err = writeGadgetAttrs(hid1Path, [][]string{
{"protocol", "2"},
{"subclass", "0"},
{"subclass", "1"},
{"report_length", "6"},
})
if err != nil {