package usb // Device represents a USB device type Device struct { BusID string `json:"bus_id"` // e.g. "1-1.4" BusNum uint32 `json:"bus_num"` DevNum uint32 `json:"dev_num"` Speed uint32 `json:"speed"` VendorID uint16 `json:"vendor_id"` ProductID uint16 `json:"product_id"` BcdDevice uint16 `json:"bcd_device"` DeviceClass uint8 `json:"device_class"` DeviceSubClass uint8 `json:"device_sub_class"` DeviceProtocol uint8 `json:"device_protocol"` ConfigValue uint8 `json:"config_value"` NumConfigs uint8 `json:"num_configs"` Manufacturer string `json:"manufacturer"` Product string `json:"product"` Serial string `json:"serial"` SysPath string `json:"sys_path"` // sysfs path DevPath string `json:"dev_path"` // /dev/bus/usb path Interfaces []Interface `json:"interfaces"` } // Interface represents a USB interface type Interface struct { Number uint8 `json:"number"` Class uint8 `json:"class"` SubClass uint8 `json:"sub_class"` Protocol uint8 `json:"protocol"` Driver string `json:"driver"` } // DevID returns the USB/IP device ID (busnum << 16 | devnum) func (d *Device) DevID() uint32 { return (d.BusNum << 16) | d.DevNum } // IsHub returns true if this is a USB hub func (d *Device) IsHub() bool { return d.DeviceClass == 9 } // DisplayName returns a human-readable device name func (d *Device) DisplayName() string { if d.Product != "" { if d.Manufacturer != "" { return d.Manufacturer + " " + d.Product } return d.Product } return "Unknown USB Device" }