2016-08-09 25 views
-1

Я пытаюсь найти правильный способ использования USB-устройства с java. Большинство сообщений из 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).

У меня есть 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.

UPDATE:

Благодаря dryman. Отличное объяснение. Моя проблема с usb4java в сочетании с libusb-win32 - это латентность. Мои транзакции происходят каждые 10 мс, и я не могу позволить себе потерять данные, поэтому мне пришлось начать буферизацию, и у меня есть 15 буферов, поэтому максимальная задержка будет равна 150 мс. Хотя оценка usb4java с libusb-win32 длительное время (часы), Я вижу, что время от времени у меня есть задержки более 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); 
     } 
    } 
+0

Что вы используете в качестве режима передачи? Для надежной пропускной способности и времени отклика вы должны использовать изохронные передачи. Конечно, устройство должно это поддерживать. – dryman

+0

И о нарушении доступа: я не знаю, что там происходит. Можете ли вы опубликовать пример кода, который вызывает эту ошибку? – dryman

+0

Я использую изохронные массовые переводы. И Нарушение доступа происходит в коде, который я только что добавил в исходном вопросе –

ответ

1

Прежде всего, что-то одно или другое к различным libusbs. Дело в том, что существует справедливая доля различных реализаций и драйверов. Оригинал libusb был раздвоен libusbx. libusb original failed, а libusbx занял имя libusb. Поэтому есть еще больше путаницы. Существуют три разных драйвера для Windows, работающих с libusb1 (в хронологическом порядке): libusb0 (libusb-win32), libusbK и WinUSB.

Теперь про usb4java. Насколько я знаю, они используют libusb1. libusb1 все еще способен работать с драйвером libusb0 через libusbK, но я рекомендую использовать WinUSB вместо этого, потому что в моем личном опыте он работает лучше, и ребята из libusb тоже рекомендуют его. Поддержка libusb0 - это какая-то любезность.

Вы ничего не пишете, пытаетесь ли вы использовать WinUSB или как это не работает, поэтому я рекомендую вам попробовать или задать вопрос о своих проблемах с WinUSB.

+0

Я только что нашел это в исходной странице libusbx: «libusbx is OBSOLETE - используйте http://libusb.info» и указывает на библиотеку libusb –

+0

Да, это именно то, что я написал. libusbx forked libusb, libusb не удалось, и после этого libusbx переименовал себя в libusb. Обратите внимание на разницу между libusb.org и libusb.info. – dryman