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) */
7 キーに変更するために、REPORT_COUNT を 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 レポートでした。
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
長さが 0x0a (10) ではなく 0x0b (11) になり、0x09 を追加したことに注意してください。予想されるキーボードの結果は「;abcdef」であるはずですが、以前と同様に「;abcde」しか受け取りません。
7 キー HID 記述子が機能しないのはなぜですか? ありがとう!