这段时间,接到个小单子,要和一台下位机进行数据通信,因为不想使用驱动安装,决定按照 USB的HID协议来走。
很新鲜的东东,没有接触过。
先是,我用C#来写上位机程序,这个网络上大部分是 C++,但也有c#,所以问题倒是不难解决。
但是接下来遇到问题了。我可以对下位机WriteFile,但是一到ReadFile,程序就卡死
用HidD_GetInputReport就121超时。真郁闷,然后和下位机的人,尝试了很多办法:
1.原先不需要报告id的,加上---还是不行
2.原先是端点2走数据,现在改为端点1,因为圈圈是这样做的。
这步,埋了个陷阱,因为端点1最大可以走16字节,下位机的人吧最大报文长度设为了16,但是送数据给上位机,只有8,因为大家认为小于最大长度就可以了。----这样还是不行
3.这时,我突然觉得,是否缓存没有塞满?16没有满,底层在等待数据呢。
于是我让他送满16字节的垃圾数据,看下,结果,果然,可以读了,我们大呼经验主义害死人。
于是,我们换回端点2,因为我们报文最长也就35,所以吧报文长度改为了35,于是,一切ok..
我差点准备放弃,不弄了。哈哈,灵感也很重要.over.