yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:12150回复:36

强烈建议,关于HID设备的读写

楼主#
更多 发布于:2003-12-12 21:43
刚才浏览了一些帖子,发现很多网友都询问怎么通过应用程序来读些USB设备,而且很多人借鉴了USBPort那个例子,那个例子思想不错,但是错误太多,我建议哪位高手要是调试通过,并且能都实现读写的,把代码贴出来,省得大家问来问去,把高手们都问烦了:)

[编辑 -  12/13/03 by  yux008007]

[编辑 -  12/13/03 by  yux008007]

最新喜欢:

crazyggcrazyg... chinaleichinal...
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-13 10:41
为了不让新人走弯路,我把我的心得写出来:
读写HID设备步骤如下:
1.得到设备句柄
2.对设备进行遍历
3.找出设备的符号链接
4.readfile/writefile进行读写
借助的工具:DDK里面的USBView,如果不知道怎么编译的,用Build -d命令,用USBView可以得到设备的PID,VID,利用这两个值搜索注册表,即可直接得到第三步的符号链接跳到第四步(:mad:我可是花了两个月的时间用代码得到的,呜呜呜呜) ,然后直接读写

不知道我说得对不对,因为没有实现读写,继续研究!
附有代码,如果哪位能实现读写的,请告诉我一声:yux008@hotmail.com
附件名称/大小 下载次数 最后更新
2003-12-13_USBHID.rar (31KB)  529
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-30 16:54

读写比较简单,就是调用WriteFile和ReadFile这两个API函数。
不同的用户要读写的要求都不一样,所以读写这段就省略了。

我没有实现读写,你搞定了吗?
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-30 17:38
发送报表:
假设OutputReport的长度为outLength.
CHAR OutputReport[outLength];
//The first byte is the report number.
OutputReport[0]=0;//这句很重要
memcpy(OutputReport+1,“报表内容”,outLength-1);

WriteFile
    (DeviceHandle,
    OutputReport,
    Capabilities.OutputReportByteLength,
    &BytesWritten,
    NULL);

读取报表:
ReadFile
    (ReadHandle,
    InputReport,
    Capabilities.InputReportByteLength,
    &NumberOfBytesRead,
    NULL;

然后可以用for语句逐个提取InputReport里面的字符即可。
千万千万要注意的是,要从InputReport[1]开始提取。
如果从InputReport[0]开始,将会是空白!!
 

谢谢!!!
顺便问一下,你用的什么设备?我用鼠标不行
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-30 17:54
首先你要确定的是,那只鼠标能接收报表吗?即使能,它会有反馈信息吗?
这些应该涉及到底层编程的问题。
现在讨论的HID读写是上层(即应用程序),至于发了报表后,鼠标的USB做什么动作,是由底层的程序决定的。
上层发了指令,底层对该指令进行相应的动作,返回信息,上层再接收。大致的流程应该是这样。

看来我欠缺很多知识,你说的报表是什么?
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-30 17:55
我用这个程序来读出鼠标的数据,报表和数据是一样的吧?
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-31 08:43
 :)我要读的数据是设备和系统进行通讯的数据包,比如按下鼠标左键,鼠标应该向系统发出一个数据包表明按下了左键,可能我的思路有问题,再看看
游客

返回顶部