The iPod controller that I submitted for the mbed challenge
Dependencies: mbed Motordriver PID
user_interface/keybrd.h@0:371773dd3dd1, 2011-05-04 (annotated)
- Committer:
- networker
- Date:
- Wed May 04 15:41:13 2011 +0000
- Revision:
- 0:371773dd3dd1
first publication
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
networker | 0:371773dd3dd1 | 1 | #ifndef HEYBRD_H |
networker | 0:371773dd3dd1 | 2 | #define KEYBRD_H |
networker | 0:371773dd3dd1 | 3 | #include "mbed.h" |
networker | 0:371773dd3dd1 | 4 | #include "MCP23017.h" |
networker | 0:371773dd3dd1 | 5 | |
networker | 0:371773dd3dd1 | 6 | class keybrd{ |
networker | 0:371773dd3dd1 | 7 | public: |
networker | 0:371773dd3dd1 | 8 | enum event { none, keydown, keyup, posdown, posup }; |
networker | 0:371773dd3dd1 | 9 | typedef void (*eventhandler)(event ev, char key); |
networker | 0:371773dd3dd1 | 10 | private: |
networker | 0:371773dd3dd1 | 11 | eventhandler _eventhandler; |
networker | 0:371773dd3dd1 | 12 | // DigitalOut *inirq; //for test only |
networker | 0:371773dd3dd1 | 13 | protected: |
networker | 0:371773dd3dd1 | 14 | MCP23017& _intf; |
networker | 0:371773dd3dd1 | 15 | InterruptIn *intr; //should be moved to MCP23017 |
networker | 0:371773dd3dd1 | 16 | virtual void handler(); |
networker | 0:371773dd3dd1 | 17 | char _keys; |
networker | 0:371773dd3dd1 | 18 | char _lastkey; |
networker | 0:371773dd3dd1 | 19 | event _lastevent; |
networker | 0:371773dd3dd1 | 20 | int _pos, _oldpos, _min, _max; |
networker | 0:371773dd3dd1 | 21 | char _state; |
networker | 0:371773dd3dd1 | 22 | bool wrap; |
networker | 0:371773dd3dd1 | 23 | void handleEvent(event ev, char key) { _lastevent = ev; if (_eventhandler) _eventhandler(ev, key); } |
networker | 0:371773dd3dd1 | 24 | public: |
networker | 0:371773dd3dd1 | 25 | keybrd(MCP23017& intf, PinName p); |
networker | 0:371773dd3dd1 | 26 | ~keybrd() { intr->fall(0); delete intr;} |
networker | 0:371773dd3dd1 | 27 | void attach(eventhandler eh) { _eventhandler = eh;} |
networker | 0:371773dd3dd1 | 28 | char getc() { return _lastkey;} |
networker | 0:371773dd3dd1 | 29 | int getpos() { return _pos>>2; } |
networker | 0:371773dd3dd1 | 30 | void setpos(int p) { _pos = p<<2;} |
networker | 0:371773dd3dd1 | 31 | void setposrange(int min, int max, bool w = false) { _min = min<<2; if (_pos<_min) _pos = _min; _max = max<<2; if (_pos>_max) _pos = _max; wrap = w;} |
networker | 0:371773dd3dd1 | 32 | event getevent(bool clear = false) { event e = _lastevent; if (clear) _lastevent = none; return e;} |
networker | 0:371773dd3dd1 | 33 | unsigned short get(); |
networker | 0:371773dd3dd1 | 34 | unsigned short raw;//debug |
networker | 0:371773dd3dd1 | 35 | }; |
networker | 0:371773dd3dd1 | 36 | |
networker | 0:371773dd3dd1 | 37 | #endif |