Linux Ubuntu上的LIBUSB异步批量传输超时

时间:2017-09-12 16:07:54

标签: linux ubuntu asynchronous libusb libusb-1.0

我在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重新附加内核驱动程序。
  7. 然后代码将运行,直到传输超时并调用回调函数。启用libusb debug会提供以下消息:

      

    [10.033374] [000026fe] libusb:debug [handle_events] timerfd被触发[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,超时时间为0ms
      [10.036921] [000026fe] libusb:debug [handle_events] poll()返回1
      [10.036924] [000026fe] libusb:debug [reap_for_handle] urb type = 3 status = -2 transferred = 0
      [10.036926] [000026fe] libusb:debug [handle_bulk_completion]处理批量urb的完成状态-2 1/1
      [10.036927] [000026fe] libusb:debug [handle_bulk_completion]异常收获:urb status -2
      [10.036928] [000026fe] libusb:debug [handle_bulk_completion]异常收获:上次处理URB,报告
      [10.036930] [000026fe] libusb:debug [usbi_handle_transfer_cancellation]检测到超时取消
      [10.036931] [000026fe] libusb:debug [disarm_timerfd]
      [10.036932] [000026fe] libusb:debug [usbi_handle_transfer_completion] transfer 0x55555576de80有回调0x7ffff7bd4c78

    问题:

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

1 个答案:

答案 0 :(得分:0)

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

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