Decoupling Architectural-specific Code (#35)
[lunaix-os.git] / lunaix-os / includes / lunaix / time.h
index 522cc1ff1649f42e1885ea2647e7cd93a3897943..2b2c70ad568ac87ed3b407f7b3bd7e851f87f2d5 100644 (file)
@@ -1,20 +1,48 @@
 #ifndef __LUNAIX_TIME_H
 #define __LUNAIX_TIME_H
 
-#include <stdint.h>
+#include <lunaix/types.h>
+
+#define TIME_MS -1000
+#define TIME_SEC 1
+#define TIME_MIN (TIME_SEC * 60)
+#define TIME_HOUR (TIME_MIN * 60)
+
+typedef unsigned int ticks_t;
+typedef u32_t time_t;
 
 typedef struct
 {
-    uint32_t year;      // use int32 as we need to store the 4-digit year
-    uint8_t month;
-    uint8_t day;
-    uint8_t weekday;
-    uint8_t hour;
-    uint8_t minute;
-    uint8_t second;
+    u32_t year; // use int32 as we need to store the 4-digit year
+    u8_t month;
+    u8_t day;
+    u8_t weekday;
+    u8_t hour;
+    u8_t minute;
+    u8_t second;
 } datetime_t;
 
-void 
-time_getdatetime(datetime_t* datetime);
+static inline time_t
+datetime_tounix(datetime_t* dt)
+{
+    return (dt->year - 1970) * 31556926u + (dt->month - 1) * 2629743u +
+           (dt->day - 1) * 86400u + (dt->hour - 1) * 3600u +
+           (dt->minute - 1) * 60u + dt->second;
+}
+
+static inline time_t
+time_tounix(u32_t yyyy, u32_t mm, u32_t dd, u32_t hh, u32_t MM, u32_t ss)
+{
+    return (yyyy - 1970) * 31556926u + (mm - 1) * 2629743u + (dd - 1) * 86400u +
+           (hh - 1) * 3600u + (MM - 1) * 60u + ss;
+}
+
+static inline int
+datatime_eq(datetime_t* a, datetime_t* b)
+{
+    return a->year == b->year && a->month == b->month && a->day == b->day &&
+           a->weekday == b->weekday && a->minute == b->minute &&
+           a->second == b->second;
+}
 
 #endif /* __LUNAIX_TIME_H */