The iPod controller that I submitted for the mbed challenge

Dependencies:   mbed Motordriver PID

user_interface/keybrd.h

Committer:
networker
Date:
2011-05-04
Revision:
0:371773dd3dd1

File content as of revision 0:371773dd3dd1:

#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