From 996d5d6679618e309a117437606bcec4e4365315 Mon Sep 17 00:00:00 2001 From: Alessandro Genova Date: Tue, 26 Aug 2025 21:44:00 -0400 Subject: [PATCH] Convert from timestamp to date_time once per second at most --- movement.c | 13 ++++++++++++- watch-library/hardware/watch/watch_rtc.c | 14 +++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/movement.c b/movement.c index d13146e9..bc8b12f9 100644 --- a/movement.c +++ b/movement.c @@ -614,8 +614,19 @@ watch_date_time_t movement_get_date_time_in_zone(uint8_t zone_index) { } watch_date_time_t movement_get_local_date_time(void) { + static struct { + unix_timestamp_t timestamp; + rtc_date_time_t datetime; + } cached_date_time = {.datetime.reg=0, .timestamp=0}; + unix_timestamp_t timestamp = watch_rtc_get_unix_time(); - return watch_utility_date_time_from_unix_time(timestamp, movement_get_current_timezone_offset()); + + if (timestamp != cached_date_time.timestamp) { + cached_date_time.timestamp = timestamp; + cached_date_time.datetime = watch_utility_date_time_from_unix_time(timestamp, movement_get_current_timezone_offset()); + } + + return cached_date_time.datetime; } uint32_t movement_get_utc_timestamp(void) { diff --git a/watch-library/hardware/watch/watch_rtc.c b/watch-library/hardware/watch/watch_rtc.c index 1b0b5f49..114c1ee4 100644 --- a/watch-library/hardware/watch/watch_rtc.c +++ b/watch-library/hardware/watch/watch_rtc.c @@ -91,7 +91,19 @@ void watch_rtc_set_date_time(rtc_date_time_t date_time) { } rtc_date_time_t watch_rtc_get_date_time(void) { - return watch_utility_date_time_from_unix_time(watch_rtc_get_unix_time(), 0); + static struct { + unix_timestamp_t timestamp; + rtc_date_time_t datetime; + } cached_date_time = {.datetime.reg=0, .timestamp=0}; + + unix_timestamp_t timestamp = watch_rtc_get_unix_time(); + + if (timestamp != cached_date_time.timestamp) { + cached_date_time.timestamp = timestamp; + cached_date_time.datetime = watch_utility_date_time_from_unix_time(timestamp, 0); + } + + return cached_date_time.datetime; } void watch_rtc_set_unix_time(unix_timestamp_t unix_time) {