发现问题由来
准备自己做一个自定义键盘,先小测试一下经典键盘的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,这么说起来好像很难说清楚。还是看下图
 



















