diff --git a/README.md b/README.md index e3edbc0..4115d99 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,17 @@ choco install make **Option C: Ohne Make** - Go-Befehle direkt ausfuehren (siehe unten) +### Plattform-Unterstuetzung + +| Funktion | Linux | Windows | +|----------|-------|---------| +| Share-Modus (USB-Geraete freigeben) | Ja | Nein (kein usbdevfs) | +| Use-Modus (USB-Geraete empfangen) | Ja | Nein (kein VHCI-Treiber) | +| Relay-Server | Ja | Ja | +| Web-UI / Config | Ja | Ja | + +**Windows-Einschraenkung:** Der Windows-Client kann zur Zeit nur als Relay-Server, fuer die Web-UI und zur Konfiguration genutzt werden. Share- und Use-Modus erfordern Linux-spezifische Kernel-Schnittstellen (usbdevfs bzw. vhci-hcd). + ### Voraussetzungen (Laufzeit) **Linux (Share-Modus):** diff --git a/bin/usb-client b/bin/usb-client index ceccde1..890048c 100755 Binary files a/bin/usb-client and b/bin/usb-client differ diff --git a/bin/usb-client.exe b/bin/usb-client.exe index a6efd2a..43521d5 100755 Binary files a/bin/usb-client.exe and b/bin/usb-client.exe differ diff --git a/bin/usb-relay b/bin/usb-relay index f736f16..a3eebba 100755 Binary files a/bin/usb-relay and b/bin/usb-relay differ diff --git a/internal/client/use.go b/internal/client/use.go index 112126f..9a73fb2 100644 --- a/internal/client/use.go +++ b/internal/client/use.go @@ -91,8 +91,8 @@ func (um *UseManager) GetAttachedDevices() []*AttachedDevice { // AttachDevice requests and attaches a remote USB device func (um *UseManager) AttachDevice(clientID, busID string) error { // Check if VHCI is available - if !usbip.IsVHCIAvailable() { - return fmt.Errorf("vhci-hcd kernel module not loaded (run: sudo modprobe vhci-hcd)") + if err := usbip.VHCIUnavailableError(); err != nil { + return err } key := busID + "@" + clientID diff --git a/internal/usbip/vhci.go b/internal/usbip/vhci.go index dcf80b9..5f801e4 100644 --- a/internal/usbip/vhci.go +++ b/internal/usbip/vhci.go @@ -166,3 +166,12 @@ func IsVHCIAvailable() bool { _, err := os.Stat(vhciBasePath) return err == nil } + +// VHCIUnavailableError returns an error describing why VHCI is not available, +// or nil if VHCI is ready to use. +func VHCIUnavailableError() error { + if IsVHCIAvailable() { + return nil + } + return fmt.Errorf("vhci-hcd Kernel-Modul nicht geladen (ausfuehren: sudo modprobe vhci-hcd)") +} diff --git a/internal/usbip/vhci_windows.go b/internal/usbip/vhci_windows.go index dcf03fd..bb2d77a 100644 --- a/internal/usbip/vhci_windows.go +++ b/internal/usbip/vhci_windows.go @@ -8,6 +8,11 @@ func IsVHCIAvailable() bool { return false } +// VHCIUnavailableError returns an error describing why VHCI is not available. +func VHCIUnavailableError() error { + return fmt.Errorf("VHCI wird unter Windows nicht unterstuetzt. Der Use-Modus (USB-Geraete empfangen) ist nur unter Linux verfuegbar") +} + func FindFreePort(speed uint32) (int, error) { return -1, fmt.Errorf("VHCI not supported on Windows") }