最近,我开始学习如何在 Windows 10 上与 HID 设备进行通信。
但我有几个问题。
根据Window的文档,HidD_SetOutputReport
必须将ReportBuffer
参数的第一个字节设置为报表ID或0x00
。
由于我设备的 HID 报告描述符已经声明了一些报告 id,所以我必须在使用时设置报告 idHidD_setoutputreport
而不是0x00
?
当我使用报告 id 0x80 作为buf[0]
,例如: 0x80 0x02 0x00 ....... 0x00 (我Capabilities.OutputReportByteLength
是 64)
我的代码是ret = HidD_SetOutputReport(handle->device_handle, buf2, 65)
但我总是这样发送数据(在Bus Hound上):
64 输出 80 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 4.1.0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 4.1.16
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 4.1.32
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...... 4.1.48
我认为它应该发送buf[1] to buf[64]
而不是发送buf[0] to buf[63]
,所以我尝试ret = HidD_SetOutputReport(handle->device_handle, buf2, 64)
了,但结果是一样的。
这是我的 INPUT 和 OUTPUT 的 HID 报告描述符:
使用页面(通用桌面)05 01
逻辑最小值 (0) 15 00
用法(操纵杆)09 04
收藏(申请)A1 01
报告编号 (48) 85 30
使用页面(通用桌面)05 01
使用页面(按钮) 05 09
最低使用量(按钮 1)19 01
最大使用量(按钮 10) 29 0A
逻辑最小值 (0) 15 00
逻辑最大值 (1) 25 01
报告大小 (1) 75 01
报告计数 (10) 95 0A
单位指数 (0) 55 00
单位(无)65 00
输入 (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
使用页面(按钮) 05 09
最低使用量(按钮 11) 19 0B
使用最大值(按钮 14) 29 0E
逻辑最小值 (0) 15 00
逻辑最大值 (1) 25 01
报告大小 (1) 75 01
报告数 (4) 95 04
输入 (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
报告大小 (1) 75 01
报告数 (2) 95 02
输入 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03
用法(通用桌面:指针)0B 01 00 01 00
集合(物理)A1 00
Usage (Generic Desktop:X) 0B 30 00 01 00 Usage (Generic Desktop:Y) 0B 31 00 01 00 Usage (Generic Desktop:Z) 0B 32 00 01 00 Usage (Generic Desktop:Rz) 0B 35 00 01 00 Logical Minimum (0) 15 00 Logical Maximum (65535) 27 FF FF 00 00 Report Size (16) 75 10 Report Count (4) 95 04 Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
结束收集 C0
用法(通用桌面:帽子开关)0B 39 00 01 00
逻辑最小值 (0) 15 00
逻辑最大值 (7) 25 07
体力最小值 (0) 35 00
物理最大值 (315) 46 3B 01
单位(英语:度)65 14
报告大小 (4) 75 04
报告数 (1) 95 01
输入 (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
使用页面(按钮) 05 09
最低使用量(按钮 15) 19 0F
最大使用量(按钮 18) 29 12
逻辑最小值 (0) 15 00
逻辑最大值 (1) 25 01
报告大小 (1) 75 01
报告数 (4) 95 04
输入 (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
报告大小 (8) 75 08
报告数 (52) 95 34
输入 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03
使用页面(供应商定义 1)06 00 FF
报告编号 (33) 85 21
使用情况(供应商定义 1)09 01
报告大小 (8) 75 08
报告数 (63) 95 3F
输入 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03
报告编号 (129) 85 81
使用情况(供应商定义 2)09 02
报告大小 (8) 75 08
报告数 (63) 95 3F
输入 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03
报告编号 (1) 85 01
使用情况(供应商定义 3)09 03
报告大小 (8) 75 08
报告数 (63) 95 3F
输出 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) 91 83
报告编号 (16) 85 10
使用情况(供应商定义 4)09 04
报告大小 (8) 75 08
报告数 (63) 95 3F
输出 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) 91 83
报告编号 (128) 85 80
使用情况(供应商定义 5)09 05
报告大小 (8) 75 08
报告数 (63) 95 3F
输出 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) 91 83
报告编号 (130) 85 82
使用情况(供应商定义 6)09 06
报告大小 (8) 75 08
报告数 (63) 95 3F
输出 (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) 91 83
结束收集 C0