首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键盘HID报告

键盘HID报告
EN

Stack Overflow用户
提问于 2020-12-20 21:45:18
回答 1查看 1.3K关注 0票数 0

在一些github项目中,我看到对于HID键盘报告,它使用的是python结构,如下所示:

代码语言:javascript
复制
        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)意味着“报表使用=键盘”,那么哪个值对应于游戏垫?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 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格式。不知道为什么会在这里:

代码语言:javascript
复制
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报告描述符,这样主机驱动程序就可以解析它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65385100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档