Я использую Arduino Leonardo в качестве клавиатуры (BadUSB), и я хотел бы получить статус индикаторов клавиатуры (например, CAPS_LOCK).
Использование https://github.com/NicoHood/HID/blob/master/examples/Keyboard/KeyboardLed/KeyboardLed.ino Мне удалось заставить его работать, используя следующий код:
(библиотека Keyboard не включена, потому что она каким-то образом уже включена в 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; }
, поскольку он возвращает только переменные светодиоды, которые, я думаю, назначены где-то еще, но мне не удается найти, где и как ...