Arduino Trinket/Attiny85 USB:可以读取所有键的状态吗?
Arduino Trinket/Attiny85 USB: Possible to read the state of ALL keys?
例如,USB 键盘是系统内的共享设备。多个键盘是可能的,它们共享 num、scroll 和 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
}
}
问题:
所以我想知道我是否可以使用任何键来做到这一点,或者这完全不可能吗?如果不是,为什么不呢?如果是,我该怎么做?
When you press capslock on keyboard #1, keyboard #2 will detect this state.
那是因为当前的 LED 状态由 OS 传输到所有键盘。但只有 LED 状态被传输,而不是按键状态。
例如,USB 键盘是系统内的共享设备。多个键盘是可能的,它们共享 num、scroll 和 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
}
}
问题:
所以我想知道我是否可以使用任何键来做到这一点,或者这完全不可能吗?如果不是,为什么不呢?如果是,我该怎么做?
When you press capslock on keyboard #1, keyboard #2 will detect this state.
那是因为当前的 LED 状态由 OS 传输到所有键盘。但只有 LED 状态被传输,而不是按键状态。