diff options
author | joeycastillo <joeycastillo@utexas.edu> | 2023-01-10 16:14:20 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-10 16:14:20 -0500 |
commit | 0aa77e27e4149fac6def8c8d86b00d9b47cf857a (patch) | |
tree | 1dfe40d7b6e1d00a047cdde68af6ff5e5128bc2c /movement/watch_faces | |
parent | 6ee84e7d6bc5ca00e9ef081f0c7892dca0c9fd88 (diff) | |
parent | c576f5332dabe09a1a84e38a085a310b28404199 (diff) | |
download | Sensor-Watch-0aa77e27e4149fac6def8c8d86b00d9b47cf857a.tar.gz Sensor-Watch-0aa77e27e4149fac6def8c8d86b00d9b47cf857a.tar.bz2 Sensor-Watch-0aa77e27e4149fac6def8c8d86b00d9b47cf857a.zip |
Merge pull request #119 from neutralinsomniac/add_hours_to_countdown_face
Add hours support to the countdown face
Diffstat (limited to 'movement/watch_faces')
-rw-r--r-- | movement/watch_faces/complication/countdown_face.c | 30 | ||||
-rw-r--r-- | movement/watch_faces/complication/countdown_face.h | 7 |
2 files changed, 25 insertions, 12 deletions
diff --git a/movement/watch_faces/complication/countdown_face.c b/movement/watch_faces/complication/countdown_face.c index 92400e66..b2206b8f 100644 --- a/movement/watch_faces/complication/countdown_face.c +++ b/movement/watch_faces/complication/countdown_face.c @@ -31,7 +31,7 @@ #include "watch_utility.h" -#define CD_SELECTIONS 2 +#define CD_SELECTIONS 3 #define DEFAULT_MINUTES 3 @@ -44,7 +44,7 @@ static void start(countdown_state_t *state, movement_settings_t *settings) { state->mode = cd_running; state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings)); - state->target_ts = watch_utility_offset_timestamp(state->now_ts, 0, state->minutes, state->seconds); + state->target_ts = watch_utility_offset_timestamp(state->now_ts, state->hours, state->minutes, state->seconds); watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, get_tz_offset(settings)); movement_schedule_background_task(target_dt); watch_set_indicator(WATCH_INDICATOR_BELL); @@ -55,28 +55,33 @@ static void draw(countdown_state_t *state, uint8_t subsecond) { uint32_t delta; div_t result; - uint8_t min, sec; + uint8_t hour, min, sec; switch (state->mode) { case cd_running: delta = state->target_ts - state->now_ts; result = div(delta, 60); - min = result.quot; sec = result.rem; + result = div(result.quot, 60); + hour = result.quot; + min = result.rem; - sprintf(buf, "CD %2d%02d", min, sec); + sprintf(buf, "CD %2d%02d%02d", hour, min, sec); break; case cd_waiting: - sprintf(buf, "CD %2d%02d", state->minutes, state->seconds); + sprintf(buf, "CD %2d%02d%02d", state->hours, state->minutes, state->seconds); break; case cd_setting: - sprintf(buf, "CD %2d%02d", state->minutes, state->seconds); + sprintf(buf, "CD %2d%02d%02d", state->hours, state->minutes, state->seconds); if (subsecond % 2) { switch(state->selection) { case 0: - buf[6] = buf[7] = ' '; + buf[4] = buf[5] = ' '; break; case 1: + buf[6] = buf[7] = ' '; + break; + case 2: buf[8] = buf[9] = ' '; break; default: @@ -102,9 +107,12 @@ static void ring(countdown_state_t *state) { static void settings_increment(countdown_state_t *state) { switch(state->selection) { case 0: - state->minutes = (state->minutes + 1) % 100; + state->hours = (state->hours + 1) % 24; break; case 1: + state->minutes = (state->minutes + 1) % 60; + break; + case 2: state->seconds = (state->seconds + 1) % 60; break; default: @@ -134,6 +142,7 @@ void countdown_face_activate(movement_settings_t *settings, void *context) { state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings)); watch_set_indicator(WATCH_INDICATOR_BELL); } + watch_set_colon(); } @@ -180,7 +189,7 @@ bool countdown_face_loop(movement_event_t event, movement_settings_t *settings, reset(state); break; case cd_waiting: - if (!(state->minutes == 0 && state->seconds == 0)) { + if (!(state->hours == 0 && state->minutes == 0 && state->seconds == 0)) { // Only start the timer if we have a valid time. start(state, settings); } @@ -196,6 +205,7 @@ bool countdown_face_loop(movement_event_t event, movement_settings_t *settings, break; case EVENT_ALARM_LONG_PRESS: if (state->mode == cd_setting) { + state->hours = 0; state->minutes = 0; state->seconds = 0; draw(state, event.subsecond); diff --git a/movement/watch_faces/complication/countdown_face.h b/movement/watch_faces/complication/countdown_face.h index 657c6377..f6c845d6 100644 --- a/movement/watch_faces/complication/countdown_face.h +++ b/movement/watch_faces/complication/countdown_face.h @@ -32,8 +32,10 @@ /* A countdown/timer face -Max countdown is 99 minutes and 59 seconds since we have to prevent the watch -from going to deep sleep using movement_schedule_background_task +Max countdown is 23 hours, 59 minutes and 59 seconds. + +Note: we have to prevent the watch from going to deep sleep using +movement_schedule_background_task() while the timer is running. */ @@ -46,6 +48,7 @@ typedef enum { typedef struct { uint32_t target_ts; uint32_t now_ts; + uint8_t hours; uint8_t minutes; uint8_t seconds; uint8_t selection; |