2016-08-09 45 views
-1

我正在試圖找到正確的方式來使用與java的USB設備。大多數來自StackOverflow的帖子都建議使用usb4java,因爲最新的活動似乎在2014年初,因此我不確定它是否仍然活躍。USB4Java是libusb 1.0還是0.1的包裝?是否推薦用於新的Java開發?

無論如何,在頁面上挖一點點,它會說「它基於本地libusb 1.0庫」。然後嘗試安裝設備驅動程序,我推薦使用Zadig(https://github.com/libusb/libusb/wiki/Windows#How_to_use_libusb_on_Windows)。

我通過使用「libusb-win32」驅動程序讓usb4java工作。但是當你進入「libusb-win32」網站時,它提到「libusb-win32是USB庫libusb-0.1的一個端口」,在這裏甚至更多地提到http://libusb.org/wiki/APIs#libusb-0.1legacyAPI中提到「開發狀態:libusb-0.1被棄用並將沒有進一步的變化或發佈「

這是非常混亂,所以首先我想知道如果USB4Java使用libusb 1.0或0.1。而且,它也被推薦用於任何新的開發或者要走的路,在使用JAVA的USB設備上似乎沒有太多的支持。

UPDATE:

感謝dryman。很好的解釋。 usb4java與libusb-win32結合的問題是延遲。我的交易每10ms發生一次,我承擔不起數據丟失的費用,這就是爲什麼我必須開始緩衝,而且我有15個緩衝區,所以我的最大延遲時間爲150ms。雖然長時間使用libusb-win32評估usb4java ),我不時看到我有超過1秒的延遲。我也嘗試了WinUSB但由於某種原因,我得到:

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006b6051c2, pid=6284, tid=6836 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_45-b14) (build 1.8.0_45-b14) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode windows-amd64 compressed oops) 
# Problematic frame: 
# C [libusb-1.0.dll+0x51c2] 

既然你提到,它可能是更可靠的,我會給它一個嘗試,我會嘗試修復它。

BTW:當我嘗試在下面的代碼中提交傳輸(LibUsb.submitTransfer(transfer);)時發生訪問衝突。

public static void write(DeviceHandle handle, byte[] data, 
     TransferCallback callback) 
    { 
     ByteBuffer buffer = BufferUtils.allocateByteBuffer(data.length); 
     buffer.put(data); 
     Transfer transfer = LibUsb.allocTransfer(); 
     LibUsb.fillBulkTransfer(transfer, handle, OUT_ENDPOINT, buffer, 
      callback, null, TIMEOUT); 
//  System.out.println("Sending " + data.length + " bytes to device"); 
     int result = LibUsb.submitTransfer(transfer); 
     if (result != LibUsb.SUCCESS) 
     { 
      throw new LibUsbException("Unable to submit transfer", result); 
     } 
    } 
+0

你作爲傳輸模式使用什麼?對於可靠的帶寬和響應時間,您應該使用等時傳輸。當然,該設備必須支持。 – dryman

+0

關於訪問違規:我不知道那裏發生了什麼。你可能會發布觸發這個錯誤的示例代碼? – dryman

+0

我正在使用等時批量傳輸。並且訪問衝突發生在我剛剛在原始問題 –

回答

1

首先一個或兩個不同的libusbs。事情是有不同的實現和驅動程序的公平份額。 libusb原始版本被分支到libusbx。 libusb原始失敗,libusbx接管libusb作爲名稱。所以有更多的困惑。 Windows有3種不同的驅動程序,它們使用libusb1(按照時間順序):libusb0(libusb-win32),libusbK和WinUSB。

現在關於usb4java。據我所知他們使用libusb1。 libusb1仍然能夠通過libusbK與libusb0驅動程序一起工作,但是我建議使用WinUSB,因爲根據我個人的經驗,它運行得更好,libusb的人也推薦它自己。 libusb0支持似乎只是某種禮貌。

不管你是否嘗試過WinUSB或者它沒有工作,你都不會寫任何東西,所以我建議你嘗試一下,或者問一個關於WinUSB問題的問題。

+0

我剛剛在libusbx sourceforgepage中發現了這個:「libusbx is OBSOLETE - use http://libusb.info」並指向libusb庫 –

+0

是的,這正是我寫的。 libusbx分叉libusb,libusb失敗,之後libusbx將其自己更名爲libusb。注意libusb.org和libusb.info之間的區別。 – dryman

相關問題