]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/examples/Bluetooth/BTHID/KeyboardParser.h
lufa: usb-usb: Use LUFA startup instead of cusotom
[max/tmk_keyboard.git] / tmk_core / 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