Ошибка LibUsb: конфликт адресов устройства с корневым концентратором
У меня проблемы с этой строкой кода. Мне удалось успешно открыть устройство и отправить.
Посылка:
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
public static final int ERROR_PIPE -9
public static final int ERROR_TIMEOUT -7
иногда это - -9, когда я отключаю и подключаю устройство, но обычно -7. Поскольку я уже некоторое время играю с таймаутом, я начинаю подозревать, что речь идет о трубе. Как решить код ошибки -9?
1 ответ
иногда это -9, когда я отключаюсь
Всегда должно быть -9, так как отключение очищает дескриптор USB внутри ядра.
Для отправки я получил ответ 0, но при получении я получил -7.
Это обычный ERROR_TIMEOUT
, что может быть или не быть ошибкой вообще.
Основное значение таково: USB-устройство не отправляло никаких данных на конечную точку во время timeout
период.
В (примере) чипа USB2UART ERROR_TIMEOUT
будет означать, что на линии UART RX не было получено ни одного байта.
Интересный факт: LibUsb.bulkTransfer() может получить нулевые байты от устройства USB и не будет возвращать код ошибки в этом случае. Конечные точки USB на самом деле позволяют это (и это отличается от случая "вообще нет данных").