|
@ -5,81 +5,15 @@ Part of NTP MODULE |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
// Based on https://github.com/PaulStoffregen/time |
|
|
// Based on https://github.com/PaulStoffregen/time |
|
|
|
|
|
// Avoid doing any math (elapsed..., numberOf... functions and etc.), |
|
|
|
|
|
// simply expect POSIX time API usage, and provide bare minimum to simplify `tm` access |
|
|
|
|
|
|
|
|
#pragma once |
|
|
#pragma once |
|
|
|
|
|
|
|
|
|
|
|
#include <cstdint> |
|
|
#include <time.h> |
|
|
#include <time.h> |
|
|
#include <sys/time.h> |
|
|
#include <sys/time.h> |
|
|
|
|
|
|
|
|
constexpr time_t daysPerWeek = 7; |
|
|
|
|
|
|
|
|
|
|
|
constexpr time_t secondsPerMinute = 60; |
|
|
|
|
|
constexpr time_t secondsPerHour = 3600; |
|
|
|
|
|
constexpr time_t secondsPerDay = secondsPerHour * 24; |
|
|
|
|
|
constexpr time_t secondsPerWeek = daysPerWeek * secondsPerDay; |
|
|
|
|
|
|
|
|
|
|
|
constexpr time_t secondsPerYear = secondsPerWeek * 52; |
|
|
|
|
|
constexpr time_t secondsY2K = 946684800; // the time at the start of y2k |
|
|
|
|
|
|
|
|
|
|
|
// wall clock values |
|
|
|
|
|
template <typename T> |
|
|
|
|
|
constexpr const T numberOfSeconds(T ts) { |
|
|
|
|
|
return (ts % (T)secondsPerMinute); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
|
constexpr const T numberOfMinutes(T ts) { |
|
|
|
|
|
return ((ts / (T)secondsPerMinute) % (T)secondsPerMinute); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
|
constexpr const time_t numberOfHours(T ts) { |
|
|
|
|
|
return ((ts % (T)secondsPerDay) / (T)secondsPerHour); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// week starts with sunday as number 1, monday as 2 etc. |
|
|
|
|
|
constexpr const int dayOfWeek(time_t ts) { |
|
|
|
|
|
return ((ts / secondsPerDay + 4) % daysPerWeek) + 1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// the number of days since 0 (Jan 1 1970 in case of time_t values) |
|
|
|
|
|
constexpr const int elapsedDays(uint32_t ts) { |
|
|
|
|
|
return (ts / secondsPerDay); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// the number of seconds since last midnight |
|
|
|
|
|
constexpr const uint32_t elapsedSecsToday(uint32_t ts) { |
|
|
|
|
|
return (ts % (uint32_t)secondsPerDay); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// note that week starts on day 1 |
|
|
|
|
|
constexpr const uint32_t elapsedSecsThisWeek(uint32_t ts) { |
|
|
|
|
|
return elapsedSecsToday(ts) + ((dayOfWeek(ts) - 1) * (uint32_t)secondsPerDay); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// The following methods are used in calculating alarms and assume the clock is set to a date later than Jan 1 1971 |
|
|
|
|
|
// Always set the correct time before settting alarms |
|
|
|
|
|
|
|
|
|
|
|
// time at the start of the given day |
|
|
|
|
|
constexpr const time_t previousMidnight(time_t ts) { |
|
|
|
|
|
return ((ts / secondsPerDay) * secondsPerDay); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// time at the end of the given day |
|
|
|
|
|
constexpr const time_t nextMidnight(time_t ts) { |
|
|
|
|
|
return previousMidnight(ts) + secondsPerDay; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// time at the start of the week for the given time |
|
|
|
|
|
constexpr const time_t previousSunday(time_t ts) { |
|
|
|
|
|
return ts - elapsedSecsThisWeek(ts); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// time at the end of the week for the given time |
|
|
|
|
|
constexpr const time_t nextSunday(time_t ts) { |
|
|
|
|
|
return previousSunday(ts) + secondsPerWeek; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int utc_hour(time_t ts); |
|
|
int utc_hour(time_t ts); |
|
|
int utc_minute(time_t ts); |
|
|
int utc_minute(time_t ts); |
|
|
int utc_second(time_t ts); |
|
|
int utc_second(time_t ts); |
|
|