Compare commits

..

No commits in common. "58c5875aa74820bd51dd31b423d3d72617f30645" and "382c07b87afec8aec02630ebc0623f51c002e69e" have entirely different histories.

3 changed files with 44 additions and 45 deletions

View File

@ -12,11 +12,11 @@ type WakeOnLanDevice struct {
} }
type UsbConfig struct { type UsbConfig struct {
VendorId string `json:"vendor_id"` UsbVendorId string `json:"usb_vendor_id"`
ProductId string `json:"product_id"` UsbProductId string `json:"usb_product_id"`
SerialNumber string `json:"serial_number"` UsbSerialNumber string `json:"usb_serial_number"`
Manufacturer string `json:"manufacturer"` UsbManufacturer string `json:"usb_manufacturer"`
Product string `json:"product"` UsbProduct string `json:"usb_product"`
} }
type Config struct { type Config struct {
@ -39,11 +39,11 @@ var defaultConfig = &Config{
CloudURL: "https://api.jetkvm.com", CloudURL: "https://api.jetkvm.com",
AutoUpdateEnabled: true, // Set a default value AutoUpdateEnabled: true, // Set a default value
UsbConfig: UsbConfig{ UsbConfig: UsbConfig{
VendorId: "0x1d6b", //The Linux Foundation UsbVendorId: "0x1d6b", //The Linux Foundation
ProductId: "0x0104", //Multifunction Composite Gadget¬ UsbProductId: "0x0104", //Multifunction Composite Gadget¬
SerialNumber: "", UsbSerialNumber: "",
Manufacturer: "JetKVM", UsbManufacturer: "JetKVM",
Product: "JetKVM USB Emulation Device", UsbProduct: "JetKVM USB Emulation Device",
}, },
} }

View File

@ -13,7 +13,7 @@ export interface UsbConfigState {
product_id: string; product_id: string;
serial_number: string; serial_number: string;
manufacturer: string; manufacturer: string;
product: string; product_name: string;
} }
export default function USBConfigDialog({ export default function USBConfigDialog({
@ -79,11 +79,11 @@ function UpdateUsbConfigModal({
error: string | null; error: string | null;
}) { }) {
const [usbConfig, setUsbConfig] = useState({ const [usbConfig, setUsbConfig] = useState({
vendor_id: '', usb_vendor_id: '',
product_id: '', usb_product_id: '',
serial_number: '', usb_serial_number: '',
manufacturer: '', usb_manufacturer: '',
product: '', usb_product: '',
}) })
const [usbConfigState, setUsbConfigState] = useState<UsbConfigState>(); const [usbConfigState, setUsbConfigState] = useState<UsbConfigState>();
@ -91,10 +91,11 @@ function UpdateUsbConfigModal({
const syncUsbConfig = useCallback(() => { const syncUsbConfig = useCallback(() => {
send("getUsbConfig", {}, resp => { send("getUsbConfig", {}, resp => {
if ("error" in resp) { if ("result" in resp) {
console.error("Failed to load USB Config:", resp.error); console.info("Successfully synced USB Config: ", resp.result);
} else {
setUsbConfigState(resp.result as UsbConfigState); setUsbConfigState(resp.result as UsbConfigState);
} else {
console.error("Failed to load USB Config:", resp.error);
} }
}); });
}, [send, setUsbConfigState]); }, [send, setUsbConfigState]);
@ -104,24 +105,24 @@ function UpdateUsbConfigModal({
syncUsbConfig(); syncUsbConfig();
}, [syncUsbConfig]); }, [syncUsbConfig]);
const handleUsbVendorIdChange = (value: string) => { const handleUsbVendorIdChange = (vendorId: string) => {
setUsbConfig({... usbConfig, vendor_id: value}) setUsbConfig({... usbConfig, usb_vendor_id: vendorId})
}; };
const handleUsbProductIdChange = (value: string) => { const handleUsbProductIdChange = (productId: string) => {
setUsbConfig({... usbConfig, product_id: value}) setUsbConfig({... usbConfig, usb_product_id: productId})
}; };
const handleUsbSerialChange = (value: string) => { const handleUsbSerialChange = (serialNumber: string) => {
setUsbConfig({... usbConfig, serial_number: value}) setUsbConfig({... usbConfig, usb_serial_number: serialNumber})
}; };
const handleUsbManufacturer = (value: string) => { const handleUsbManufacturer = (manufacturer: string) => {
setUsbConfig({... usbConfig, manufacturer: value}) setUsbConfig({... usbConfig, usb_manufacturer: manufacturer})
}; };
const handleUsbProduct = (value: string) => { const handleUsbProduct = (name: string) => {
setUsbConfig({... usbConfig, product: value}) setUsbConfig({... usbConfig, usb_product: name})
}; };
return ( return (
@ -142,37 +143,35 @@ function UpdateUsbConfigModal({
required required
label="Vendor ID" label="Vendor ID"
placeholder="Enter Vendor ID" placeholder="Enter Vendor ID"
pattern="^0[xX][\da-fA-F]{4}$" value={usbConfigState?.vendor_id}
defaultValue={usbConfigState?.vendor_id}
onChange={e => handleUsbVendorIdChange(e.target.value)} onChange={e => handleUsbVendorIdChange(e.target.value)}
/> />
<InputFieldWithLabel <InputFieldWithLabel
required required
label="Product ID" label="Product ID"
placeholder="Enter Product ID" placeholder="Enter Product ID"
pattern="^0[xX][\da-fA-F]{4}$" value={usbConfigState?.product_id}
defaultValue={usbConfigState?.product_id}
onChange={e => handleUsbProductIdChange(e.target.value)} onChange={e => handleUsbProductIdChange(e.target.value)}
/> />
<InputFieldWithLabel <InputFieldWithLabel
required required
label="Serial Number" label="Serial Number"
placeholder="Enter Serial Number" placeholder="Enter Serial Number"
defaultValue={usbConfigState?.serial_number} value={usbConfigState?.serial_number}
onChange={e => handleUsbSerialChange(e.target.value)} onChange={e => handleUsbSerialChange(e.target.value)}
/> />
<InputFieldWithLabel <InputFieldWithLabel
required required
label="Manufacturer" label="Manufacturer"
placeholder="Enter Manufacturer" placeholder="Enter Manufacturer"
defaultValue={usbConfigState?.manufacturer} value={usbConfigState?.manufacturer}
onChange={e => handleUsbManufacturer(e.target.value)} onChange={e => handleUsbManufacturer(e.target.value)}
/> />
<InputFieldWithLabel <InputFieldWithLabel
required required
label="Product Name" label="Product Name"
placeholder="Enter Product Name" placeholder="Enter Product Name"
defaultValue={usbConfigState?.product} value={usbConfigState?.product_name}
onChange={e => handleUsbProduct(e.target.value)} onChange={e => handleUsbProduct(e.target.value)}
/> />
<div className="flex gap-x-2"> <div className="flex gap-x-2">

18
usb.go
View File

@ -61,8 +61,8 @@ func init() {
func UpdateGadgetConfig() error { func UpdateGadgetConfig() error {
LoadConfig() LoadConfig()
gadgetAttrs := [][]string{ gadgetAttrs := [][]string{
{"idVendor", config.UsbConfig.VendorId}, {"idVendor", config.UsbConfig.UsbVendorId},
{"idProduct", config.UsbConfig.ProductId}, {"idProduct", config.UsbConfig.UsbProductId},
} }
err := writeGadgetAttrs(kvmGadgetPath, gadgetAttrs) err := writeGadgetAttrs(kvmGadgetPath, gadgetAttrs)
if err != nil { if err != nil {
@ -72,9 +72,9 @@ func UpdateGadgetConfig() error {
log.Printf("Successfully updated usb gadget attributes: %v", gadgetAttrs) log.Printf("Successfully updated usb gadget attributes: %v", gadgetAttrs)
strAttrs := [][]string{ strAttrs := [][]string{
{"serialnumber", config.UsbConfig.SerialNumber}, {"serialnumber", config.UsbConfig.UsbSerialNumber},
{"manufacturer", config.UsbConfig.Manufacturer}, {"manufacturer", config.UsbConfig.UsbManufacturer},
{"product", config.UsbConfig.Product}, {"product", config.UsbConfig.UsbProduct},
} }
gadgetStringsPath := filepath.Join(kvmGadgetPath, "strings", "0x409") gadgetStringsPath := filepath.Join(kvmGadgetPath, "strings", "0x409")
err = os.MkdirAll(gadgetStringsPath, 0755) err = os.MkdirAll(gadgetStringsPath, 0755)
@ -120,8 +120,8 @@ func writeGadgetConfig() error {
LoadConfig() LoadConfig()
err = writeGadgetAttrs(kvmGadgetPath, [][]string{ err = writeGadgetAttrs(kvmGadgetPath, [][]string{
{"bcdUSB", "0x0200"}, //USB 2.0 {"bcdUSB", "0x0200"}, //USB 2.0
{"idVendor", config.UsbConfig.VendorId}, {"idVendor", config.UsbConfig.UsbVendorId},
{"idProduct", config.UsbConfig.ProductId}, {"idProduct", config.UsbConfig.UsbProductId},
{"bcdDevice", "0100"}, {"bcdDevice", "0100"},
}) })
if err != nil { if err != nil {
@ -136,8 +136,8 @@ func writeGadgetConfig() error {
err = writeGadgetAttrs(gadgetStringsPath, [][]string{ err = writeGadgetAttrs(gadgetStringsPath, [][]string{
{"serialnumber", GetDeviceID()}, {"serialnumber", GetDeviceID()},
{"manufacturer", config.UsbConfig.Manufacturer}, {"manufacturer", config.UsbConfig.UsbManufacturer},
{"product", config.UsbConfig.Product}, {"product", config.UsbConfig.UsbProduct},
}) })
if err != nil { if err != nil {
return err return err