diff --git a/src/c/main.c b/src/c/main.c index f57f7ad..f24c1f7 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -753,11 +753,14 @@ static void alarm_window_load() { (WindowHandlers){.load = drop_menu_window_load, .unload = drop_menu_window_unload}); // setup vibes - s_vibe_segments[0] = (uint32_t)(s_triangle_layer->angle_A * 2); - s_vibe_segments[1] = 200; - s_vibe_segments[2] = (uint32_t)(s_triangle_layer->angle_B * 2); - s_vibe_segments[3] = 200; - s_vibe_segments[4] = (uint32_t)(s_triangle_layer->angle_C * 2); + static const uint32_t VIBE_ON_FLOOR = 120; // ms: below this the motor never spins up + static const uint32_t VIBE_ON_SCALE = 4; + static const uint32_t VIBE_GAP = 40; // short off-time -> reads as continuous buzzing + s_vibe_segments[0] = VIBE_ON_FLOOR + (uint32_t)s_triangle_layer->angle_A * VIBE_ON_SCALE; + s_vibe_segments[1] = VIBE_GAP; + s_vibe_segments[2] = VIBE_ON_FLOOR + (uint32_t)s_triangle_layer->angle_B * VIBE_ON_SCALE; + s_vibe_segments[3] = VIBE_GAP; + s_vibe_segments[4] = VIBE_ON_FLOOR + (uint32_t)s_triangle_layer->angle_C * VIBE_ON_SCALE; s_vibe_pattern = (VibePattern){ .durations = s_vibe_segments, .num_segments = ARRAY_LENGTH(s_vibe_segments), @@ -791,6 +794,7 @@ static void alarm_window_load() { } static void alarm_window_unload() { + vibes_cancel(); tick_timer_service_unsubscribe(); text_layer_destroy(s_countdown_txt_layer); window_destroy(s_drop_window); @@ -827,7 +831,7 @@ static void push_alarm_window() { [[fallthrough]]; case WAKE_AWARENESS_ALARM: s_awareness_zap_intensity = persist_read_int(STORAGE_KEY_PAVLOK_INTENSITY); - vibes_short_pulse(); + vibes_long_pulse(); break; default: break;