1/* @title: Time */
2#pragma once
3#include <stdint.h>
4#include <types/types.h>
5void time_print_unix(uint32_t timestamp);
6void time_print_current();
7uint32_t time_get_unix();
8uint8_t time_get_second();
9uint8_t time_get_minute();
10uint8_t time_get_hour();
11uint8_t time_get_day();
12uint8_t time_get_month();
13uint8_t time_get_year();
14uint8_t time_get_century();
15time_t time_get_ms(void);
16time_t time_get_ns();
17time_t time_get_us(void);
18uint64_t tsc_calibrate(void);
19
20#define NS_PER_US 1000LL
21#define NS_PER_MS 1000000LL
22#define NS_PER_S 1000000000LL
23#define NS_PER_MIN 60000000000LL
24#define NS_PER_HOUR 3600000000000LL
25#define NS_PER_DAY 86400000000000LL
26
27#define US_PER_MS 1000LL
28#define US_PER_S 1000000LL
29#define US_PER_MIN 60000000LL
30#define US_PER_HOUR 3600000000LL
31#define US_PER_DAY 86400000000LL
32
33#define MS_PER_S 1000LL
34#define MS_PER_MIN 60000LL
35#define MS_PER_HOUR 3600000LL
36#define MS_PER_DAY 86400000LL
37
38#define S_PER_MIN 60LL
39#define S_PER_HOUR 3600LL
40#define S_PER_DAY 86400LL
41
42#define MIN_PER_HOUR 60LL
43#define MIN_PER_DAY 1440LL
44
45#define HOURS_PER_DAY 24LL
46
47#define NS_TO_US(ns) ((ns) / NS_PER_US)
48#define NS_TO_MS(ns) ((ns) / NS_PER_MS)
49#define NS_TO_SECONDS(ns) ((ns) / NS_PER_S)
50#define NS_TO_MINUTES(ns) ((ns) / NS_PER_MIN)
51#define NS_TO_HOURS(ns) ((ns) / NS_PER_HOUR)
52#define NS_TO_DAYS(ns) ((ns) / NS_PER_DAY)
53
54#define US_TO_NS(us) ((us) * NS_PER_US)
55#define US_TO_MS(us) ((us) / US_PER_MS)
56#define US_TO_SECONDS(us) ((us) / US_PER_S)
57#define US_TO_MINUTES(us) ((us) / US_PER_MIN)
58#define US_TO_HOURS(us) ((us) / US_PER_HOUR)
59#define US_TO_DAYS(us) ((us) / US_PER_DAY)
60
61#define MS_TO_NS(ms) ((ms) * NS_PER_MS)
62#define MS_TO_US(ms) ((ms) * US_PER_MS)
63#define MS_TO_SECONDS(ms) ((ms) / MS_PER_S)
64#define MS_TO_MINUTES(ms) ((ms) / MS_PER_MIN)
65#define MS_TO_HOURS(ms) ((ms) / MS_PER_HOUR)
66#define MS_TO_DAYS(ms) ((ms) / MS_PER_DAY)
67
68#define SECONDS_TO_NS(s) ((s) * NS_PER_S)
69#define SECONDS_TO_US(s) ((s) * US_PER_S)
70#define SECONDS_TO_MS(s) ((s) * MS_PER_S)
71#define SECONDS_TO_MINUTES(s) ((s) / S_PER_MIN)
72#define SECONDS_TO_HOURS(s) ((s) / S_PER_HOUR)
73#define SECONDS_TO_DAYS(s) ((s) / S_PER_DAY)
74
75#define MINUTES_TO_NS(m) ((m) * NS_PER_MIN)
76#define MINUTES_TO_US(m) ((m) * US_PER_MIN)
77#define MINUTES_TO_MS(m) ((m) * MS_PER_MIN)
78#define MINUTES_TO_SECONDS(m) ((m) * S_PER_MIN)
79#define MINUTES_TO_HOURS(m) ((m) / MIN_PER_HOUR)
80#define MINUTES_TO_DAYS(m) ((m) / MIN_PER_DAY)
81
82#define HOURS_TO_NS(h) ((h) * NS_PER_HOUR)
83#define HOURS_TO_US(h) ((h) * US_PER_HOUR)
84#define HOURS_TO_MS(h) ((h) * MS_PER_HOUR)
85#define HOURS_TO_SECONDS(h) ((h) * S_PER_HOUR)
86#define HOURS_TO_MINUTES(h) ((h) * MIN_PER_HOUR)
87#define HOURS_TO_DAYS(h) ((h) / HOURS_PER_DAY)
88
89#define DAYS_TO_NS(d) ((d) * NS_PER_DAY)
90#define DAYS_TO_US(d) ((d) * US_PER_DAY)
91#define DAYS_TO_MS(d) ((d) * MS_PER_DAY)
92#define DAYS_TO_SECONDS(d) ((d) * S_PER_DAY)
93#define DAYS_TO_MINUTES(d) ((d) * MIN_PER_DAY)
94#define DAYS_TO_HOURS(d) ((d) * HOURS_PER_DAY)
95