lib/keypad/Keypad.h

Mon, 23 Nov 2020 21:55:40 +0100

author
David Douard <david.douard@sdf3.org>
date
Mon, 23 Nov 2020 21:55:40 +0100
changeset 57
cce151e4bf3d
parent 26
86f099bda525
child 66
48f29a1d43d6
permissions
-rw-r--r--

Small fixes in main

- toggle the shift indicator when the key is pressed while already on
- attempt to fix the restart-while-shuting-down bug


#ifndef KEYPAD_H
#define KEYPAD_H

#include "mbed.h"
//#include "rtos.h"
#include <vector>



typedef Callback<void(uint8_t, uint8_t)> keyevent_callback_t;

class Keypad {
public:
  Keypad(uint8_t nRows, DigitalIn rows[],
	 uint8_t nColumns, DigitalOut cols[],
	 int debounce_ms=20);

  /** Destructor
   */
  ~Keypad();

  void attach(const keyevent_callback_t& kp_callback=NULL,
	      const keyevent_callback_t& kr_callback=NULL);

  void start(void);
  void stop(void);


protected:
  std::vector<DigitalIn> _rows;
  std::vector<DigitalOut> _columns;
  int              _debounce;  // miliseconds

  void _kp();
  void _kr();
  void _keyPressed(int row);
  void _keyReleased(int row);
  void run();

private:
  keyevent_callback_t _kp_callback;
  keyevent_callback_t _kr_callback;
  bool _started;
  Thread _loop;
  //tloop.start(&loop);
  uint8_t _nrows;
  uint8_t _ncols;
  uint8_t *_keys;
};


#endif // KEYPAD_H

mercurial