Don't detect center button touch until 250ms after wheel touch

custom
Rockwell Schrock 10 months ago
parent b98e67972b
commit 6c323f0fd0
No known key found for this signature in database
GPG Key ID: 528442AF0A5E86BF
  1. 13
      src/tangara/input/input_touch_wheel.cpp
  2. 3
      src/tangara/input/input_touch_wheel.hpp

@ -21,6 +21,8 @@
#include "lua/property.hpp"
#include "ui/ui_events.hpp"
#include "esp_timer.h"
namespace input {
TouchWheel::TouchWheel(drivers::NvsStorage& nvs, drivers::TouchWheel& wheel)
@ -77,7 +79,16 @@ auto TouchWheel::read(lv_indev_data_t* data) -> void {
data->enc_diff = 0;
}
centre_.update(wheel_data.is_button_touched && !wheel_data.is_wheel_touched,
// Prevent accidental center button touches while scrolling
if (wheel_data.is_wheel_touched) {
last_wheel_touch_time_ = esp_timer_get_time();
}
bool wheel_touch_timed_out =
esp_timer_get_time() - last_wheel_touch_time_ > SCROLL_TIMEOUT_US;
centre_.update(wheel_touch_timed_out && wheel_data.is_button_touched &&
!wheel_data.is_wheel_touched,
data);
// If the user is touching the wheel but not scrolling, then they may be

@ -36,6 +36,8 @@ class TouchWheel : public IInputDevice {
auto sensitivity() -> lua::Property&;
private:
const int64_t SCROLL_TIMEOUT_US = 250000; // 250ms
auto calculateTicks(const drivers::TouchWheelData& data) -> int8_t;
auto calculateThreshold(uint8_t sensitivity) -> uint8_t;
@ -55,6 +57,7 @@ class TouchWheel : public IInputDevice {
uint8_t threshold_;
bool is_first_read_;
uint8_t last_angle_;
int64_t last_wheel_touch_time_;
};
} // namespace input

Loading…
Cancel
Save