0

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

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

为了进行测试,我将“Send_Heartbeat()”放在按钮单击上。如果我多次单击按钮并排队发送许多消息,只要我保持队列忙碌,消息就会继续发送,而我的 USB 设备会继续接收它们。

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

但是,即使我的 USB 设备没有接收到它们,我的程序的传输回调确实会返回传输状态代码 0,表示成功。

我的问题:

  1. 如果我的 USB 设备似乎已停止接收,为什么回调的传输状态指示成功?
  2. 有没有人听说过这种行为?

值得注意的是,如果我断开 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 通信进行编程,我想知道是否有一些我错过的基础知识。

谢谢!

4

1 回答 1

0

问题就在这里,我猜:

我的“分离”是以下调用:

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();

于 2013-08-04T06:16:03.657 回答