Понимание статуса светодиода клавиатуры - PullRequest
0 голосов
/ 29 апреля 2020

Я использую 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; }

, поскольку он возвращает только переменные светодиоды, которые, я думаю, назначены где-то еще, но мне не удается найти, где и как ...

1 Ответ

0 голосов
/ 30 апреля 2020

Посмотрите на

  • line53 / 54 (определение _hidReportDescriptorKeyboard в программе)
  • line168-172 Настройка значения светодиодов (0/1)
  • line190 -192 Получение значений

BootKeyboard. cpp и определение находится в заголовочном файле BootKeyboard.h

  • строка 78 как uint8_t

, так как некоторые функции используют _hidReportDescriptorKeyboard, вы должны попробовать использовать файлы в качестве базы, а затем избавиться от ненужных вам функций. Если у вас есть минимальный рабочий набор, вы можете начать рефакторинг кода - для анализа кода и зависимостей - вы можете использовать инструмент stati c (снимок), такой как doxygen или IDE, поддерживающий анализ кода
EDIT
Вот вики для Hood Loader принесите немного чая и времени, чтобы прочитать и выучить
См. Эти ссылки для деталей и информации и Альтернативная прошивка клавиатуры Эти все репозитории на github вы можете искать

...