0

我对这行代码有疑问。我能够成功打开设备并发送 .

发送:

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 错误代码?

4

1 回答 1

0

有时当我断开连接时它是-9

应始终为 -9,因为断开连接会清除内核中的 USB 句柄。

对于发送,我得到了 0 的响应,但在接收时,我得到了 -7。

那是常规的ERROR_TIMEOUT,这可能是也可能不是错误。

基本含义只是:USB设备在此timeout期间没有在端点上发送任何数据。

在 USB2UART 芯片的(示例)情况下,这ERROR_TIMEOUT意味着 UART RX 线上没有接收到任何字节。

有趣的事实:LibUsb.bulkTransfer() 可以从 USB 设备接收零字节,并且在这种情况下不会返回错误代码。USB 大容量端点实际上允许这样做(这与“根本没有数据”的情况不同)。

于 2018-05-15T21:03:50.677 回答