From 6409bbcb720be6c83d1fef3b7da14094b174a783 Mon Sep 17 00:00:00 2001 From: Krzysztof Adamski Date: Sun, 20 Jun 2021 11:36:55 +0200 Subject: [PATCH] mimxrt: Move calc_weekday helper function to timeutils. This function may be useful for other ports as well so lets move it to timeutils so it can be reused. Signed-off-by: Krzysztof Adamski --- lib/timeutils/timeutils.c | 7 +++++++ lib/timeutils/timeutils.h | 2 ++ ports/mimxrt/machine_rtc.c | 10 ++-------- ports/mimxrt/modutime.c | 4 +--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/timeutils/timeutils.c b/lib/timeutils/timeutils.c index af210d994..7c74f5fc3 100644 --- a/lib/timeutils/timeutils.c +++ b/lib/timeutils/timeutils.c @@ -213,3 +213,10 @@ mp_uint_t timeutils_mktime_2000(mp_uint_t year, mp_int_t month, mp_int_t mday, } return timeutils_seconds_since_2000(year, month, mday, hours, minutes, seconds); } + +// Calculate the weekday from the date. +// The result is zero based with 0 = Monday. +// by Michael Keith and Tom Craver, 1990. +int timeutils_calc_weekday(int y, int m, int d) { + return ((d += m < 3 ? y-- : y - 2, 23 * m / 9 + d + 4 + y / 4 - y / 100 + y / 400) + 6) % 7; +} diff --git a/lib/timeutils/timeutils.h b/lib/timeutils/timeutils.h index 2d40f773c..66e2a77f1 100644 --- a/lib/timeutils/timeutils.h +++ b/lib/timeutils/timeutils.h @@ -100,4 +100,6 @@ static inline int64_t timeutils_nanoseconds_since_epoch_to_nanoseconds_since_197 #endif +int timeutils_calc_weekday(int y, int m, int d); + #endif // MICROPY_INCLUDED_LIB_TIMEUTILS_TIMEUTILS_H diff --git a/ports/mimxrt/machine_rtc.c b/ports/mimxrt/machine_rtc.c index 76f414925..d00d139f7 100644 --- a/ports/mimxrt/machine_rtc.c +++ b/ports/mimxrt/machine_rtc.c @@ -26,6 +26,7 @@ */ #include "py/runtime.h" +#include "lib/timeutils/timeutils.h" #include "modmachine.h" #include "ticks.h" #include "fsl_snvs_lp.h" @@ -39,13 +40,6 @@ typedef struct _machine_rtc_obj_t { STATIC const machine_rtc_obj_t machine_rtc_obj = {{&machine_rtc_type}}; uint32_t us_offset = 0; -// Calculate the weekday from the date. -// The result is zero based with 0 = Monday. -// by Michael Keith and Tom Craver, 1990. -int calc_weekday(int y, int m, int d) { - return ((d += m < 3 ? y-- : y - 2, 23 * m / 9 + d + 4 + y / 4 - y / 100 + y / 400) + 6) % 7; -} - STATIC mp_obj_t machine_rtc_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { // Check arguments. mp_arg_check_num(n_args, n_kw, 0, 0, false); @@ -67,7 +61,7 @@ STATIC mp_obj_t machine_rtc_datetime_helper(size_t n_args, const mp_obj_t *args) mp_obj_new_int(srtc_date.year), mp_obj_new_int(srtc_date.month), mp_obj_new_int(srtc_date.day), - mp_obj_new_int(calc_weekday(srtc_date.year, srtc_date.month, srtc_date.day)), + mp_obj_new_int(timeutils_calc_weekday(srtc_date.year, srtc_date.month, srtc_date.day)), mp_obj_new_int(srtc_date.hour), mp_obj_new_int(srtc_date.minute), mp_obj_new_int(srtc_date.second), diff --git a/ports/mimxrt/modutime.c b/ports/mimxrt/modutime.c index a47bc073f..2a88a4224 100644 --- a/ports/mimxrt/modutime.c +++ b/ports/mimxrt/modutime.c @@ -30,8 +30,6 @@ #include "extmod/utime_mphal.h" #include "fsl_snvs_lp.h" -extern int calc_weekday(int y, int m, int d); - // localtime([secs]) // Convert a time expressed in seconds since the Epoch into an 8-tuple which // contains: (year, month, mday, hour, minute, second, weekday, yearday) @@ -48,7 +46,7 @@ STATIC mp_obj_t time_localtime(size_t n_args, const mp_obj_t *args) { mp_obj_new_int(t.hour), mp_obj_new_int(t.minute), mp_obj_new_int(t.second), - mp_obj_new_int(calc_weekday(t.year, t.month, t.day)), + mp_obj_new_int(timeutils_calc_weekday(t.year, t.month, t.day)), mp_obj_new_int(timeutils_year_day(t.year, t.month, t.day)), }; return mp_obj_new_tuple(8, tuple);