我正在尝试阅读一条信息,从射频识别读取器通过USB连接到Windows10pro机器与usb4java库。
我设法声明了接口,打开了管道,并为数据注册了侦听器,但是侦听器从未被触发。读取器充当键盘,它读取的任何内容都在活动的应用程序中结束,比如我打开的IDE,而不是在侦听器中。
UsbInterface usbInterface = activeInteface(device);
// there is only one endpoint in the list
UsbEndpoint 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 reader
int received = pipe.syncSubmit(buffer);在以下方面失败:
USB error1: Transfer error on interrupt endpoint: Input/Output error库支持一些特定于windows的属性:org.usb4java.javax.useUSBDK = true,但是当我尝试设置异常时,它会失败。
我有0的USB设备的经验,所以不知道如何从这里开始。代码有问题吗?我需要USBDK还是设备不支持libUSB驱动?遗憾的是,这不是我的设备,我无法访问该设备的文档,因此无法确定这是否是设备驱动程序问题。
发布于 2019-10-03 22:00:15
我知道这是2年前的事,但我也有过类似的问题,这是我第一次遇到的问题之一,这是我花了几个小时才找到的解决方案。
因此,基本上,windows不允许直接读写键盘设备,要做到这一点,就必须重写它的驱动程序(这就是为什么您要获得Input/Output error,并且它是用HID4java的FAQ编写的)。
第一种覆盖设备驱动程序的方法用libusb wiki描述。据我所知,每次您将设备连接到新的USB端口时,都需要安装一个新的驱动程序,这就是我建议您进一步阅读的原因。
第二种方式就是您已经提到的,它使用UsbDk ()。它通过分离内核驱动程序并在玩完之后重新连接它,使设备对您来说是可访问的。
为了使用它,您需要做两件事:
org.usb4java.javax.useUSBDK = true中所述,在您的javax.usb.properties文件中设置手册 (这也可以在低级别usb4java中手动完成,参见USBDK和setOption(上下文,int))。我猜想,缺少第二步是OP获得异常的原因。
希望这能帮到一个人,两天前知道这一切会帮我省去很多头痛。
发布于 2022-11-24 02:21:12
默认情况下,RFID读写器在键盘模拟模式下工作。您通常可以从制造商的网站获得一个工具来配置RFID阅读器。这将允许您将读取器更改为HID模式。这应该能解决你的问题。很抱歉反应得太晚,但我希望它能帮助到其他人。
https://stackoverflow.com/questions/57241363
复制相似问题