Arduino:在理解 <keyboard.h> 库方面需要帮助
Arduino: need assistance in understanding <keyboard.h> library
我有 Leonardo/Micro 设备可以模拟键盘。
我想修改库。原因是我希望能够发送原始扫描码,而图书馆会做一些准备。
我查看了源代码,也是 HID 库的源代码,但难以理解以下几点:
- Keyboard_::begin() 和 Keyboard_::end() 应该 start and stop keboard emulation, but they have empty bodies; https://www.arduino.cc/en/Reference/KeyboardBegin
- KeyReport特别神秘:
- 密钥报告到底发生了什么?我在 HID.cpp 中的 USB_Send 函数中迷路了。无法找到它的来源
- 什么是修饰符,它们在做什么?
- 发送的密钥数量是否限制为 6 个,或者理论上可以是任意的?
我会尽力回答您的问题。如果您还有问题,请告诉我:
- Keyboard_::begin() and Keyboard_::end() are supposed to start and stop keboard emulation, but they have empty bodies
我相信这些只是占位符,以防需要进行任何初始化或清理。其他库具有相同的功能(例如鼠标库)。我怀疑他们在那里是为了保持一致性,以防万一。
- KeyReport is especially mysterious.
typedef struct
{
uint8_t modifiers;
uint8_t reserved;
uint8_t keys[6];
} KeyReport;
KeyReport 是表示发送到主机的 USB 消息的数据结构。
- modifiers 成员是一个 8 位无符号整数,包含各种标志(例如 Left Shift、Left Ctrl、Left Alt 等)
- 保留成员是一个8位无符号整数,未使用,但必须存在。
- keys 成员是一个由六个 8 位无符号整数组成的数组,表示当前按下的键。
- What exactly happens to the keyreport? I lost track in USB_Send function in HID.cpp.
它被发送到主机。
- What are modifiers, what they are doing?
有些键是“常规”键(例如 A、B、1、2、# 等)。其他键是修饰符(例如 Shift、Ctrl、Alt)。修改键在 KeyReport.modifiers 中设置标志。比如Left Shift键是0x02.
- Is number of keys sent limited to 1 or, theoretically could be arbitrary?
可以同时按下的“常规”键数量为 6,但您也可以按下修饰键(Shift、Alt、Ctrl 等)。
仅供参考:我已经能够通过向 USBAPI.h 文件添加新的键定义来添加其他键(例如数字键盘键):
#define KEY_NUMPAD_DIVIDE 0xDC
#define KEY_NUMPAD_MULTIPLY 0xDD
#define KEY_NUMPAD_MINUS 0xDE
#define KEY_NUMPAD_PLUS 0xDF
#define KEY_NUMPAD_ENTER 0xE0
#define KEY_NUMPAD_1 0xE1
#define KEY_NUMPAD_2 0xE2
#define KEY_NUMPAD_3 0xE3
#define KEY_NUMPAD_4 0xE4
#define KEY_NUMPAD_5 0xE5
#define KEY_NUMPAD_6 0xE6
#define KEY_NUMPAD_7 0xE7
#define KEY_NUMPAD_8 0xE8
#define KEY_NUMPAD_9 0xE9
#define KEY_NUMPAD_0 0xEA
#define KEY_NUMPAD_DEL 0xEB
我有 Leonardo/Micro 设备可以模拟键盘。 我想修改库。原因是我希望能够发送原始扫描码,而图书馆会做一些准备。 我查看了源代码,也是 HID 库的源代码,但难以理解以下几点:
- Keyboard_::begin() 和 Keyboard_::end() 应该 start and stop keboard emulation, but they have empty bodies; https://www.arduino.cc/en/Reference/KeyboardBegin
- KeyReport特别神秘:
- 密钥报告到底发生了什么?我在 HID.cpp 中的 USB_Send 函数中迷路了。无法找到它的来源
- 什么是修饰符,它们在做什么?
- 发送的密钥数量是否限制为 6 个,或者理论上可以是任意的?
我会尽力回答您的问题。如果您还有问题,请告诉我:
- Keyboard_::begin() and Keyboard_::end() are supposed to start and stop keboard emulation, but they have empty bodies
我相信这些只是占位符,以防需要进行任何初始化或清理。其他库具有相同的功能(例如鼠标库)。我怀疑他们在那里是为了保持一致性,以防万一。
- KeyReport is especially mysterious.
typedef struct
{
uint8_t modifiers;
uint8_t reserved;
uint8_t keys[6];
} KeyReport;
KeyReport 是表示发送到主机的 USB 消息的数据结构。
- modifiers 成员是一个 8 位无符号整数,包含各种标志(例如 Left Shift、Left Ctrl、Left Alt 等)
- 保留成员是一个8位无符号整数,未使用,但必须存在。
- keys 成员是一个由六个 8 位无符号整数组成的数组,表示当前按下的键。
- What exactly happens to the keyreport? I lost track in USB_Send function in HID.cpp.
它被发送到主机。
- What are modifiers, what they are doing?
有些键是“常规”键(例如 A、B、1、2、# 等)。其他键是修饰符(例如 Shift、Ctrl、Alt)。修改键在 KeyReport.modifiers 中设置标志。比如Left Shift键是0x02.
- Is number of keys sent limited to 1 or, theoretically could be arbitrary?
可以同时按下的“常规”键数量为 6,但您也可以按下修饰键(Shift、Alt、Ctrl 等)。
仅供参考:我已经能够通过向 USBAPI.h 文件添加新的键定义来添加其他键(例如数字键盘键):
#define KEY_NUMPAD_DIVIDE 0xDC
#define KEY_NUMPAD_MULTIPLY 0xDD
#define KEY_NUMPAD_MINUS 0xDE
#define KEY_NUMPAD_PLUS 0xDF
#define KEY_NUMPAD_ENTER 0xE0
#define KEY_NUMPAD_1 0xE1
#define KEY_NUMPAD_2 0xE2
#define KEY_NUMPAD_3 0xE3
#define KEY_NUMPAD_4 0xE4
#define KEY_NUMPAD_5 0xE5
#define KEY_NUMPAD_6 0xE6
#define KEY_NUMPAD_7 0xE7
#define KEY_NUMPAD_8 0xE8
#define KEY_NUMPAD_9 0xE9
#define KEY_NUMPAD_0 0xEA
#define KEY_NUMPAD_DEL 0xEB