亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java usb4java在windows 10平臺上讀取usb設備

java usb4java在windows 10平臺上讀取usb設備

www說 2023-04-26 16:19:03
我正在嘗試從通過 USB 連接到帶有usb4java庫的 Windows 10pro 機器的 RFID 閱讀器讀取消息。我已經設法聲明了接口、打開了管道并為數據注冊了偵聽器,但是從未觸發過偵聽器。閱讀器充當鍵盤,它讀取的任何內容最終都會出現在活動應用程序中,例如我打開的 IDE,而不是在listener中。UsbInterface usbInterface = activeInteface(device);// there is only one endpoint in the listUsbEndpoint endpoint = (UsbEndpoint)usbInterface.getUsbEndpoints().get(0);UsbPipe pipe = endpoint.getUsbPipe();try {     usbInterface.claim();     // true     System.out.println("claimed usb interface: " + usbInterface.isClaimed());     pipe.open();     // true     System.out.println("pipe open: " + pipe.isOpen());     pipe.addUsbPipeListener(new MessageListener());     // true     System.out.println("pipe active: " + pipe.isActive());     // keep main thread alive, async call should be done from another thread i guess     Thread.sleep(15000);    }   catch (Exception any) {System.out.println(any);} }和聽眾:private static class MessageListener implements UsbPipeListener {    @Override    public void errorEventOccurred(UsbPipeErrorEvent event) {        System.out.println(event.toString() + " , " +event.getUsbException());    }    @Override    public void dataEventOccurred(UsbPipeDataEvent event) {        // this code block never triggers        System.out.println("listener ...);        int actualLength = event.getActualLength();        System.out.println("length: " + actualLength);        byte[] data = event.getData();        System.out.println("data length " + data.length);    }}我還在上面的塊中嘗試了同步讀取而不是異步讀取,如下所示:byte[] buffer = new data[8];// this fails on its own, don't even need to read something with RFID readerint received = pipe.syncSubmit(buffer);失敗:USB error1: Transfer error on interrupt endpoint: Input/Output error有一些庫支持的特定于 Windows 的屬性:org.usb4java.javax.useUSBDK = true 但是當我嘗試將它設置為異常時,這失敗了。我對 USB 設備沒有任何經驗,所以不確定如何從這里開始。代碼有問題嗎,我需要 USBDK 還是設備不支持 libUSB 驅動程序?遺憾的是,這不是我的設備,我無法訪問該設備的文檔,因此無法確定它是否是設備驅動程序問題。
查看完整描述

2 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

我知道這是 2 歲,但我遇到過類似的問題,這是我在尋找解決方案時遇到的第一個問題,這花了我幾個小時。

所以,基本上,windows 不允許直接讀/寫鍵盤設備,要這樣做,你必須覆蓋它的驅動程序(這就是你得到的原因,它寫在 hid4java 的常見問題解答Input/Output error中)。

libusb wiki中描述了覆蓋設備驅動程序的第一種方法。據我所知,每次將設備連接到新的 USB 端口時都必須安裝新的驅動程序,這就是我建議您進一步閱讀的原因。

第二種方法是您已經提到的,即使用UsbDk(適用于 Windows 的 USB 驅動程序開發工具包)。它通過分離內核驅動程序并在您玩完之后將其重新連接回去,使您可以訪問該設備。

為了使用它,你需要做兩件事:

  1. 按照手冊org.usb4java.javax.useUSBDK = true中的說明設置javax.usb.properties文件

  2. 在您的系統上下載并安裝 UsbDk(最簡單的方法是下載具有 GUI 且完全自動化的 x64 或 x86 版本的 msi 安裝程序),遺憾的是手冊中沒有(對于某些人來說這可能是顯而易見的,但花了我很多時間我并不以意識到這一點為榮)。

我猜想缺少第二步是 OP 出現異常的原因。

希望這會對某人有所幫助,兩天前知道這一切會讓我頭疼很多。


查看完整回答
反對 回復 2023-04-26
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

默認情況下,RFID 閱讀器以鍵盤仿真模式運行。您通??梢詮闹圃焐痰木W站獲取工具來配置 RFID 閱讀器。這將允許您將閱讀器更改為 HID 模式。這應該可以解決您的問題。抱歉回復晚了,但我希望它能幫助其他人。



查看完整回答
反對 回復 2023-04-26
  • 2 回答
  • 0 關注
  • 989 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號