第1楼 作者:强强 发表时间:2010-9-2 18:55:05 | ||
你应该讲清楚是哪一节,哪个例子,必要时还要贴出源代码,把问题讲清楚点,这样才好帮你呀 回复楼主 回复第1楼 |
第2楼 作者:mark 发表时间:2010-9-2 19:43:10 | |||
谢谢! 是论论坛上的EASY USB 51 Programer:如何与HID设备通讯2中的MFC
回复楼主 回复第2楼 |
第3楼 作者:强强 发表时间:2010-9-2 21:21:26 | ||||
估计程序中数据类型或指针有问题,上位机或者下位机都有可能,可以用BusHound监视下位机发过来的数据正常与否 回复楼主 回复第3楼 |
第4楼 作者:mark 发表时间:2010-9-2 21:48:25 | |||||
您有QQ没?呵呵,我在帮做项目,很急,你能不能帮帮忙?我的qq:37358645万分感谢! 回复楼主 回复第4楼 |
第5楼 作者:mark 发表时间:2010-9-2 21:52:26 | |||||
我用Bushound试过,下位机数据是正确的。不过下位机穿的数据是八位的数字,我怎么进行转化?我强转过的都不成功。 回复楼主 回复第5楼 |
第6楼 作者:强强 发表时间:2010-9-2 22:07:39 | ||||||
这要看你下位机发过来的数据是怎么编码的了 必须要了解下位机发送上来的数据含义,上位机才好解析。你要实现什么功能? 回复楼主 回复第6楼 |
第7楼 作者:mark 发表时间:2010-9-4 17:15:40 | |||||||
我做的就是比如我要传数据给下位机,传的是123,下位机会传回123。但是我的工作伙伴把下位机描述成了键盘,我该怎么办读不出数据啊! 回复楼主 回复第7楼 |
第8楼 作者:强强 发表时间:2010-9-5 17:28:26 | ||||||||
HID相关那几节有好几个与上位机通讯的实例,可以参考一下 回复楼主 回复第8楼 |
第9楼 作者:mark 发表时间:2010-9-8 0:07:05 | |||||||||
HID的readfile读不到数据,我debug显示ucRxBuffer没有获得数据 这个问题是不是以内readHID的函数中使用的openHID的函数中已经将句柄给关闭了,所以readfile未能获得句柄而不能读数据的?要不是话还有什么原因? 回复楼主 回复第9楼 |
第10楼 作者:saliven 发表时间:2010-9-8 9:20:12 | ||
问题处理方法 很可能是因为USB本身是用的两个通道实现读和写的,还有一个通道用于控制命令处理,有一些设备就必需使用不同的打开方式,打开三个句柄,一个用来读,一个用来写,一个用来发送控制信息,这个和你的设备以及操作系统都有关系,所以建议不管如何,都按下面的方式来打开,这个网站提供的程序只打开一个句柄,在有些时候是会出问题的。 打开控制端口应该这样打开: hDeviceHandle = CreateFile( detailData->DevicePath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL); 打开写入端口应该这样: hWriteHandle = CreateFile(detailData->DevicePath, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL); 打开读取端口应该这样: hReadHandle = CreateFile(detailData->DevicePath, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL); 然后你做不同操作,用不同的句柄就行了。 注意:键盘和鼠标只能用这种方式打开控制端口,并且应用程序只能打开控制端口,获取一些信息,而不能写入控制信息,并且不能以读写方式打开。 回复楼主 回复第10楼 |
第11楼 作者:mark 发表时间:2010-9-8 14:05:28 | |||
saliven 怎么加?我家在读的那部分说还要初始化的detaildata。拜托帮我改改啊。谢谢了,很急。 回复楼主 回复第11楼 |
第12楼 作者:mark 发表时间:2010-9-8 18:12:18 | ||||
我在open函数里面加了。 我在openHidDevice里面加了。但是还是没作用。最奇怪的是函数在运行到 m_strRx = ucRxBuffer里面都没读出数,但是运行到后面函数的大括号。ucRxBuffer却有数了。这是为什么?还有读出来的数不能显示。。。。。。。。。 回复楼主 回复第12楼 |
第13楼 作者:saliven 发表时间:2010-9-9 9:10:55 | ||
操作方法 我应该说的比较清楚了吧,在打开设备函数里,你原来只打开一个句柄,现在改为打开3个。 先打开控制句柄,获取设备的相关信息,发现VendorID、ProductID相同时,再取Capabilities 然后再打开读、写两个句柄。 在其他函数里面,你做不同的操作,用不同的句柄就可以了。 比如你读USB信息,就用读的那个句柄,写入就用写的那个句柄。 对于HID模式,控制句柄没有太大用处,控制指令已经由操作系统搞定了,而对于自定义模式,这个句柄很重要。 回复楼主 回复第13楼 |