LIBUSB 异步批量传输超时 Linux Ubuntu

LIBUSB Asynchronous Bulk Transfer Timeout On Linux Ubuntu

我在 Ubuntu 上使用 libusb 并试图通过异步批量传输发送 4 个字节的数据。我能够成功执行以下 steps:1。

  1. 通过libusb_alloc_transfer分配转账。
  2. 通过libusb_fill_bulk_transfer填写批量转账。
  3. 通过libusb_detach_kernel_driver分离内核驱动程序。
  4. 通过libusb_claim_interface声明接口。
  5. 通过libusb_submit_transfer提交转账。
  6. 最后,通过libusb_attach_kernel_driver重新附加内核驱动程序。

然后代码将运行直到传输超时并调用回调函数。启用 libusb 调试会提供以下消息:

[10.033374] [000026fe] libusb: debug [handle_events] timerfd triggered
[10.033375] [000026fe] libusb: debug [libusb_cancel_transfer] transfer 0x55555576de80
[10.036908] [000026fe] libusb: debug [disarm_timerfd]
[10.036919] [000026fe] libusb: debug [handle_events] poll() 3 fds with timeout in 0ms
[10.036921] [000026fe] libusb: debug [handle_events] poll() returned 1
[10.036924] [000026fe] libusb: debug [reap_for_handle] urb type=3 status=-2 transferred=0
[10.036926] [000026fe] libusb: debug [handle_bulk_completion] handling completion status -2 of bulk urb 1/1
[10.036927] [000026fe] libusb: debug [handle_bulk_completion] abnormal reap: urb status -2
[10.036928] [000026fe] libusb: debug [handle_bulk_completion] abnormal reap: last URB handled, reporting
[10.036930] [000026fe] libusb: debug [usbi_handle_transfer_cancellation] detected timeout cancellation
[10.036931] [000026fe] libusb: debug [disarm_timerfd]
[10.036932] [000026fe] libusb: debug [usbi_handle_transfer_completion] transfer 0x55555576de80 has callback 0x7ffff7bd4c78

问题:

  1. URB 状态 -2 是什么意思?
  2. 根据您的知识或经验,什么可能会阻止转移的实际发生?

在 libusb 邮件列表上的一些人的帮助下(注册 https://sourceforge.net/projects/libusb/lists/libusb-devel)我能够确定问题所在。

根据他们提出的问题,我被迫重新检查我的一些基本假设,尤其是我用来发送数据的端点地址。我试图从 IN 端点发送数据。特别是,我正在检查端点地址的位 0 而不是位 7。