Keyboard 用于7个键的HID键盘描述符

Keyboard 用于7个键的HID键盘描述符,keyboard,usb,hid,usb-descriptor,Keyboard,Usb,Hid,Usb Descriptor,我正在尝试制作一个HID USB键盘。默认HID描述符具有6键HID报告。这是描述符,我已经测试过它是否正常工作: static const uint8 hid_descriptor_keyboard[] = { /****/ 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ /****/ 0x09, 0x06, /* USAGE (Keyboard) */ /****/ 0xa1, 0x01, /* COLLECTION

我正在尝试制作一个HID USB键盘。默认HID描述符具有6键HID报告。这是描述符,我已经测试过它是否正常工作:

static const uint8 hid_descriptor_keyboard[] = {
  /****/ 0x05, 0x01,     /* USAGE_PAGE (Generic Desktop) */
/****/ 0x09, 0x06,     /* USAGE (Keyboard) */
/****/ 0xa1, 0x01,     /* COLLECTION (Application) */
/******/ 0x05, 0x07,   /*   USAGE_PAGE (Keyboard) */
/******/ 0x85, 0x01,   /*   REPORT_ID (1) */
  /* Ctrl, Shift and other modifier keys, 8 in total */
/******/ 0x19, 0xe0,   /*   USAGE_MINIMUM (kbd LeftControl) */
/******/ 0x29, 0xe7,   /*   USAGE_MAXIMUM (kbd Right GUI) */
/******/ 0x15, 0x00,   /*   LOGICAL_MINIMUM (0) */
/******/ 0x25, 0x01,   /*   LOGICAL_MAXIMUM (1) */
/******/ 0x75, 0x01,   /*   REPORT_SIZE (1) */
/******/ 0x95, 0x08,   /*   REPORT_COUNT (8) */
/******/ 0x81, 0x02,   /*   INPUT (Data,Var,Abs) */
/* Reserved byte */
/******/ 0x95, 0x01,   /*   REPORT_COUNT (1) */
  /******/ 0x75, 0x08,   /*   REPORT_SIZE (8) */
/******/ 0x81, 0x01,   /*   INPUT (Cnst,Ary,Abs) */
/* LEDs for num lock etc */
/******/ 0x95, 0x05,   /*   REPORT_COUNT (5) */
/******/ 0x75, 0x01,   /*   REPORT_SIZE (1) */
/******/ 0x05, 0x08,   /*   USAGE_PAGE (LEDs) */
/******/ 0x85, 0x01,   /*   REPORT_ID (1) */
/******/ 0x19, 0x01,   /*   USAGE_MINIMUM (Num Lock) */
/******/ 0x29, 0x05,   /*   USAGE_MAXIMUM (Kana) */
/******/ 0x91, 0x02,   /*   OUTPUT (Data,Var,Abs) */
  /* Reserved 3 bits */
/******/ 0x95, 0x01,   /*   REPORT_COUNT (1) */
/******/ 0x75, 0x03,   /*   REPORT_SIZE (3) */
/******/ 0x91, 0x03,   /*   OUTPUT (Cnst,Var,Abs) */
/* Slots for 6 keys that can be pressed down at the same time */
/******/ 0x95, 0x06,   /*   REPORT_COUNT (6) */
/******/ 0x75, 0x08,   /*   REPORT_SIZE (8) */
/******/ 0x15, 0x00,   /*   LOGICAL_MINIMUM (0) */
/******/ 0x25, 0x65,   /*   LOGICAL_MAXIMUM (101) */Bluegiga Technologies Oy
  /******/ 0x05, 0x07,   /*   USAGE_PAGE (Keyboard) */
/******/ 0x19, 0x00,   /*   USAGE_MINIMUM (Reserved (no event indicated)) */
/******/ 0x29, 0x65,   /*   USAGE_MAXIMUM (Keyboard Application) */
/******/ 0x81, 0x00,   /*   INPUT (Data,Ary,Abs) */
/****/ 0xc0
现在,我想把它从6键描述符改为7键描述符。我相信这是描述的相关部分:

/* Slots for 6 keys that can be pressed down at the same time */
/******/ 0x95, 0x06,   /*   REPORT_COUNT (6) */
/******/ 0x75, 0x08,   /*   REPORT_SIZE (8) */
/******/ 0x15, 0x00,   /*   LOGICAL_MINIMUM (0) */
/******/ 0x25, 0x65,   /*   LOGICAL_MAXIMUM (101) */
0x9f 0x0a 0xa1 0x01 0x00 0x00 0x33 0x04 0x05 0x06 0x07 0x08
因此,为了将其更改为7键,我将报告计数设置为7:

/* Slots for 6 keys that can be pressed down at the same time */
/******/ 0x95, 0x07,   /*   REPORT_COUNT (7) */
/******/ 0x75, 0x08,   /*   REPORT_SIZE (8) */
/******/ 0x15, 0x00,   /*   LOGICAL_MINIMUM (0) */
/******/ 0x25, 0x65,   /*   LOGICAL_MAXIMUM (101) */
现在继续测试它。以前,这是使用6键描述符向计算机发送“abcde”的HID报告:

/* Slots for 6 keys that can be pressed down at the same time */
/******/ 0x95, 0x06,   /*   REPORT_COUNT (6) */
/******/ 0x75, 0x08,   /*   REPORT_SIZE (8) */
/******/ 0x15, 0x00,   /*   LOGICAL_MINIMUM (0) */
/******/ 0x25, 0x65,   /*   LOGICAL_MAXIMUM (101) */
0x9f 0x0a 0xa1 0x01 0x00 0x00 0x33 0x04 0x05 0x06 0x07 0x08
由于我使用的是7键描述符,因此新的HID报告如下:

0x9f 0x0b 0xa1 0x01 0x00 0x00 0x33 0x04 0x05 0x06 0x07 0x08 0x09
注意,长度现在是0x0b(11)而不是0x0a(10),我添加了0x09。预期的键盘结果应该是“abcdef”,但我只收到“abcde”,就像以前一样


为什么我的7键HID描述符不工作?谢谢

找到解决方案-我需要从Windows重新安装设备,然后它才能识别新描述符。我以前以为重置设备就足够了。