39 lines
1.2 KiB
C++
39 lines
1.2 KiB
C++
#include "IncrementButton.hpp"
|
|
|
|
BEGIN_AH_NAMESPACE
|
|
|
|
IncrementButton::State IncrementButton::updateImplementation() {
|
|
Button::State incrState = button.update();
|
|
|
|
if (incrState == Button::Released) {
|
|
// Button released, don't do anything
|
|
// This one is first to minimize overhead
|
|
// because most of the time, the button will
|
|
// be released
|
|
return Nothing;
|
|
} else if (incrState == Button::Rising) {
|
|
auto res = longPressState == LongPress ? ReleasedLong : ReleasedShort;
|
|
longPressState = Initial;
|
|
return res;
|
|
} else if (incrState == Button::Falling) {
|
|
return IncrementShort;
|
|
} else { // if (incrState == Button::Pressed)
|
|
auto now = millis();
|
|
if (longPressState == LongPress) {
|
|
// still long pressed
|
|
if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
|
|
longPressRepeat += LONG_PRESS_REPEAT_DELAY;
|
|
return IncrementHold;
|
|
}
|
|
} else if (button.stableTime(now) >= LONG_PRESS_DELAY) {
|
|
// long press starts
|
|
longPressState = LongPress;
|
|
longPressRepeat = now;
|
|
return IncrementLong;
|
|
}
|
|
}
|
|
return Nothing;
|
|
}
|
|
|
|
END_AH_NAMESPACE
|