11
keypad.cpp
- Committer:
- gj_schoneveld
- Date:
- 2012-11-02
- Revision:
- 10:9a9ec143840b
- Parent:
- 0:2df66331c109
- Child:
- 11:a45e64141ce6
File content as of revision 10:9a9ec143840b:
#include "keypad.h" Keypad::Keypad(PinName row3, PinName row2, PinName row1, PinName row0, PinName col3, PinName col2, PinName col1, PinName col0, int debounce_ms): _row0(row0), _row1(row1), _row2(row2), _row3(row3), _cols(col0, col1, col2, col3) { _debounce = debounce_ms; _row0.mode(PullUp); _row1.mode(PullUp); _row2.mode(PullUp); _row3.mode(PullUp); _cols.mode(OpenDrain); _cols.output(); _setupFallTrigger(); } void Keypad::Start(void) { _cols = 0x00; } void Keypad::Stop(void) { _cols = 0x0F; } void Keypad::CallAfterInput(uint32_t (*fptr)(uint32_t index)) { _input.attach(fptr); } void Keypad::_callback(int row, InterruptIn &therow) { wait_ms(_debounce); if (therow != 0) return; int c = -1; _cols = 0x0E; if (therow == 0) c = 0; else { _cols = 0x0D; if (therow == 0) c = 1; else { _cols = 0x0B; if (therow == 0) c = 2; else c = 3; } } _input.call(row * 4 + c); Start(); // Re-energize all columns } void Keypad::_cbRow0Fall(void) { _callback(0, _row0); } void Keypad::_cbRow1Fall(void) { _callback(1, _row1); } void Keypad::_cbRow2Fall(void) { _callback(2, _row2); } void Keypad::_cbRow3Fall(void) { _callback(3, _row3); } void Keypad::_setupFallTrigger(void) { _row0.fall(this, &Keypad::_cbRow0Fall); _row1.fall(this, &Keypad::_cbRow1Fall); _row2.fall(this, &Keypad::_cbRow2Fall); _row3.fall(this, &Keypad::_cbRow3Fall); }