c / libusb-0.1:为什么usb_release_interface()失败了?

时间:2015-11-10 13:58:26

标签: c linux usb libusbdotnet

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

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

稍后我们打开它等。

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

感谢。

2 个答案:

答案 0 :(得分: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

这看起来似乎仍然有一个打开管道到与接口

相关联的端点之一

另请参阅 Why is my kernel module throwing "broken pipe" errors when I try to write to a device?

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

答案 1 :(得分: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。