]> git.gir.st - tmk_keyboard.git/blob - protocol/usb_hid/USB_Host_Shield_2.0/examples/Bluetooth/BTHID/KeyboardParser.h
Squashed 'tmk_core/' changes from caca2c0..dc0e46e
[tmk_keyboard.git] / protocol / usb_hid / USB_Host_Shield_2.0 / examples / Bluetooth / BTHID / KeyboardParser.h
1 #ifndef __kbdrptparser_h_
2 #define __kbdrptparser_h_
3
4 class KbdRptParser : public KeyboardReportParser {
5 protected:
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);
11
12 private:
13 void PrintKey(uint8_t mod, uint8_t key);
14 };
15
16 uint8_t KbdRptParser::HandleLockingKeys(HID *hid, uint8_t key) {
17 uint8_t old_keys = kbdLockingKeys.bLeds;
18
19 switch (key) {
20 case UHS_HID_BOOT_KEY_NUM_LOCK:
21 Serial.println(F("Num lock"));
22 kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
23 break;
24 case UHS_HID_BOOT_KEY_CAPS_LOCK:
25 Serial.println(F("Caps lock"));
26 kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
27 break;
28 case UHS_HID_BOOT_KEY_SCROLL_LOCK:
29 Serial.println(F("Scroll lock"));
30 kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
31 break;
32 }
33
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
37 }
38
39 return 0;
40 };
41
42 void KbdRptParser::PrintKey(uint8_t m, uint8_t key) {
43 MODIFIERKEYS mod;
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(" "));
49
50 Serial.print(F(" >"));
51 PrintHex<uint8_t>(key, 0x80);
52 Serial.print(F("< "));
53
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(" "));
58 };
59
60 void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key) {
61 Serial.print(F("DN "));
62 PrintKey(mod, key);
63 uint8_t c = OemToAscii(mod, key);
64
65 if (c)
66 OnKeyPressed(c);
67 };
68
69 void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {
70 MODIFIERKEYS beforeMod;
71 *((uint8_t*)&beforeMod) = before;
72
73 MODIFIERKEYS afterMod;
74 *((uint8_t*)&afterMod) = after;
75
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"));
84
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"));
93 };
94
95 void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key) {
96 Serial.print(F("UP "));
97 PrintKey(mod, key);
98 };
99
100 void KbdRptParser::OnKeyPressed(uint8_t key) {
101 Serial.print(F("ASCII: "));
102 Serial.println((char)key);
103 };
104
105 #endif
Imprint / Impressum