The iPod controller that I submitted for the mbed challenge

Dependencies:   mbed Motordriver PID

Revision:
0:371773dd3dd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/user_interface/keybrd.h	Wed May 04 15:41:13 2011 +0000
@@ -0,0 +1,37 @@
+#ifndef HEYBRD_H
+#define KEYBRD_H
+#include "mbed.h"
+#include "MCP23017.h"
+
+class keybrd{
+public:
+  enum event { none, keydown, keyup, posdown, posup };
+  typedef void (*eventhandler)(event ev, char key);
+private:
+  eventhandler _eventhandler;
+ // DigitalOut *inirq;  //for test only  
+protected:
+  MCP23017& _intf;
+  InterruptIn *intr; //should be moved to MCP23017
+  virtual void handler();
+  char _keys;
+  char _lastkey;
+  event _lastevent;
+  int _pos, _oldpos, _min, _max;
+  char _state;
+  bool wrap;
+  void handleEvent(event ev, char key) { _lastevent = ev; if (_eventhandler) _eventhandler(ev, key); }  
+public:
+  keybrd(MCP23017& intf, PinName p);
+  ~keybrd() { intr->fall(0); delete intr;}
+  void attach(eventhandler eh) { _eventhandler = eh;}
+  char getc() { return _lastkey;}
+  int getpos() { return _pos>>2; }
+  void setpos(int p) { _pos = p<<2;}
+  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;}
+  event getevent(bool clear = false) { event e = _lastevent; if (clear) _lastevent = none; return e;}
+  unsigned short get();
+  unsigned short raw;//debug
+};
+
+#endif
\ No newline at end of file