The iPod controller that I submitted for the mbed challenge

Dependencies:   mbed Motordriver PID

Committer:
networker
Date:
Wed May 04 15:41:13 2011 +0000
Revision:
0:371773dd3dd1
first publication

Who changed what in which revision?

UserRevisionLine numberNew 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