使用libusb异步批量传输,如果我们空闲,设备将停止接收

时间:2013-07-03 20:58:45

标签: qt usb libusb libusb-1.0

我正在编写一个Linux程序(使用Qt 4.8和libusb 1.0),它将与自定义USB设备通信(目前由同事编程)。

步骤1是定期通过USB来回“心跳”。 我目前正在使用异步批量传输。

为了进行测试,我点击了按钮上的“Send_Heartbeat()”。如果我点击按钮一个LOT并排队发送一些消息,只要我让我的队列保持忙碌,消息就会继续发送,我的USB设备会继续接收它们。

如果我停止几秒钟,然后继续并向队列添加更多消息,USB设备将停止接收它们。

但是,即使我的USB设备没有接收到,我的程序的转接回拨也会返回,传输状态代码为0,表示成功。

我的问题:

  1. 如果我的USB设备似乎已停止接收,为什么回拨的传输状态表示成功?
  2. 有没有人听说过这种行为?
  3. 值得注意的是,如果我断开USB设备,我会在回调中返回正确的状态代码,表明设备已经消失。

    如果USB设备已连接并正在运行,并且我“Detatch”然后再次“Attach”以强制重新连接并尝试发送更多测试心跳,则它可以正常工作! USB设备再次开始接收消息。

    我的“Detatch”是以下电话:

    libusb_release_interface()
    libusb_reset_device()
    libusb_close()
    

    然后我的“附加”是:

    libusb_get_device_list()
    libusb_get_device_descriptor()
    libusb_open()
    libusb_set_configuration()
    libusb_claim_interface()
    

    我的下一步是缩小哪些libusb命令重新建立通信。

    与此同时,我希望有人认识到这些症状并提出建议。 由于这是我第一次编程USB通信,我想知道是否有一些我错过的基础知识。

    谢谢!

1 个答案:

答案 0 :(得分:0)

我想问题就在这里:

我的“Detatch”是以下电话:

libusb_release_interface(); 在您的detatch中,您需要附加内核驱动程序 detatch_kernel_driver(); libusb_reset_device(); libusb_close();

然后我的“附加”是:

libusb_get_device_list(); libusb_get_device_descriptor(); libusb_open(); libusb_set_configuration(); 在这里,您需要检查内核驱动程序是否处于活动状态。所以, 检查attach_kernel_driver();返回的内容,然后致电detatch_kernel_driver(); if needed libusb_claim_interface();