【发布时间】:2020-04-29 19:21:02
【问题描述】:
我正在使用 Arduino Leonardo 作为键盘 (BadUSB),我想获取键盘 LED 状态(例如 CAPS_LOCK)。
使用https://github.com/NicoHood/HID/blob/master/examples/Keyboard/KeyboardLed/KeyboardLed.ino 我已经设法使用以下代码使其工作:
(不包括键盘库,因为它已经包含在 HID-Project 中)
#include <HID-Project.h>
#define LED_NUM_LOCK (1 << 0) // B00000001
#define LED_CAPS_LOCK (1 << 1) // B00000010
#define LED_SCROLL_LOCK (1 << 2) // B00000100
#define LED_COMPOSE (1 << 3) // B00001000
#define LED_KANA (1 << 4) // B00010000
#define LED_POWER (1 << 5) // B00100000
#define LED_SHIFT (1 << 6) // B01000000
#define LED_DO_NOT_DISTURB (1 << 7) // B10000000
void setup() {
Keyboard.begin();
delay(500);
if (BootKeyboard.getLeds() & LED_CAPS_LOCK) {
// caps lock is on
Keyboard.write("a"); // C
} else {
// caps lock is off
Keyboard.write("b"); // e
};
Keyboard.end();
}
void loop() {}
问题是我想将此特定功能添加到我自己的库中(并避免加载大型 HID-Project 库)。
我相信 BootKeyboard.getLeds() 返回一个 8 位长数字,每个字符代表每个键的状态,如上面代码中定义的那样。 但是我不明白它是如何获得的,因为代码对我来说似乎并不清晰 https://github.com/NicoHood/HID/blob/master/src/SingleReport/BootKeyboard.cpp(第 190-192 行):
uint8_t BootKeyboard_::getLeds(void) { return leds; }
因为它只返回我猜想分配在其他地方的变量 leds,但我无法找到在哪里以及如何...
【问题讨论】:
标签: c++ arduino keyboard led capslock