Line data Source code
1 : #include "IncrementButton.hpp"
2 :
3 : BEGIN_AH_NAMESPACE
4 :
5 16 : IncrementButton::State IncrementButton::updateImplementation() {
6 16 : Button::State incrState = button.update();
7 :
8 16 : if (incrState == Button::Released) {
9 : // Button released, don't do anything
10 : // This one is first to minimize overhead
11 : // because most of the time, the button will
12 : // be released
13 2 : return Nothing;
14 14 : } else if (incrState == Button::Rising) {
15 4 : auto res = longPressState == LongPress ? ReleasedLong : ReleasedShort;
16 4 : longPressState = Initial;
17 4 : return res;
18 10 : } else if (incrState == Button::Falling) {
19 5 : return IncrementShort;
20 : } else { // if (incrState == Button::Pressed)
21 5 : auto now = millis();
22 5 : if (longPressState == LongPress) {
23 : // still long pressed
24 2 : if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
25 1 : longPressRepeat += LONG_PRESS_REPEAT_DELAY;
26 1 : return IncrementHold;
27 : }
28 3 : } else if (button.stableTime(now) >= LONG_PRESS_DELAY) {
29 : // long press starts
30 1 : longPressState = LongPress;
31 1 : longPressRepeat = now;
32 1 : return IncrementLong;
33 : }
34 : }
35 3 : return Nothing;
36 : }
37 :
38 : END_AH_NAMESPACE
|