USB论坛-百合电子工作室USB专题站

 找回密码
 我要注册
搜索
热搜: USB学习板
查看: 4717|回复: 3
打印 上一主题 下一主题

USB HID主机程序不能读数据

[复制链接]

6

主题

0

好友

1158

积分

管理员

Rank: 9Rank: 9Rank: 9

楼主
发表于 2012-6-8 19:47:35 |显示全部楼层
你应该讲清楚是哪一节,哪个例子,必要时还要贴出源代码,把问题讲清楚点,这样才好帮你呀
回复

使用道具 举报

6

主题

0

好友

1158

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2012-6-9 09:13:58 |显示全部楼层
这是由于ReadHid没有读到数据所致辞。可以用BusHound监视下位机发过来的数据正常与否。还有,固件里报告描述符定义的输入报告有几种?如果有一种以上,是需要区别报告ID的,而且还要注意每种输入报告的长度。
回复

使用道具 举报

6

主题

0

好友

1158

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2012-6-10 11:20:43 |显示全部楼层
楼上saliven说得非常有道理,建议写句柄和读句柄分开,那么开源项目里提供的CHid类应该定义两个HANDLE类型成员变量,一个保存用于写HID的句柄,另一个用于读HID的句柄。建议楼主试试
回复

使用道具 举报

6

主题

0

好友

1158

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2012-6-11 13:29:49 |显示全部楼层
mark 发表于 2012-6-11 11:24
我按saliven所说的把读和写的句柄分开了,但还是显示“烫烫烫烫”,不过单步bebug时,发现运行到m_strRx =  ...

这是因为我写的那天个CHid类是异步IO操作的,执行完ReadFile后立即返回,所以这时读缓冲区里可能还没有收到数据,等过一会儿才有数据的。您可以在ReadHid里加上等待缓冲区中数据全部到达才返回的功能(但需要加上超时,用WaitEvent方法)。要不就直接将异步IO操作改成同步IO操作,不过这样会阻塞线程,所以改成同步后,读操作最好放到另外一个线程中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

USB开发网 (渝ICP备09006681号-4)

GMT+8, 2024-5-3 21:02 , Processed in 0.049310 second(s), 18 queries .

百合电子工作室版权所有
回顶部