Code for Doug, Elizabeth, and Maruchi's team project: a Mario Kart controller.
Dependencies: PinDetect USBDevice mbed
KeyManager.h@0:0c8c5c9f7586, 2014-09-29 (annotated)
- Committer:
- douglasc
- Date:
- Mon Sep 29 06:55:14 2014 +0000
- Revision:
- 0:0c8c5c9f7586
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
douglasc | 0:0c8c5c9f7586 | 1 | /** |
douglasc | 0:0c8c5c9f7586 | 2 | * Class KeyManager |
douglasc | 0:0c8c5c9f7586 | 3 | * |
douglasc | 0:0c8c5c9f7586 | 4 | * This class tracks the state of the four input |
douglasc | 0:0c8c5c9f7586 | 5 | * buttons and returns state information and |
douglasc | 0:0c8c5c9f7586 | 6 | * mappings. |
douglasc | 0:0c8c5c9f7586 | 7 | * |
douglasc | 0:0c8c5c9f7586 | 8 | */ |
douglasc | 0:0c8c5c9f7586 | 9 | |
douglasc | 0:0c8c5c9f7586 | 10 | #ifndef KEYMANAGER |
douglasc | 0:0c8c5c9f7586 | 11 | #define KEYMANAGER |
douglasc | 0:0c8c5c9f7586 | 12 | |
douglasc | 0:0c8c5c9f7586 | 13 | #include <string> |
douglasc | 0:0c8c5c9f7586 | 14 | #include <ctype.h> |
douglasc | 0:0c8c5c9f7586 | 15 | |
douglasc | 0:0c8c5c9f7586 | 16 | class KeyManager { |
douglasc | 0:0c8c5c9f7586 | 17 | private: |
douglasc | 0:0c8c5c9f7586 | 18 | // key definitions |
douglasc | 0:0c8c5c9f7586 | 19 | bool keyA; |
douglasc | 0:0c8c5c9f7586 | 20 | bool keyB; |
douglasc | 0:0c8c5c9f7586 | 21 | bool keyC; |
douglasc | 0:0c8c5c9f7586 | 22 | bool keyZ; |
douglasc | 0:0c8c5c9f7586 | 23 | |
douglasc | 0:0c8c5c9f7586 | 24 | public: |
douglasc | 0:0c8c5c9f7586 | 25 | |
douglasc | 0:0c8c5c9f7586 | 26 | // constructor |
douglasc | 0:0c8c5c9f7586 | 27 | KeyManager() { |
douglasc | 0:0c8c5c9f7586 | 28 | keyA = false; |
douglasc | 0:0c8c5c9f7586 | 29 | keyB = false; |
douglasc | 0:0c8c5c9f7586 | 30 | keyC = false; |
douglasc | 0:0c8c5c9f7586 | 31 | keyZ = false; |
douglasc | 0:0c8c5c9f7586 | 32 | } |
douglasc | 0:0c8c5c9f7586 | 33 | |
douglasc | 0:0c8c5c9f7586 | 34 | // DEBUG: return the status of which keys are pressed |
douglasc | 0:0c8c5c9f7586 | 35 | char* getStatusString() { |
douglasc | 0:0c8c5c9f7586 | 36 | std::string status = "the following keys are pressed:"; |
douglasc | 0:0c8c5c9f7586 | 37 | if (keyA) { |
douglasc | 0:0c8c5c9f7586 | 38 | status += " A"; |
douglasc | 0:0c8c5c9f7586 | 39 | } |
douglasc | 0:0c8c5c9f7586 | 40 | if (keyB) { |
douglasc | 0:0c8c5c9f7586 | 41 | status += " B"; |
douglasc | 0:0c8c5c9f7586 | 42 | } |
douglasc | 0:0c8c5c9f7586 | 43 | if (keyC) { |
douglasc | 0:0c8c5c9f7586 | 44 | status += " C"; |
douglasc | 0:0c8c5c9f7586 | 45 | } |
douglasc | 0:0c8c5c9f7586 | 46 | if (keyZ) { |
douglasc | 0:0c8c5c9f7586 | 47 | status += " Z"; |
douglasc | 0:0c8c5c9f7586 | 48 | } |
douglasc | 0:0c8c5c9f7586 | 49 | status += "\n"; |
douglasc | 0:0c8c5c9f7586 | 50 | return (char*)status.c_str(); |
douglasc | 0:0c8c5c9f7586 | 51 | } |
douglasc | 0:0c8c5c9f7586 | 52 | |
douglasc | 0:0c8c5c9f7586 | 53 | // map the current code to its character |
douglasc | 0:0c8c5c9f7586 | 54 | char getCharacter() { |
douglasc | 0:0c8c5c9f7586 | 55 | if (keyA) { |
douglasc | 0:0c8c5c9f7586 | 56 | return 'a'; |
douglasc | 0:0c8c5c9f7586 | 57 | } |
douglasc | 0:0c8c5c9f7586 | 58 | if (keyB) { |
douglasc | 0:0c8c5c9f7586 | 59 | return 'b'; |
douglasc | 0:0c8c5c9f7586 | 60 | } |
douglasc | 0:0c8c5c9f7586 | 61 | if (keyC) { |
douglasc | 0:0c8c5c9f7586 | 62 | return 'c'; |
douglasc | 0:0c8c5c9f7586 | 63 | } |
douglasc | 0:0c8c5c9f7586 | 64 | if (keyZ) { |
douglasc | 0:0c8c5c9f7586 | 65 | return 'z'; |
douglasc | 0:0c8c5c9f7586 | 66 | } |
douglasc | 0:0c8c5c9f7586 | 67 | return '?'; |
douglasc | 0:0c8c5c9f7586 | 68 | } |
douglasc | 0:0c8c5c9f7586 | 69 | |
douglasc | 0:0c8c5c9f7586 | 70 | // check whether any of the character keys or the space |
douglasc | 0:0c8c5c9f7586 | 71 | // key are pressed |
douglasc | 0:0c8c5c9f7586 | 72 | bool keysPressed() { |
douglasc | 0:0c8c5c9f7586 | 73 | if (keyA || keyB || keyC || keyZ) { |
douglasc | 0:0c8c5c9f7586 | 74 | return true; |
douglasc | 0:0c8c5c9f7586 | 75 | } |
douglasc | 0:0c8c5c9f7586 | 76 | return false; |
douglasc | 0:0c8c5c9f7586 | 77 | } |
douglasc | 0:0c8c5c9f7586 | 78 | |
douglasc | 0:0c8c5c9f7586 | 79 | // Interrupt callback functions |
douglasc | 0:0c8c5c9f7586 | 80 | void keyAOn() { keyA = true; } |
douglasc | 0:0c8c5c9f7586 | 81 | void keyAOff() { keyA = false; } |
douglasc | 0:0c8c5c9f7586 | 82 | void keyBOn() { keyB = true; } |
douglasc | 0:0c8c5c9f7586 | 83 | void keyBOff() { keyB = false; } |
douglasc | 0:0c8c5c9f7586 | 84 | void keyCOn() { keyC = true; } |
douglasc | 0:0c8c5c9f7586 | 85 | void keyCOff() { keyC = false; } |
douglasc | 0:0c8c5c9f7586 | 86 | void keyZOn() { keyZ = true; } |
douglasc | 0:0c8c5c9f7586 | 87 | void keyZOff() { keyZ = false; } |
douglasc | 0:0c8c5c9f7586 | 88 | |
douglasc | 0:0c8c5c9f7586 | 89 | }; |
douglasc | 0:0c8c5c9f7586 | 90 | |
douglasc | 0:0c8c5c9f7586 | 91 | #endif |