EDN China > 其它文章 > 嵌入式系统 > 正文
?

[原创]USB学习小记-HID类键盘的报告描述符的理解

作者:maxing: EDN China?? 2008年09月07日 ?? 收藏0

  EDN博客精华文章??作者:maxing

  二,键盘的报告描述符的理解

  在参考别人的例程实现了键盘跑起来的时候,你这时候应该会想问的是,为什么描述符要这样写呢?

  好的,我当初也有同样的疑问,那下面来简单说说键盘的报告描述符的含义。其它的描述符含义很明显,这里就不作详细讲解。

  报告描述符是HID类设备最重要的描述符,其实它相当于一个大的设备属性表,在主机端会有一个叫做Parser的东西,对在枚举阶段接收到的报告描述符进行解释,以完成对该HID设备的属性的了解。

  由于电脑圈圈前辈已经对这部分有过较详细的讲解了,我这只作为补充,供各位参考。

  键盘的报告描述符:

程序

程序

  在这为了容易表达,把上面键盘的报告描述符除开头与尾分成五部分

  (1)这部分实际上为键盘的八个控制键,包括:左/右CTL,在/右ALT,在/右SHIFT,左/右WIN键盘,所以其范围为如下所示(HID Usage Tables.pdf从54页开始,展示了所有的keyborad page)??

  1>

  ??? 0x19, 0xe0,??????????????????? //?? USAGE_MINIMUM (Keyboard LeftControl)

  ??? 0x29, 0xe7,??????????????????? //?? USAGE_MAXIMUM (Keyboard Right GUI)

  2>

  八个键一个键对应于一个位所以:

  ??? 0x75, 0x01,??????????????????? //?? REPORT_SIZE (1)

  ??? 0x95, 0x08,??????????????????? //?? REPORT_COUNT (8)

  report size单位为bit,report count为8,所以1*8共占用一个字节;

  3>由于按键的值要么为1(按下),要么为0(松开),所以逻辑最大值为1,最小值为0

  ??? 0x15, 0x00,??????????????????? //?? LOGICAL_MINIMUM (0)

  ??? 0x25, 0x01,??????????????????? //?? LOGICAL_MAXIMUM (1)

  4>由于按键为输入(对主机来说),所以为INPUT,并且为数据(Data),变量(var),绝对值(Abs)

  ??? 0x81, 0x02,??????????????????? //?? INPUT (Data,Var,Abs)

  (2)这部分由于键盘数据的八个字节的第二个字节是保留的(第一个字节就是上面所描述的控制键部分),所以

  ??? 0x95, 0x01,??????????????????? //?? REPORT_COUNT (1)

  ??? 0x75, 0x08,??????????????????? //?? REPORT_SIZE (8)

  ??? 0x81, 0x03,??????????????????? //?? INPUT (Cnst,Var,Abs)

  1bit*8 = 1 byte ,前且为常量。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

USB? HID类键盘? 报告描述符?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈