2014-02-25 34 views
15

我希望能夠從USB計步器讀取數據。我在Java中嘗試這個,我使用LibUsb和Usb4Java庫。我似乎無法聲稱USB管道或類似的東西。LibUsb聲明接口訪問被拒絕Java

我正在使用的代碼:

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); 

詮釋RES返回 '-3',這是 'LIBUSB_ERROR_ACCESS'

的裝置被發現,但不要求保護的。 USB設備只有1個接口。

任何幫助,將不勝感激!

+0

哪個操作系統?你有沒有嘗試過'root'用戶? –

+0

我試圖在Mac OSX 10.9.1 而我正在使用管理員帳戶 – bram

回答

2

LibUsb需要root權限才能訪問usb設備。在擁有管理員帳戶的Mac中,不足以訪問USB設備。你必須以root身份運行它(admin和root不一樣)。當我在我的Mac(OSX EL Capitan)上使用它時,我遇到了同樣的問題,我認爲它與設備或庫的問題無法正常工作,但後來我意識到它的許可問題。猜你的程序名是myDevicesAccessor,然後像這樣運行它。

sudo ./myDevicesAccessor 

如果你試圖像

./myDevicesAccessor 

它不會工作。

+0

我嘗試使用'sudo',沒有工作。 – Petah

0

這可能與由於權限錯誤導致的問題有關。
Here是一個有趣的評論,從一個人發生在類似的問題。
他們建議通過添加以下行來編輯文件/etc/udev/rules.d/90-usbpermission.rules

SUBSYSTEM==「usb」,GROUP=「users」,MODE=「0666」 

希望能有幫助,這主要取決於主機系統上。


另一個有趣的線程是this one。
有人通過不聲稱接口的所有權簡單地解決了這個問題。
我想這也適用於你的情況,至少作爲一種解決方法,直到找到一個明確的解決方案。