【问题标题】:LIBUSB Asynchronous Bulk Transfer Timeout On Linux UbuntuLinux Ubuntu 上的 LIBUSB 异步批量传输超时
【发布时间】:2017-09-12 16:07:53
【问题描述】:

我在 Ubuntu 上使用 libusb,并尝试通过异步批量传输发送 4 个字节的数据。我能够成功执行以下步骤: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:调试 [handle_events] timerfd 触发
[10.033375] [000026fe] libusb:调试 [libusb_cancel_transfer] 传输 0x55555576de80
[10.036908] [000026fe] libusb:调试 [disarm_timerfd]
[10.036919] [000026fe] libusb:调试 [handle_events] poll() 3 fds,超时时间为 0ms
[10.036921] [000026fe] libusb:调试 [handle_events] poll() 返回 1
[10.036924] [000026fe] libusb:调试 [reap_for_handle] urb 类型=3 状态=-2 转移=0
[10.036926] [000026fe] libusb:调试 [handle_bulk_completion] 处理批量 urb 1/1 的完成状态 -2
[10.036927] [000026fe] libusb:调试 [handle_bulk_completion] 异常收割:urb 状态 -2
[10.036928] [000026fe] libusb:调试 [handle_bulk_completion] 异常收割:最后处理的 URB,报告
[10.036930] [000026fe] libusb:调试 [usbi_handle_transfer_cancellation] 检测到超时取消
[10.036931] [000026fe] libusb:调试 [disarm_timerfd]
[10.036932] [000026fe] libusb:调试 [usbi_handle_transfer_completion] 传输 0x55555576de80 有回调 0x7ffff7bd4c78

问题:

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

【问题讨论】:

    标签: linux ubuntu asynchronous libusb libusb-1.0


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      相关资源
      最近更新 更多