导航

键盘

一、建立工程

  将USB鼠标复制一份,修改成UsbKeyboard

 

二、设备描述符

  只需要经产品ID修改一下。

 

三、配置集合

  1.配置描述符的代码不需要修改。

  2.接口描述符端点数修改成两个(一个输入键盘,一个输出led),同时修改成键盘协议。

  3.HID描述符不用修改。

  4.原来输入端点1的描述符不用修改,现在增加一个输出端点1的描述符,新增的与原来的属性是一样的,只是端点地址不同。

 

四、字符串描述符

  并不重要,不修改

 

五、报告描述符

  有很多不同,由于这个描述符的复杂性,尚等后续探索。

 

六、报告的实现

  通过报告描述符的定义,报告共有8个字节。第一字节的8个bit用来表示特殊按键的按下(例如shift、alt)。第2个字节保留。第3个字节到第8个字节,是普通按键值数组,当只有一个按键按下去的时候,这六个字节中的第一个字节返回按键值,若有多个按键按下去的时候则同时返回,按键的顺序无所谓。

 

七、再谈报告描述符

  报告描述符为了描述报告的结构和用途结构用count、size、input、output就能描述,很简单。用途HID用途表决定,是需要仔细研究的:

    1、为了分类管理USAGE,通过USAGE_PAGE对USAGE进行分组,常用的USAGE_PAGE有Generic Desktop,Keyboard/Keypad,LEDS,Button等。

    2、USAGE_PAGE和USAGE都是2个字节的,如果应用在短条目里,默认将高字节清0。

    3、对报告的位域进行用途分配时,有两种分配方法:一种是一个个用USAGE分配(例如鼠标的x、y轴和滚轮),也可以用USAGE_MINIMUM和USAGE_MAXIMUM来指定(例如键盘LED)。但是有一种USAGE_typeSEL的USAGE,它的数据域是ary的(例如键盘的普通按键),当指定USAGE_MINIMUM和USAGE_MAXIMUM时并不是按顺序去分配USAGE,而是USAGE可以任意占用这个数据域,例如键盘的六个按键的数组可以由任意按键进行占用,而按键不止6个。

    4、USAGE有Controls,Data,Collection三种基本类型。Collection类USAGE可以用来开集合,例如键盘用USAGE_PAGE (Generic Desktop)的USAGE (Keyboard)开了一个COLLECTION (Application),COLLECTION决定了设备的类型,系统因此而加载驱动。Controls类USAGE可以用来开辟一个数据域用作控制,例如键盘的LED控制。Data类USAGE可以用来定义一个数据域作为数据用,例如键盘的按键。

  当构建HID报告描述符的时候,首先明确它的功能是什么,例如键盘、鼠标、操纵杆等,由此明确最外层的COLLECTION (Application),系统根据最外层的COLLECTION (Application)分析它是什么设备。确定功能后,就去用途表去查,看哪个USAGE_PAGE的USAGE是这个功能,同时又是应用集合类型的。

 

posted on 2017-09-19 06:45  刘梢  阅读(176)  评论(0编辑  收藏  举报