Я пытаюсь прочитать сообщение от считывателя RFID, подключенного через USB к компьютеру с Windows 10pro, с 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
, но это не удается, когда я пытаюсь установить его с исключением.
У меня нет опыта работы с USB-устройствами, поэтому я не знаю, что делать дальше. Что-то не так с кодом, нужен ли мне USBDK или устройство не поддерживает драйвер libUSB? К сожалению, это не мое устройство, и у меня нет доступа к документации устройства, поэтому я не могу быть уверен, что это проблема с драйвером устройства.