Я пытаюсь найти правильный способ использования USB-устройства с java. Большинство сообщений из StackOverflow рекомендуют использовать usb4java, для которого последняя активность, по-видимому, была в начале 2014 года, поэтому я не уверен, активен ли он до сих пор.
В любом случае, немного покопавшись в этом, на странице написано: «Он основан на родной библиотеке libusb 1.0». Затем, пытаясь установить драйвер устройства, я использовал Zadig в соответствии с рекомендациями (https://github.com/libusb/libusb/wiki/Windows#How_to_use_libusb_on_Windows).
Я заставил usb4java работать с помощью драйвера «libusb-win32». Но когда вы переходите на веб-сайт «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. А также рекомендуется ли это для какой-либо новой разработки или того, что было бы возможным, похоже, не слишком много поддержки USB-устройств при использовании JAVA.
ОБНОВЛЕНИЕ:
Спасибо сухому. Отличное объяснение. Моя проблема с usb4java в сочетании с libusb-win32 - задержка. Мои транзакции происходят каждые 10 мс, и я не могу позволить себе потерю данных, поэтому мне пришлось начать буферизацию, а у меня 15 буферов, поэтому моя максимальная задержка составит 150 мс. ), я вижу, что время от времени у меня есть задержки более 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]
Теперь, когда вы упомянули, что это может быть более надежным, я попробую и постараюсь исправить это.
Кстати: нарушение прав доступа происходит, когда я пытаюсь отправить перевод (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);
}
}