【问题标题】:Multiple modifiers (2) in Keyboard Input Report for custom HID keyboard自定义 HID 键盘的键盘输入报告中的多个修饰符 (2)
【发布时间】:2021-06-14 16:38:06
【问题描述】:

我正在构建一个宏键盘,我尝试实现的功能之一是 Ctrl+Shift+R,但在定义中,固定的 8 字节字符串中只存在一个修饰符。如何实现额外的修饰符?

【问题讨论】:

    标签: keyboard usb hid keymapping


    【解决方案1】:

    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 字节键数组中包含修饰键使用,但通常不需要这样做 - 无论如何,上述方案使用的空间更少。

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 1970-01-01
      • 2015-11-17
      • 2014-04-18
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 2015-02-24
      相关资源
      最近更新 更多