打印
[USB接口]

HID描述解释

[复制链接]
1109|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
victor3l|  楼主 | 2015-9-21 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,
我看到一个HID的例子,其HID的描述是:
static const char ReportDescriptor[69] __attribute__ ((aligned(4)))=
{
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)   前者是前缀,括号里的数据这个item的数据。这里每一行统称一个item。Usage page是全局项目,usage是局部项目。
    0x09, 0x06,                    // USAGE (Keyboard)
    0xa1, 0x01,                    // COLLECTION (Application)     //collection 是0xA1 ,collection application是0x01
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
    0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)       //上面逻辑值最小是0,最大是1,所以用1位就可以表示。即这里的size是1.
    0x95, 0x08,                    //   REPORT_COUNT (8)   //在报告时,应该是键没有按下是0,按下1,因为有8个按键(从左cntrl到右GUI),所以reportcount是8
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
       
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x08,                    //   REPORT_COUNT (8)
    0x81, 0x01,                    //   INPUT (Cnst,Ary,Abs)
       
    0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
    0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x06,                    //   REPORT_COUNT (6)
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
       
    0x05, 0x08,                    //   USAGE_PAGE (LEDs)
    0x19, 0x01,                    //   USAGE_MINIMUM (Num Lock)
    0x29, 0x03,                    //   USAGE_MAXIMUM (Scroll Lock)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x03,                    //   REPORT_COUNT (3)
    0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)
       
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x05,                    //   REPORT_COUNT (5)
    0x91, 0x01,                    //   OUTPUT (Cnst,Ary,Abs)
    0xc0                           // END_COLLECTION
};

问一下,我看好几个这样的描述符, 发现都使用USAGE_MINIMUM (Keyboard LeftControl),USAGE_MAXIMUM (Keyboard Right GUI)。这里的最大最小表示什么啊? 它也不是键盘上最小的键的编码啊?

还有一些INPUT (Cnst,Ary,Abs) ,这个具体表示什么? 采用这样的描述,例如“S”键,的编码是
  { 0x02, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00 },  /* 'S'   */
我知道0x16表示S,但是其他的00表示什么啊?
谢谢。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

308

帖子

5

粉丝