大家好,
我看到一个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表示什么啊?
谢谢。
|