c/libusb-0.1 : why is usb_release_interface() failing?

标签 c linux usb libusbdotnet

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

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

然后我们打开它等等。

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

谢谢。

最佳答案

参见 http://www.beyondlogic.org/usbnutshell/usb5.shtml一个usb设备的基本逻辑结构

当建立与 USB 设备的连接时,只有在相应的接口(interface)描述符 被声明时,才能读取或写入(USB 请求,...)到特定的端点

usb_release_interface 对应于 usb_claim_interface

如果 usb_release_interface 返回一个错误,它可能是由于连接到接口(interface)的端点中的操作未完成或挂起

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

afaik 你必须准确地遍历整个 usb 树结构:

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

这里是 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

这看起来确实还有一条通往与接口(interface)关联的端点之一的开放管道

另见 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 )

关于c/libusb-0.1 : why is usb_release_interface() failing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631699/

相关文章:

创建我的第一个 Unix 服务器/客户端,但出现 "shmget: Invalid argument"错误甚至更多。 [C]

linux - Linux 中的命令替换 - 在 bashrc 中设置变量(用户名和密码)

iOS USB HID编程

c# - 如何在可执行文件中记录序列号?

Linux:在连接的 USB 串行加密狗上启动守护进程

c - BCM2708 (RPi) Rasbpian FIQ 未触发

c++ - 将 C 识别的指针类型定义为内部 C++ 类

c - 使用 control+D (EOF) 但返回意外字符 D

c++ - 套接字服务器针对某些请求返回 tcp 错误 [RST, ACK]

java - 在禁用 Linux 核心转储时进行 Java 堆转储