]> git.earman.xyz Git - sensor-watch.git/commitdiff
movement: add tick animation in sleep mode
authorJoey Castillo <jose.castillo@gmail.com>
Tue, 19 Oct 2021 19:37:08 +0000 (15:37 -0400)
committerJoey Castillo <jose.castillo@gmail.com>
Tue, 19 Oct 2021 19:37:08 +0000 (15:37 -0400)
movement/watch_faces/clock/simple_clock_face.c
watch-library/watch/watch_slcd.c
watch-library/watch/watch_slcd.h

index 70e350475032bf26eed4d804fe7b3aef2184d2dc..e1e8203135f48e653db13942536b654ce82b240f 100644 (file)
@@ -9,9 +9,10 @@ void simple_clock_face_setup(movement_settings_t *settings, void ** context_ptr)
 }
 
 void simple_clock_face_activate(movement_settings_t *settings, void *context) {
-    if (settings->bit.clock_mode_24h) {
-        watch_set_indicator(WATCH_INDICATOR_24H);
-    }
+    if (watch_tick_animation_is_running()) watch_stop_tick_animation();
+
+    if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+
     watch_set_colon();
     // this ensures that none of the timestamp fields will match, so we can re-render them all.
     *((uint32_t *)context) = 0xFFFFFFFF;
@@ -55,6 +56,7 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting
                 }
                 pos = 0;
                 if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
+                    if (!watch_tick_animation_is_running()) watch_start_tick_animation(500);
                     sprintf(buf, "%s%2d%2d%02d  ", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute);
                 } else {
                     sprintf(buf, "%s%2d%2d%02d%02d", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second);
index 08f8c0e30398067f3328a726d44b47f1be6997ed..6c63d9669c8eb0e1d48a01c5a6f5d47c000a74f5 100644 (file)
@@ -277,6 +277,10 @@ void watch_start_tick_animation(uint32_t duration) {
     slcd_sync_start_animation(&SEGMENT_LCD_0, segs, 1, duration);
 }
 
+bool watch_tick_animation_is_running() {
+    return hri_slcd_get_CTRLD_CSREN_bit(SLCD);
+}
+
 void watch_stop_tick_animation() {
     const uint32_t segs[] = { SLCD_SEGID(0, 2)};
     slcd_sync_stop_animation(&SEGMENT_LCD_0, segs, 1);
index e18ee9b45ededcf196fc1620b5c068cc675806ac..724d3dde00b36ef3ff02f2d88f3c663ed5730316 100644 (file)
@@ -138,6 +138,11 @@ void watch_stop_blink();
   */
 void watch_start_tick_animation(uint32_t duration);
 
+/** @brief Checks if the tick animation is currently running.
+  * @return true if the animation is running; false otherwise.
+  */
+bool watch_tick_animation_is_running();
+
 /** @brief Stops the tick/tock animation and clears all animating segments.
   * @details This will stop the animation and clear all segments in position 8.
   */