我正在编写一个Linux程序(使用Qt 4.8和libusb 1.0),它将与自定义USB设备通信(目前由同事编程)。
步骤1是定期通过USB来回“心跳”。 我目前正在使用异步批量传输。
为了进行测试,我点击了按钮上的“Send_Heartbeat()”。如果我点击按钮一个LOT并排队发送一些消息,只要我让我的队列保持忙碌,消息就会继续发送,我的USB设备会继续接收它们。
如果我停止几秒钟,然后继续并向队列添加更多消息,USB设备将停止接收它们。
但是,即使我的USB设备没有接收到,我的程序的转接回拨也会返回,传输状态代码为0,表示成功。
我的问题:
值得注意的是,如果我断开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通信,我想知道是否有一些我错过的基础知识。
谢谢!
答案 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();