首页 文章

HID USB键盘

提问于
浏览
3

我正在尝试制作一个HID USB设备 . 我搜索过它,发现键盘的输出有8个字节 . 第一个字节是修饰符,第二个字节是保留的,剩下的6个字节是关键代码 . 我认为在某些情况下像“prtsc”需要多个单字节 . 我想知道

  1. usb hid键盘输出的数据是否总是8个字节(它会根据按下的键的类型而变化) .

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

此致,拉胡尔 .

2 回答

  • 2

    您应该参考本文档USB HID usage table,第53页 .

  • 0

    我认为在某些情况下像“prtsc”需要的不止是单个字节 . 我想知道

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

    1.从usb hid键盘输出的数据是否总是8个字节(它是否会根据按下的键的类型而变化) .

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

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

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

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

相关问题