我正在编写一个 Linux 程序(使用 Qt 4.8 和 libusb 1.0),它将与自定义 USB 设备(目前由同事编程)进行通信。
第 1 步是定期通过 USB 来回“心跳”。我目前正在使用异步批量传输。
为了进行测试,我将“Send_Heartbeat()”放在按钮单击上。如果我多次单击按钮并排队发送许多消息,只要我保持队列忙碌,消息就会继续发送,而我的 USB 设备会继续接收它们。
如果我停止几秒钟,然后恢复并将更多消息添加到队列中,USB 设备将停止接收它们。
但是,即使我的 USB 设备没有接收到它们,我的程序的传输回调确实会返回传输状态代码 0,表示成功。
我的问题:
- 如果我的 USB 设备似乎已停止接收,为什么回调的传输状态指示成功?
- 有没有人听说过这种行为?
值得注意的是,如果我断开 USB 设备,我会在回调中返回正确的状态码,表明设备已消失。
如果 USB 设备保持连接并运行,我“分离”然后再次“附加”以强制重新连接并尝试发送更多测试心跳,它可以工作!USB 设备再次开始接收信息。
我的“分离”是以下调用:
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 通信进行编程,我想知道是否有一些我错过的基础知识。
谢谢!