3

我正在尝试使用一些 USB HID 设备。
我有可以与设备交互的专有软件(来自设备供应商)。但我需要自己写一个。
在嗅探器工具的帮助下,我捕获了主机和设备之间的流量。这个工具是BusDog
然后我能够通过 WriteFile 使用从 CreateFile 获得的设备句柄重现相同的流量(对于从 setupapi.dll API 获得的路径)。但是设备不会对我的命令做出反应(“请求”,因为它们在 USB/HID 世界中被称为)。

然后我使用了另一个工具——HHD Device Monitoring Studio。该工具不仅显示“中断传输”,还显示各种传输。我可以看到以下日志:

008852:类特定请求 (DOWN),2010 年 12 月 20 日 18:58:10.242 +0.031
目的地:接口,索引 0
保留位:34
请求:0x9
值:0x30d
向设备发送 0x8 个字节

 0D 01 01 00 00 00 00 00 ........
008853:控制转移 (UP),2010 年 12 月 20 日 18:58:10.242 +0.0。状态:0x00000000
管道句柄:0x8638c5c8

 0D 01 01 00 00 00 00 00 ........
安装包
 21 09 0D 03 00 00 08 00 !.......
收件人:接口
请求类型:类
方向:主机->设备
请求:0x9(未知)
值:0x30d
索引:0x0
长度:0x8

我的问题是如何在我自己的代码中重新实现这种转移?以及如何将这些东西解析为适当函数的参数(是 DeviceIoControl?)

ps 我用的是C#,其实没多大关系,C/C++都能看懂。

4

2 回答 2

0

看看 HIDClass 支持例程 ( http://msdn.microsoft.com/en-us/library/ff538865%28v=vs.85%29.aspx ),它为您包装了所有相关的 HID ioctl...它可能类似于功能报告 (HidD_SetFeature)。

于 2011-01-24T04:00:13.763 回答
0

我在这个答案的详细概述中详细介绍了这种事情。但我会总结一些要点。

首先,您必须找出设备的供应商和产品 ID。(这些都是独一无二的。)与设备通信的过程很简单。枚举连接的设备,选择与您要查找的 ID 匹配的设备,然后使用libusb之类的库读取/写入设备。在我链接到的上述堆栈答案的最底部有一个详细的示例。

于 2014-06-25T22:09:25.547 回答