usb - 隐藏式 USB 键盘

标签 usb hid

我正在尝试制作一个 HID USB 设备。我搜索了一下,发现键盘的输出有 8 个字节。第一个字节是修饰符,第二个字节是保留字节,其余 6 个字节是关键代码。我认为在某些情况下,例如“prtsc”,需要的不仅仅是单个字节。我想知道

1.usb hid键盘输出的数据是否一直是8字节(会不会因按键类型不同而不同)

2.这8个字节是否有其他前缀或后缀数据来标识新按键的开始和结束?

问候, 拉胡尔。

最佳答案

I think in some cases like "prtsc" more than single byte is needed.I would like to know

不,当前定义的键盘用法集范围从 0x04 到 0xE7,因此它们都可以由单个字节索引。

1.Is the data output from the usb hid keyboard is always 8 bytes or not (will it vary depends on the types of key pressed).

它是一个固定长度,但并不总是必须是 8 个字节(除非您的设备在启动 PC 时需要被识别为键盘......CMOS 启动固件不处理 HID 报告描述符,因此报告缓冲区是预定的固定8字节)。最小值(我已经测试过)是 HID 报告描述符定义的 3 个字节(1 个修饰符字节、1 个保留字节和 1 个 key 索引字节)。

2.Is there any other prefix or suffix data along with these 8 bytes to identify the start and end of new key press?

没有。 6 个字节(在前两个字节之后)表示同时按下的键(在这种情况下最多 6 个)。如果当前未按下任何键,则所有 6 个字节都应包含 0x00。每个字节都是 LOGICAL_MINIMUM 和 LOGICAL_MAXIMUM 之间的索引,一对一地映射到(通常)由 USAGE_MINIMUM 和 USAGE_MAXIMUM 定义的键盘使用范围,或单个 USAGE 的列表,或两者的组合。例如,如果按下 A 和 B 键,则缓冲区将包含这两种用法的索引(以任何顺序),其余字节应为 0x00。如果 A 随后被释放,则缓冲区仍应包含 B 使用的索引(其余字节设置为 0x00)。如果您忘记通过将缓冲区清除为零来发出 key 释放信号,那么您很可能会看到在主机设备(通常是 PC)上重复上次更改的 key 。关键重复延迟和速率纯粹是主机功能。

Device Class Definition for HID 1.11在附录 C 中有更多信息。

关于usb - 隐藏式 USB 键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24055687/

相关文章:

keyboard - HID 设备可以接收哪些数据?

javascript - chrome.hid.send 第二次使用失败

c++ - 根据USB VID :PID in Linux获取设备路径

android - 将我的 Android 用作 USB 设备

c++ - 在 Windows 上与标准 USB PTP/MTP 相机通信的 native 方式是什么?

java - Archos a28 : Read and Write directly to device 上的 USB 输入设备

android - Google Glass 触摸板操作对应的键盘按键是什么?

android USBHost 闪存驱动器

linux - Linux 上的 USB HID 设备轮询间隔

c# - 如何将 DirectInput (sharpDX) 设备映射到其相应的 HID (C#)