自定义 HID 键盘的键盘输入报告中的多个修改器 (2)

问题描述 投票:0回答:2
我正在构建一个宏键盘,我试图实现的功能之一是 Ctrl+Shift+R,但在定义中,固定的 8 字节字符串中仅存在一个修饰符。如何实现额外的修饰符?

keyboard usb hid keymapping
2个回答
5
投票
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 字节键数组中,但通常不需要这样做 - 并且上述方案无论如何使用更少的空间。


0
投票
具有以下字节列表:

Hex Binary LEFT CONTROL 0x01 00000001 LEFT SHIFT 0x02 00000010 LEFT ALT 0x04 00000100 LEFT CMD|WIN 0x08 00001000 RIGHT CONTROL 0x10 00010000 RIGHT SHIFT 0x20 00100000 RIGHT ALT 0x40 01000000 RIGHT CMD|WIN 0x80 10000000
要发送多个修饰符,请合并字节,例如:

CONTROL + ALT > 您使用字节:00000101 > 十六进制:0x05

CONTROL + SHIFT + ALT > 您使用字节:00000111 > 十六进制:0x07

© www.soinside.com 2019 - 2024. All rights reserved.