Ошибка LibUsb: конфликт адресов устройства с корневым концентратором - PullRequest
0 голосов
/ 11 мая 2018

У меня проблемы с этой строкой кода. Мне удалось успешно открыть устройство и отправить.

Отправка:

retCode = LibUsb.bulkTransfer(devHandle, endpointSend, buf, iBuf, timeout);

Принимающий:

retCode = LibUsb.bulkTransfer(devHandle, endpointReceive, messageBuf, iBuf, timeout);   
logger.debug("Receiving Message Status: "+retCode);

Выход:

Для отправки я получил ответ 0, но при получении я получил -7.

Receiving Message Status: -7

libusb: error [init_device] program assertion failed: device address collision with root hub

Другие журналы

receiveMessage messageBuf: java.nio.DirectByteBuffer[pos=0 lim=1000 cap=1000]
receiveMessage iBuf: java.nio.HeapIntBuffer[pos=1 lim=1 cap=1]

Поиск ссылок:

http://usb4java.org/apidocs/constant-values.html#org.usb4java.LibUsb.ERROR_TIMEOUT

public static final int ERROR_PIPE  -9
public static final int ERROR_TIMEOUT   -7

иногда это -9, когда я отключаю и подключаю устройство, но обычно -7. Поскольку я уже некоторое время играю с таймаутом, я начинаю подозревать, что речь идет о трубе. Как мне разрешить код ошибки -9?

1 Ответ

0 голосов
/ 16 мая 2018

иногда это -9, когда я отключаюсь

Всегда должно быть -9, так как отключение очищает дескриптор USB внутри ядра.

Для отправки я получил ответ 0, но при получении я получил -7.

Это обычный ERROR_TIMEOUT, который может быть или не быть ошибкой вообще.

Основное значение таково: USB-устройство не отправляло никаких данных на конечную точку в течение периода timeout.

В (примере) чипа USB2UART ERROR_TIMEOUT будет означать, что в линии UART RX не было получено ни одного байта.

Интересный факт: LibUsb.bulkTransfer () может получать ноль байтов от устройства USB, и не возвращает код ошибки в этом случае. Массовые конечные точки USB фактически позволяют это (и это отличается от случая «вообще никаких данных»).

...