Например, клавиатура USB является общим устройством в системе. Возможно несколько клавиатур, и они разделяют состояния num, scroll и capslock. Когда вы нажимаете capslock на клавиатуре # 1, клавиатура # 2 обнаружит это состояние.
Для эмулируемого устройства клавиатуры USB (с использованием библиотеки Trinket) вы можете проверить эти значения с помощью:
typedef struct { bool caps,num,scroll; } TKeyboardLEDState;
.....
TKeyboardLEDState usbGetKeyboardLedState()
{
uint8_t iState = TrinketHidCombo.getLEDstate();
TKeyboardLEDState tResult;
tResult.caps = (iState & (1<< KB_LED_CAPS));
tResult.num = (iState & (1<< KB_LED_NUM));
tResult.scroll = (iState & (1<< KB_LED_SCROLL));
return tResult;
}
.......
void loop()
{
TKeyboardLEDState recKeybLEDstate = usbGetKeyboardLedState();
if( recKeybLEDstate.caps )
{
// do something
}
}
Вопрос:
Поэтому мне интересно, могу ли я сделать это с ЛЮБЫМ ключом или это совершенно невозможно? Если нет, то почему нет? Если да, как я могу это сделать?
Когда вы нажимаете capslock на клавиатуре # 1, клавиатура # 2 обнаружит это состояние.
Это потому, что текущее состояние светодиода передается на все клавиатуры ОС. Но передается только состояние светодиода, а не состояние ключа.
Других решений пока нет …