0

我正在开发一个使用 libusb 0.1 的旧程序。在某些情况下,我们希望重置与 USB 设备的连接。所以我们做这样的事情:

  ret = usb_release_interface(dev_handle, 0);
  ret = usb_close(dev_handle);

后来我们打开它等等。

在日志中,我看到 usb_release_interface 总是返回 -9。我找不到此功能的任何文档。有人知道这个值是什么意思吗?这个功能应该做什么?

谢谢。

4

2 回答 2

1

http://www.beyondlogic.org/usbnutshell/usb5.shtml了解 USB 设备的基本逻辑结构

建立与 USB 设备的连接后,如果声明了相应的接口描述符,则只能对特定端点进行读取或写入(USB 请求,...)

usb_release_interface 是 usb_claim_interface 的对应物

如果 usb_release_interface 返回错误,则可能是由于附加到接口的端点中未完成或挂起的操作

也许您应该尝试完成端点中的所有操作,然后再次尝试 usb_release_interface ?

afaik 你必须准确地浏览整个 USB 树结构:

首先获取设备描述符,然后是配置描述符,然后是接口描述符,然后是端点,然后是返回方式

以下是 libusb-1.0 的 libusb 错误代码:

enum    libusb_error {
  LIBUSB_SUCCESS = 0, LIBUSB_ERROR_IO = -1, LIBUSB_ERROR_INVALID_PARAM   
  =-2, LIBUSB_ERROR_ACCESS = -3,
  LIBUSB_ERROR_NO_DEVICE = -4, LIBUSB_ERROR_NOT_FOUND = -5, 
  LIBUSB_ERROR_BUSY = -6, LIBUSB_ERROR_TIMEOUT = -7,
  LIBUSB_ERROR_OVERFLOW = -8, **LIBUSB_ERROR_PIPE = -9**, 
  LIBUSB_ERROR_INTERRUPTED = -10, LIBUSB_ERROR_NO_MEM = -11,
  LIBUSB_ERROR_NOT_SUPPORTED = -12, LIBUSB_ERROR_OTHER = -99
}

http://libusb.sourceforge.net/api-1.0/group__misc.html

这看起来确实有一个通往与接口关联的端点之一的开放管道

也可以看看当我尝试写入设备时,为什么我的内核模块会抛出“broken pipe”错误?

(http://howtounix.info/man/FreeBSD/man3/usb_release_interface.3

于 2015-11-10T14:34:00.323 回答
0

根据这个网页:http ://www.freebsd.org/cgi/man.cgi?query=libusb&sektion=3

有几个可用的功能,包括:

 const char * libusb_strerror(int code) 

获取 code 参数给出的错误的 ASCII 表示。此函数不返回 NULL。

 const char * libusb_error_name(int code) 

获取 code 参数给出的错误枚举的 ASCII 表示。此函数不返回 NULL。

于 2015-11-12T15:27:49.077 回答