From 6004c64f06722b043c4ae8f608eb3b65f8828d06 Mon Sep 17 00:00:00 2001 From: Oleksij Rempel Date: Fri, 2 Feb 2024 13:07:31 +0100 Subject: [PATCH] lib: add timespec_diff_ms() and timespec_add_ms() helper functions This functions will be used by isobusfs. Signed-off-by: Oleksij Rempel --- lib.c | 18 ++++++++++++++++++ lib.h | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib.c b/lib.c index 0201e94..e5f3e03 100644 --- a/lib.c +++ b/lib.c @@ -704,3 +704,21 @@ void snprintf_can_error_frame(char *buf, size_t len, const struct canfd_frame *c n += snprintf_error_cnt(buf + n, len - n, cf); } } + +int64_t timespec_diff_ms(struct timespec *ts1, + struct timespec *ts2) +{ + int64_t diff = (ts1->tv_sec - ts2->tv_sec) * 1000; + + diff += (ts1->tv_nsec - ts2->tv_nsec) / 1000000; + + return diff; +} + +void timespec_add_ms(struct timespec *ts, uint64_t milliseconds) +{ + uint64_t total_ns = ts->tv_nsec + (milliseconds * 1000000); + + ts->tv_sec += total_ns / 1000000000; + ts->tv_nsec = total_ns % 1000000000; +} diff --git a/lib.h b/lib.h index b67cbcd..dfd1f77 100644 --- a/lib.h +++ b/lib.h @@ -229,4 +229,20 @@ void snprintf_can_error_frame(char *buf, size_t len, const struct canfd_frame *c * Creates a CAN error frame output in user readable format. */ +/** + * timespec_diff_ms - calculate timespec difference in milliseconds + * @ts1: first timespec + * @ts2: second timespec + * + * Return negative difference if in the past. + */ +int64_t timespec_diff_ms(struct timespec *ts1, struct timespec *ts2); + +/** + * timespec_add_ms - add milliseconds to timespec + * @ts: timespec + * @milliseconds: milliseconds to add + */ +void timespec_add_ms(struct timespec *ts, uint64_t milliseconds); + #endif