From 83ac40c4b9d848f65e1b9b01eeb4d5be01c97b99 Mon Sep 17 00:00:00 2001 From: CTCaer Date: Tue, 12 Mar 2024 15:08:55 +0200 Subject: [PATCH] bdk: rtc: handle offset adjustment in-place --- bdk/rtc/max77620-rtc.c | 17 +++++++++++++++++ bdk/rtc/max77620-rtc.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/bdk/rtc/max77620-rtc.c b/bdk/rtc/max77620-rtc.c index ab01b40..6f813c0 100644 --- a/bdk/rtc/max77620-rtc.c +++ b/bdk/rtc/max77620-rtc.c @@ -23,6 +23,8 @@ #include #include +int epoch_offset = 0; + void max77620_rtc_prep_read() { i2c_send_byte(I2C_5, MAX77620_RTC_I2C_ADDR, MAX77620_RTC_UPDATE0_REG, MAX77620_RTC_READ_UPDATE); @@ -154,6 +156,21 @@ u32 max77620_rtc_date_to_epoch(const rtc_time_t *time) return epoch; } +void max77620_rtc_get_time_adjusted(rtc_time_t *time) +{ + max77620_rtc_get_time(time); + if (epoch_offset) + { + u32 epoch = (u32)((s64)max77620_rtc_date_to_epoch(time) + epoch_offset); + max77620_rtc_epoch_to_date(epoch, time); + } +} + +void max77620_rtc_set_epoch_offset(int offset) +{ + epoch_offset = offset; +} + void max77620_rtc_set_reboot_reason(rtc_reboot_reason_t *rr) { max77620_rtc_stop_alarm(); diff --git a/bdk/rtc/max77620-rtc.h b/bdk/rtc/max77620-rtc.h index b0d616d..b82c3e6 100644 --- a/bdk/rtc/max77620-rtc.h +++ b/bdk/rtc/max77620-rtc.h @@ -109,6 +109,8 @@ typedef struct _rtc_reboot_reason_t void max77620_rtc_prep_read(); void max77620_rtc_get_time(rtc_time_t *time); +void max77620_rtc_get_time_adjusted(rtc_time_t *time); +void max77620_rtc_set_epoch_offset(int offset); void max77620_rtc_stop_alarm(); void max77620_rtc_epoch_to_date(u32 epoch, rtc_time_t *time); u32 max77620_rtc_date_to_epoch(const rtc_time_t *time);