summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>2024-02-25 13:31:17 -0300
committerMatheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>2024-02-25 15:24:14 -0300
commitbf4d7a3f2bee213e4ef07b27e10436e6402efd3a (patch)
treee77dd1edfec6d41d2febf16a3da2e4981d91e93c
parent8f0719205332e933219a52001ba31fba78fa12a1 (diff)
downloadSensor-Watch-bf4d7a3f2bee213e4ef07b27e10436e6402efd3a.tar.gz
Sensor-Watch-bf4d7a3f2bee213e4ef07b27e10436e6402efd3a.tar.bz2
Sensor-Watch-bf4d7a3f2bee213e4ef07b27e10436e6402efd3a.zip
faces/clock: refactor partial time display code
Simplifies the code by defining dedicated functions for this.
-rw-r--r--movement/watch_faces/clock/clock_face.c64
1 files changed, 40 insertions, 24 deletions
diff --git a/movement/watch_faces/clock/clock_face.c b/movement/watch_faces/clock/clock_face.c
index 5b698341..36f21ff9 100644
--- a/movement/watch_faces/clock/clock_face.c
+++ b/movement/watch_faces/clock/clock_face.c
@@ -116,6 +116,38 @@ static void clock_display_all(watch_date_time date_time) {
watch_display_string(buf, 0);
}
+static bool clock_display_some(watch_date_time current, watch_date_time previous) {
+ if ((current.reg >> 6) == (previous.reg >> 6)) {
+ // everything before seconds is the same, don't waste cycles setting those segments.
+
+ watch_display_character_lp_seconds('0' + current.unit.second / 10, 8);
+ watch_display_character_lp_seconds('0' + current.unit.second % 10, 9);
+
+ return true;
+
+ } else if ((current.reg >> 12) == (previous.reg >> 12)) {
+ // everything before minutes is the same.
+
+ char buf[4 + 1];
+
+ snprintf(
+ buf,
+ sizeof(buf),
+ "%02d%02d",
+ current.unit.minute,
+ current.unit.second
+ );
+
+ watch_display_string(buf, 6);
+
+ return true;
+
+ } else {
+ // other stuff changed; let's do it all.
+ return false;
+ }
+}
+
static void clock_display_low_energy(watch_date_time date_time) {
char buf[10 + 1];
@@ -173,11 +205,8 @@ void clock_face_activate(movement_settings_t *settings, void *context) {
bool clock_face_loop(movement_event_t event, movement_settings_t *settings, void *context) {
clock_state_t *state = (clock_state_t *) context;
- char buf[11];
- uint8_t pos;
+ watch_date_time current, previous;
- watch_date_time date_time;
- uint32_t previous_date_time;
switch (event.event_type) {
case EVENT_LOW_ENERGY_UPDATE:
clock_start_tick_tock_animation();
@@ -185,36 +214,23 @@ bool clock_face_loop(movement_event_t event, movement_settings_t *settings, void
break;
case EVENT_TICK:
case EVENT_ACTIVATE:
- date_time = watch_rtc_get_date_time();
- previous_date_time = state->previous_date_time;
- state->previous_date_time = date_time.reg;
+ current = watch_rtc_get_date_time();
+ previous.reg = state->previous_date_time;
+ state->previous_date_time = current.reg;
clock_check_battery_periodically(state, date_time);
clock_indicate_low_available_power(state);
- if ((date_time.reg >> 6) == (previous_date_time >> 6)) {
- // everything before seconds is the same, don't waste cycles setting those segments.
- watch_display_character_lp_seconds('0' + date_time.unit.second / 10, 8);
- watch_display_character_lp_seconds('0' + date_time.unit.second % 10, 9);
- break;
- } else if ((date_time.reg >> 12) == (previous_date_time >> 12)) {
- // everything before minutes is the same.
- pos = 6;
- sprintf(buf, "%02d%02d", date_time.unit.minute, date_time.unit.second);
- } else {
- // other stuff changed; let's do it all.
+ if (!clock_display_some(current, previous)) {
if (!settings->bit.clock_mode_24h) {
// if we are in 12 hour mode, do some cleanup.
- clock_indicate_pm(settings, date_time);
- date_time = clock_24h_to_12h(date_time);
+ clock_indicate_pm(settings, current);
+ current = clock_24h_to_12h(current);
}
- clock_display_all(date_time);
- break;
+ clock_display_all(current);
}
- watch_display_string(buf, 0);
- // handle alarm indicator
clock_indicate_alarm(settings);
break;