自定义 HID 键盘的键盘输入报告中的多个修饰符 (2)
Multiple modifiers (2) in Keyboard Input Report for custom HID keyboard
我正在构建一个宏键盘,我试图实现的功能之一是 Ctrl+Shift+R,但在定义中,固定的 8 字节字符串中只存在一个修饰符。如何实现额外的修饰符?
USB 键盘几乎总是有一个 HID 报告描述符,它定义每个入站键盘报告如下:
Bit: 7 6 5 4 3 2 1 0
+---+---+---+---+---+---+---+---+
Byte 0 | RG| RA| RS| RC| LG| LA| LS| LC| Modifier bits (LC=Left Control, LS= Left Shift, etc)
+---+---+---+---+---+---+---+---+
Byte 1 | Reserved byte |
+---+---+---+---+---+---+---+---+
Byte 2 | Key 1 |
+---+---+---+---+---+---+---+---+
Byte 3 | Key 2 |
+---+---+---+---+---+---+---+---+
Byte 4 | Key 3 |
+---+---+---+---+---+---+---+---+
Byte 5 | Key 4 |
+---+---+---+---+---+---+---+---+
Byte 6 | Key 5 |
+---+---+---+---+---+---+---+---+
Byte 7 | Key 6 |
+---+---+---+---+---+---+---+---+
每个修改键都表示为字节 0 中的一个位。要指示按下了多个修改键,您可以将这些值“或”在一起。您可以编写如下代码:
#define MOD_LEFT_CONTROL 0b00000001
#define MOD_LEFT_SHIFT 0b00000010
#define MOD_LEFT_ALT 0b00000100
.
.
#define KEY_R 0x15
.
.
modifiers = MOD_LEFT_CONTROL | MOD_LEFT_SHIFT;
reserved = 0;
key[0] = KEY_R;
可以定义一个 HID 报告描述符,允许将修改键的用法包含在 6 字节键数组中,但通常不需要这样做 - 并且上述方案使用较少 space无论如何。
我正在构建一个宏键盘,我试图实现的功能之一是 Ctrl+Shift+R,但在定义中,固定的 8 字节字符串中只存在一个修饰符。如何实现额外的修饰符?
USB 键盘几乎总是有一个 HID 报告描述符,它定义每个入站键盘报告如下:
Bit: 7 6 5 4 3 2 1 0
+---+---+---+---+---+---+---+---+
Byte 0 | RG| RA| RS| RC| LG| LA| LS| LC| Modifier bits (LC=Left Control, LS= Left Shift, etc)
+---+---+---+---+---+---+---+---+
Byte 1 | Reserved byte |
+---+---+---+---+---+---+---+---+
Byte 2 | Key 1 |
+---+---+---+---+---+---+---+---+
Byte 3 | Key 2 |
+---+---+---+---+---+---+---+---+
Byte 4 | Key 3 |
+---+---+---+---+---+---+---+---+
Byte 5 | Key 4 |
+---+---+---+---+---+---+---+---+
Byte 6 | Key 5 |
+---+---+---+---+---+---+---+---+
Byte 7 | Key 6 |
+---+---+---+---+---+---+---+---+
每个修改键都表示为字节 0 中的一个位。要指示按下了多个修改键,您可以将这些值“或”在一起。您可以编写如下代码:
#define MOD_LEFT_CONTROL 0b00000001
#define MOD_LEFT_SHIFT 0b00000010
#define MOD_LEFT_ALT 0b00000100
.
.
#define KEY_R 0x15
.
.
modifiers = MOD_LEFT_CONTROL | MOD_LEFT_SHIFT;
reserved = 0;
key[0] = KEY_R;
可以定义一个 HID 报告描述符,允许将修改键的用法包含在 6 字节键数组中,但通常不需要这样做 - 并且上述方案使用较少 space无论如何。