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

HID USB键盘
EN

Stack Overflow用户
提问于 2014-06-05 08:51:38
回答 2查看 3.8K关注 0票数 3

我正在试着制造一个隐藏的USB设备。我搜索了一下,发现来自键盘的输出有8个字节。第一个字节是一个修饰符,第二个字节是保留的,其余的六个字节是关键代码。我认为在某些情况下,像"prtsc“这样的字节比单个字节更需要。

1. usb键盘输出的数据是否总是8字节(是否取决于按键的类型)。

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

你好,拉胡尔。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-06 14:41:56

我认为在某些情况下,如"prtsc“需要的不仅仅是单个字节,我想知道

不,当前定义的一组键盘用法从0x04到0xE7不等,因此它们都可以通过一个字节进行索引。

1. usb键盘输出的数据是否总是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定义的一系列键盘用法,或者是单个用法的列表,或者两者的组合。例如,如果按下A和B键,则缓冲区将包含这两种用法的索引(按任何顺序),其余字节应为0x00。如果随后释放A,则缓冲区仍应包含B使用的索引(其余字节设置为0x00)。如果您忘记通过将缓冲区清除为零来发出密钥释放信号,那么很可能会看到主机设备(通常是PC)重复上次更改的键。关键的重复延迟和速率纯粹是一个主机函数。

HID 1.11的设备类定义在附录C中有更多的信息。

票数 3
EN

Stack Overflow用户

发布于 2014-06-05 08:58:30

请参阅本文档USB HID使用表,第53页。

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

https://stackoverflow.com/questions/24055687

复制
相关文章

相似问题

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