发现问题由来
准备自己做一个自定义键盘,先小测试一下经典键盘的26字母,设置了从A到H。在实际传输给电脑数据中,把传送数据第一个按钮是0x04,以为输出A,谁知道居然输出D .
下面一段简单的HID报表描述符共对电脑发送4个字节,含义就是,把第一个字节做为为输出A到H字符的数值(同一时刻只能发送其中一个字符对应的数据)。剩余的三个字节数据暂时没用。
0x05, 0x01, // USAGE_PAGE (Consumer Devices)
0x09, 0x06, // USAGE (Consumer Control)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x19, 0x00, // USAGE_MINIMUM (Keyboard a and A)
0x29, 0x0b, // USAGE_MAXIMUM (Keyboard h and H)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x11, // INPUT (Cnst,Ary,Abs,NLin)
0xc0 // END_COLLECTION
分析原因
usage min和max设置了该usage page下的功能按键的范围,上面是04~0B,所以发送给电脑的第一字节是表示4到12的字符,但按照上面的意思,把04做为范围最小值对应01,但若把范围定为00最小,那么给电脑发送04就是A,这么说起来好像很难说清楚。还是看下图