1 #ifndef __kbdrptparser_h_
2 #define __kbdrptparser_h_
4 class KbdRptParser
: public KeyboardReportParser
{
6 virtual uint8_t HandleLockingKeys(HID
*hid
, uint8_t key
);
7 virtual void OnControlKeysChanged(uint8_t before
, uint8_t after
);
8 virtual void OnKeyDown(uint8_t mod
, uint8_t key
);
9 virtual void OnKeyUp(uint8_t mod
, uint8_t key
);
10 virtual void OnKeyPressed(uint8_t key
);
13 void PrintKey(uint8_t mod
, uint8_t key
);
16 uint8_t KbdRptParser::HandleLockingKeys(HID
*hid
, uint8_t key
) {
17 uint8_t old_keys
= kbdLockingKeys
.bLeds
;
20 case UHS_HID_BOOT_KEY_NUM_LOCK
:
21 Serial
.println(F("Num lock"));
22 kbdLockingKeys
.kbdLeds
.bmNumLock
= ~kbdLockingKeys
.kbdLeds
.bmNumLock
;
24 case UHS_HID_BOOT_KEY_CAPS_LOCK
:
25 Serial
.println(F("Caps lock"));
26 kbdLockingKeys
.kbdLeds
.bmCapsLock
= ~kbdLockingKeys
.kbdLeds
.bmCapsLock
;
28 case UHS_HID_BOOT_KEY_SCROLL_LOCK
:
29 Serial
.println(F("Scroll lock"));
30 kbdLockingKeys
.kbdLeds
.bmScrollLock
= ~kbdLockingKeys
.kbdLeds
.bmScrollLock
;
34 if (old_keys
!= kbdLockingKeys
.bLeds
&& hid
) {
35 BTHID
*pBTHID
= reinterpret_cast<BTHID
*> (hid
); // A cast the other way around is done in BTHID.cpp
36 pBTHID
->setLeds(kbdLockingKeys
.bLeds
); // Update the LEDs on the keyboard
42 void KbdRptParser::PrintKey(uint8_t m
, uint8_t key
) {
44 *((uint8_t*)&mod
) = m
;
45 Serial
.print((mod
.bmLeftCtrl
== 1) ? F("C") : F(" "));
46 Serial
.print((mod
.bmLeftShift
== 1) ? F("S") : F(" "));
47 Serial
.print((mod
.bmLeftAlt
== 1) ? F("A") : F(" "));
48 Serial
.print((mod
.bmLeftGUI
== 1) ? F("G") : F(" "));
50 Serial
.print(F(" >"));
51 PrintHex
<uint8_t>(key
, 0x80);
52 Serial
.print(F("< "));
54 Serial
.print((mod
.bmRightCtrl
== 1) ? F("C") : F(" "));
55 Serial
.print((mod
.bmRightShift
== 1) ? F("S") : F(" "));
56 Serial
.print((mod
.bmRightAlt
== 1) ? F("A") : F(" "));
57 Serial
.println((mod
.bmRightGUI
== 1) ? F("G") : F(" "));
60 void KbdRptParser::OnKeyDown(uint8_t mod
, uint8_t key
) {
61 Serial
.print(F("DN "));
63 uint8_t c
= OemToAscii(mod
, key
);
69 void KbdRptParser::OnControlKeysChanged(uint8_t before
, uint8_t after
) {
70 MODIFIERKEYS beforeMod
;
71 *((uint8_t*)&beforeMod
) = before
;
73 MODIFIERKEYS afterMod
;
74 *((uint8_t*)&afterMod
) = after
;
76 if (beforeMod
.bmLeftCtrl
!= afterMod
.bmLeftCtrl
)
77 Serial
.println(F("LeftCtrl changed"));
78 if (beforeMod
.bmLeftShift
!= afterMod
.bmLeftShift
)
79 Serial
.println(F("LeftShift changed"));
80 if (beforeMod
.bmLeftAlt
!= afterMod
.bmLeftAlt
)
81 Serial
.println(F("LeftAlt changed"));
82 if (beforeMod
.bmLeftGUI
!= afterMod
.bmLeftGUI
)
83 Serial
.println(F("LeftGUI changed"));
85 if (beforeMod
.bmRightCtrl
!= afterMod
.bmRightCtrl
)
86 Serial
.println(F("RightCtrl changed"));
87 if (beforeMod
.bmRightShift
!= afterMod
.bmRightShift
)
88 Serial
.println(F("RightShift changed"));
89 if (beforeMod
.bmRightAlt
!= afterMod
.bmRightAlt
)
90 Serial
.println(F("RightAlt changed"));
91 if (beforeMod
.bmRightGUI
!= afterMod
.bmRightGUI
)
92 Serial
.println(F("RightGUI changed"));
95 void KbdRptParser::OnKeyUp(uint8_t mod
, uint8_t key
) {
96 Serial
.print(F("UP "));
100 void KbdRptParser::OnKeyPressed(uint8_t key
) {
101 Serial
.print(F("ASCII: "));
102 Serial
.println((char)key
);