diff options
| author | ailurux <ailuruxx@gmail.com> | 2024-05-10 13:06:20 +1000 |
|---|---|---|
| committer | ailurux <ailuruxx@gmail.com> | 2024-05-10 13:06:20 +1000 |
| commit | 3f177cdb8880abf199f4445f1398cd69fb813892 (patch) | |
| tree | e20de4949b1344c826e5af41ab701f3db75b21bc /src/input/input_trigger.cpp | |
| parent | 8019c7691889cde4c3d40bbd78d485a92d713bbf (diff) | |
| parent | e4ce7c4ac23402e09be8d6a52e0f739c0dff4ff0 (diff) | |
| download | tangara-fw-3f177cdb8880abf199f4445f1398cd69fb813892.tar.gz | |
Merge branch 'main' into file-browser
Diffstat (limited to 'src/input/input_trigger.cpp')
| -rw-r--r-- | src/input/input_trigger.cpp | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/src/input/input_trigger.cpp b/src/input/input_trigger.cpp deleted file mode 100644 index 9485ecb4..00000000 --- a/src/input/input_trigger.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2024 jacqueline <me@jacqueline.id.au> - * - * SPDX-License-Identifier: GPL-3.0-only - */ - -#include "input_trigger.hpp" -#include <sys/_stdint.h> - -#include <cstdint> -#include "esp_log.h" -#include "esp_timer.h" - -namespace input { - -Trigger::Trigger() : touch_time_ms_(), times_fired_(0) {} - -auto Trigger::update(bool is_pressed) -> State { - // Bail out early if we're in a steady-state of not pressed. - if (!is_pressed && !touch_time_ms_) { - return State::kNone; - } - - uint64_t now_ms = esp_timer_get_time() / 1000; - - // Initial press of this key: record the current time, and report that we - // haven't triggered yet. - if (is_pressed && !touch_time_ms_) { - touch_time_ms_ = now_ms; - times_fired_ = 0; - return State::kNone; - } - - // The key was released. If there were no long-press events fired during the - // press, then this was a standard click. - if (!is_pressed && touch_time_ms_) { - touch_time_ms_.reset(); - if (times_fired_ == 0) { - return State::kClick; - } else { - return State::kNone; - } - } - - // Now the more complicated case: the user is continuing to press the button. - if (times_fired_ == 0) { - // We haven't fired yet, so we wait for the long-press event. - if (now_ms - *touch_time_ms_ >= kLongPressDelayMs) { - times_fired_++; - return State::kLongPress; - } - } else { - // We've already fired at least once. How long has the user been holding - // the key for? - uint64_t time_since_long_press = - now_ms - (*touch_time_ms_ + kLongPressDelayMs); - - // How many times should we have fired? - // 1 initial fire (for the long-press), plus one additional fire every - // kRepeatDelayMs since the long-press event. - uint16_t expected_times_fired = - 1 + (time_since_long_press / kRepeatDelayMs); - if (times_fired_ < expected_times_fired) { - times_fired_++; - return State::kRepeatPress; - } - } - - return State::kNone; -} - -} // namespace input |
