From 8820df1a85be73980156fe546633249d2eff7ee5 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Fri, 30 Oct 2026 22:30:01 -0400 Subject: [PATCH] Debounce shake to submit --- src/c/main.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/c/main.c b/src/c/main.c index deca674..585b279 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -65,6 +65,7 @@ static uint8_t s_current_triangle_num; static uint8_t s_solution_indices[3]; static uint8_t s_selected_indices[3] = {9, 9, 9}; static uint8_t s_secs_since_last_input; +static uint8_t s_shake_cooldown; static uint8_t s_countdown_int = 0; static char s_countdown_buf[4]; static char s_progress_buf[9]; @@ -77,6 +78,7 @@ static const GRect s_bottom_bar_grect = GRect(0, PBL_DISPLAY_HEIGHT - s_edge_bar static const GColor s_primary_color = GColorJaegerGreen; //// alarm #define MAX_SECS_WITHOUT_INPUT 10 +#define SHAKE_COOLDOWN_SECS 2 static const uint8_t s_drop_height = 22; static const GRect s_drop_function_grect = GRect(PBL_IF_ROUND_ELSE(55, 45), s_bottom_bar_grect.origin.y + ((s_bottom_bar_grect.size.h / 2) - PBL_IF_ROUND_ELSE(s_drop_height - 1, s_drop_height / 2)), 50, s_drop_height); static const GRect s_drop_over_grect = GRect(s_drop_function_grect.origin.x + 78, s_drop_function_grect.origin.y - 13, s_drop_function_grect.size.w + 1, s_drop_function_grect.size.h); @@ -446,10 +448,23 @@ static void update_for_new_triangle() { text_layer_set_text(s_progress_txt_layer, s_progress_buf); } +static void increment_secs_since_last_input() { + if (s_secs_since_last_input < 10) { + s_secs_since_last_input++; + } +} + +static void decrement_shake_cooldown() { + if (s_shake_cooldown != 0) { + s_shake_cooldown--; + } +} + static void alarm_seconds_handler(struct tm *tick_time, TimeUnits units_changed) { s_countdown_int--; + decrement_shake_cooldown(); if (s_current_triangle_num == 1) { - s_secs_since_last_input++; + increment_secs_since_last_input(); if (s_secs_since_last_input >= MAX_SECS_WITHOUT_INPUT) { // pause vibrations during user input; this fixes shake detection and saves battery vibes_enqueue_custom_pattern(s_first_triangle_vibe_pattern); } @@ -460,9 +475,8 @@ static void alarm_seconds_handler(struct tm *tick_time, TimeUnits units_changed) send_zap(settings.PavlokIntensity); if (s_current_triangle_num > 1) { s_current_triangle_num--; - } else { - s_secs_since_last_input = 10; } + s_secs_since_last_input = 10; right_triangle_layer_regen(s_triangle_layer); update_for_new_triangle(); } @@ -521,6 +535,10 @@ static void alarm_select_click_handler(void *recognizer, void *ctx) { } static void accel_tap_handler(AccelAxisType axis, int32_t direction) { + if (s_shake_cooldown != 0) { + return; + } + // check solution for (int i = 0; i < 3; ++i) { if (s_selected_indices[i] != s_solution_indices[i]) { @@ -542,6 +560,8 @@ static void accel_tap_handler(AccelAxisType axis, int32_t direction) { update_for_new_triangle(); } } + + s_shake_cooldown = SHAKE_COOLDOWN_SECS; } static void alarm_click_config_provider(void *ctx) {