lib/keypad/Keypad.h

Thu, 07 Oct 2021 21:05:13 +0200

author
David Douard <david.douard@sdfa3.org>
date
Thu, 07 Oct 2021 21:05:13 +0200
changeset 67
e19b4147caa9
parent 66
48f29a1d43d6
permissions
-rw-r--r--

Reduce the sleep time of the send_pending_key thread to 1ms

to get a chance of sending a keycode when the CPU flood the FP with DSP
messages (e.g. after the last 'Last-N' value).

#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