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);