Mark Peter Vargha / Button
Committer:
vargham
Date:
Tue Feb 14 13:00:47 2017 +0000
Revision:
0:a39041955963
Child:
1:3385a1ea4a7d
Button class with auto repeat function.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vargham 0:a39041955963 1 #include "Button.h"
vargham 0:a39041955963 2
vargham 0:a39041955963 3 void Button::isrFall(void)
vargham 0:a39041955963 4 {
vargham 0:a39041955963 5 if (_activeState == 0) onPress();
vargham 0:a39041955963 6 else onRelease();
vargham 0:a39041955963 7 }
vargham 0:a39041955963 8
vargham 0:a39041955963 9 void Button::isrRise(void)
vargham 0:a39041955963 10 {
vargham 0:a39041955963 11 if (_activeState == 0) onRelease();
vargham 0:a39041955963 12 else onPress();
vargham 0:a39041955963 13 }
vargham 0:a39041955963 14
vargham 0:a39041955963 15 void Button::onPress(void)
vargham 0:a39041955963 16 {
vargham 0:a39041955963 17 _timer.reset();
vargham 0:a39041955963 18 if (_prevState == 0) //First
vargham 0:a39041955963 19 {
vargham 0:a39041955963 20 _timer.start();
vargham 0:a39041955963 21 if (_fireUpDown) _onButtonEvent(BUTTON_DOWN, _pinName);
vargham 0:a39041955963 22 }
vargham 0:a39041955963 23 _autoRepeatStarter.detach();
vargham 0:a39041955963 24 if (_autoRepeatTime > 0) _autoRepeatStarter.attach(Callback<void()>(this, &Button::startAutoRepeat), (_longPressTime / 1000.0f));
vargham 0:a39041955963 25 _prevState = 1;
vargham 0:a39041955963 26 }
vargham 0:a39041955963 27
vargham 0:a39041955963 28 void Button::onRelease(void)
vargham 0:a39041955963 29 {
vargham 0:a39041955963 30 _timer.stop();
vargham 0:a39041955963 31 _tickerAutoRepeat.detach();
vargham 0:a39041955963 32 _autoRepeatStarter.detach();
vargham 0:a39041955963 33 if (_fireUpDown) _onButtonEvent(BUTTON_UP, _pinName);
vargham 0:a39041955963 34 if (_prevState == 1)
vargham 0:a39041955963 35 {
vargham 0:a39041955963 36 if (_timer.read_ms() >= _longPressTime) //Long press
vargham 0:a39041955963 37 {
vargham 0:a39041955963 38 _onButtonEvent(BUTTON_LONG_PRESS, _pinName);
vargham 0:a39041955963 39 }
vargham 0:a39041955963 40 else if (_timer.read_ms() >= _shortPressTime) //Short press
vargham 0:a39041955963 41 {
vargham 0:a39041955963 42 _onButtonEvent(BUTTON_PRESS, _pinName);
vargham 0:a39041955963 43 }
vargham 0:a39041955963 44 }
vargham 0:a39041955963 45 _prevState = 0;
vargham 0:a39041955963 46 _timer.reset();
vargham 0:a39041955963 47 }
vargham 0:a39041955963 48
vargham 0:a39041955963 49 void Button::startAutoRepeat(void)
vargham 0:a39041955963 50 {
vargham 0:a39041955963 51 _tickerAutoRepeat.detach();
vargham 0:a39041955963 52 if (_autoRepeatTime > 0) _tickerAutoRepeat.attach(Callback<void()>(this, &Button::autoRepeat), _autoRepeatTime);
vargham 0:a39041955963 53 }
vargham 0:a39041955963 54
vargham 0:a39041955963 55 void Button::autoRepeat(void)
vargham 0:a39041955963 56 {
vargham 0:a39041955963 57 _onButtonEvent(BUTTON_PRESS, _pinName);
vargham 0:a39041955963 58 }