在一些github项目中,我看到对于HID键盘报告,它使用的是python结构,如下所示:
self.state = [
0xA1, # This is an input report
0x01, # Usage report = Keyboard
# Bit array for Modifier keys (D7 being the first element, D0 being last)
[0, # Right GUI - (usually the Windows key)
0, # Right ALT
0, # Right Shift
0, # Right Control
0, # Left GUI - (again, usually the Windows key)
0, # Left ALT
0, # Left Shift
0], # Left Control
0x00, # Vendor reserved
0x00, # Rest is space for 6 keys
0x00,
0x00,
0x00,
0x00,
0x00 ]对于结构中出现的前两个字节,0xA1和0x01,我有一些疑问,因为键盘信息的数据实际上是其余的。
HID报告总是从0xA1开始吗?
如果第二个字节的值(0x01)意味着“报表使用=键盘”,那么哪个值对应于游戏垫?
谢谢你的帮助。
发布于 2020-12-26 19:25:22
这段代码似乎是从这里借来的。
在本例中,蓝牙HID配置文件与键盘设备的所谓“引导协议”一起使用(Report = 0x1)。
根据规范"3.3.2蓝牙HID设备启动协议要求“:
蓝牙HID设备支持三种报表类型:输入、输出和功能。输入和输出报告通常包含低延迟信息。输入报告由蓝牙HID设备生成并发送到蓝牙HID主机。输出报告由蓝牙HID主机生成并发送到蓝牙HID设备。功能报告是双向的,通常包含用户不打算看到或生成的信息,因此不需要时间。蓝牙HID设备应在其报表描述符中至少包含一种报表类型。蓝牙HID设备与蓝牙HID主机之间建立了两个逻辑通道:控制通道和中断通道。报告可以在中断通道或控制通道上进行。在中断通道上携带的报告数据是在没有请求的情况下发送的,并且不被确认,这些传输被称为“异步报告”。在控制通道上传输的报告数据总是由SET_REPORT或GET_REPORT请求发起(参见3.1.2.3和3.1.2.4节),这些传输被称为“同步报告”,蓝牙HID引导协议设备需要一个加到标准HID启动协议报告的1-八进制报告ID。蓝牙HID启动协议键盘报告为9八进制(1-八进制报告ID +标准8-八进制键盘启动报告),鼠标引导报告为4八进制(1-八进制报告ID +标准3-八进制鼠标引导报告)。每个蓝牙引导报告的USB标准引导报告部分应符合USB规范附录B中各自的启动报告描述符定义的格式,以便正确解释数据。键盘使用和指向设备按钮和XY轴使用应符合USB规范中的分配。在Boot模式中,不存在报表描述符,但是报告确实具有第3.3.2节中定义的报表is,因此需要GET_REPORT请求八进制的GET_REPORT字段。
0xA1 -是一个10100001的二进制,它似乎是HIDP格式。不知道为什么会在这里:
Bits specifying characteristics of request.
7..4 HIDP Message Type
4 = GET_REPORT
3 Size
0 = The host has allocated a buffer equal to the size of the report.
1 = A 2-octet BufferSize field follows the Report ID. This field indicates the size of the buffer allocated by the host. A device limits the returned payload size to BufferSize. Note that the BufferSize is increased by 1-octet for Boot Protocol Mode reports to include the Report ID imposed by the Bluetooth HID. See §3.3.2 more information on Boot Protocol Mode.
2 Reserved (0)
1..0 Report Type
0 = Reserved
1 = Input
2 = Output
3 = Feature结论:不能通过蓝牙HID引导协议来模拟游戏垫,因为它是不受支持的。如果您想要模拟HID游戏垫--您需要在向主机发送任何数据之前提供完整的HID报告描述符,这样主机驱动程序就可以解析它。
https://stackoverflow.com/questions/65385100
复制相似问题