diff --git a/firmware/application/touch.cpp b/firmware/application/touch.cpp index 681c2518..a0c77a25 100644 --- a/firmware/application/touch.cpp +++ b/firmware/application/touch.cpp @@ -81,16 +81,21 @@ void Manager::feed(const Frame& frame) { const auto touch_raw = frame.touch; //const auto touch_stable = touch_debounce.state(); const auto touch_stable = frame.touch; - bool touch_pressure = false; + bool touch_down_pressure = false; + bool touch_up_pressure = false; // Only feed coordinate averaging if there's a touch. // TODO: Separate threshold to gate coordinates for filtering? if( touch_raw ) { const auto metrics = calculate_metrics(frame); - // TODO: Add touch pressure hysteresis? - touch_pressure = (metrics.r < r_touch_threshold); - if( touch_pressure ) { + constexpr float r_touch_down_threshold = 3200.0f; + constexpr float r_touch_up_threshold = r_touch_down_threshold * 2.0f; + + touch_down_pressure = (metrics.r < r_touch_down_threshold); + touch_up_pressure = (metrics.r < r_touch_up_threshold); + + if( touch_down_pressure ) { filter_x.feed(metrics.x * 1024); filter_y.feed(metrics.y * 1024); } @@ -101,7 +106,7 @@ void Manager::feed(const Frame& frame) { switch(state) { case State::NoTouch: - if( touch_stable && touch_pressure && !persistent_memory::disable_touchscreen()) { + if( touch_stable && touch_down_pressure && !persistent_memory::disable_touchscreen()) { if( point_stable() ) { state = State::TouchDetected; touch_started(); @@ -110,7 +115,7 @@ void Manager::feed(const Frame& frame) { break; case State::TouchDetected: - if( touch_stable && touch_pressure ) { + if( touch_stable && touch_up_pressure ) { touch_moved(); } else { state = State::NoTouch; diff --git a/firmware/application/touch.hpp b/firmware/application/touch.hpp index 7fa1c029..4aa18297 100644 --- a/firmware/application/touch.hpp +++ b/firmware/application/touch.hpp @@ -219,7 +219,6 @@ private: TouchDetected, }; - static constexpr float r_touch_threshold = 640; static constexpr size_t touch_count_threshold { 3 }; static constexpr uint32_t touch_stable_bound { 8 };