2014-02-25 7 views
15

Ich möchte in der Lage sein, Daten von einem USB-Schrittzähler zu lesen. Ich probiere das in Java und verwende die Bibliotheken LibUsb und Usb4Java. Ich kann nicht behaupten, die USB-Leitung oder etwas ähnliches.LibuSb Anspruch Schnittstelle Zugriff verweigert Java

Der Code Ich verwende:

final Context context = new Context(); 

    int result = LibUsb.init(context); 
    if (result < 0) 
    { 
     throw new LibUsbException("Unable to initialize libusb", result); 
    } 

    DeviceHandle handle = LibUsb.openDeviceWithVidPid(context, vid, pid); 
    if (handle != null) 
    { 
     Device d = LibUsb.getDevice(handle); 
     int res = LibUsb.claimInterface(handle, 0); 

Int res gibt '3', die 'LIBUSB_ERROR_ACCESS' ist

Das Gerät gefunden wird, aber nicht einklagbar. Das USB-Gerät hat nur 1 Schnittstelle.

Jede Hilfe wäre willkommen!

+0

Welches Betriebssystem? Hast du es als root-Benutzer versucht? –

+0

Ich versuche es auf Mac OSX 10.9.1 Und ich benutze den Admin-Account – bram

Antwort

2

LibUsb benötigt Rootberechtigung für den Zugriff auf USB-Geräte. In Mac mit Administrator-Account ist nicht genug, um auf USB-Geräte zuzugreifen. Sie müssen es als root ausführen (admin und root sind nicht gleich). Als ich es auf meinem Mac (OSX EL Capitan) benutzte, hatte ich das selbe Problem und ich dachte, dass das Problem mit den Geräten oder der Bibliothek nicht richtig funktioniert, aber später wurde mir klar, dass es das Problem mit der Erlaubnis ist. Raten Sie, dass Ihr Programmname myDevicesAccessor ist, dann führen Sie es so aus.

sudo ./myDevicesAccessor 

Wenn Sie es wie

./myDevicesAccessor 

versuchen wird es nicht funktionieren.

+0

Ich versuchte mit 'sudo', hat nicht funktioniert. – Petah

0

Es könnte mit einem Problem aufgrund falscher Berechtigungen zusammenhängen.
Here ist ein interessanter Kommentar von jemandem, der in einem ähnlichen Problem aufgetreten ist.
Sie schlagen vor, die Datei /etc/udev/rules.d/90-usbpermission.rules indem Sie die folgende Zeile zu bearbeiten:

SUBSYSTEM==“usb”,GROUP=“users”,MODE=“0666” 

der Hoffnung, es hilft, es hängt vor allem von dem Host-System.


Ein weiterer interessanter Thread ist this eins.
Jemand hat das Problem einfach gelöst, indem er nicht behauptet hat, Eigentümer der Schnittstelle zu sein.
Ich denke, das würde auch in Ihrem Fall funktionieren, zumindest als Workaround, bis eine endgültige Lösung gefunden wurde.