]> git.earman.xyz Git - sensor-watch.git/commitdiff
Convert from timestamp to date_time once per second at most
authorAlessandro Genova <ales.genova@gmail.com>
Wed, 27 Aug 2025 01:44:00 +0000 (21:44 -0400)
committerAlessandro Genova <ales.genova@gmail.com>
Sat, 3 Jan 2026 01:07:56 +0000 (20:07 -0500)
movement.c
watch-library/hardware/watch/watch_rtc.c

index d13146e97301e3ea5f50bf7b88dd2aae158bd469..bc8b12f958de6161647a601ee6c616249037645d 100644 (file)
@@ -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) {
index 1b0b5f49281efa5d799aaea745f08e3b8b70f3d9..114c1ee458d5572e8200ad6dadc9403e321829f9 100644 (file)
@@ -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) {