dead simple rtc code for getting current datetime.
[lunaix-os.git] / lunaix-os / includes / hal / rtc.h
1 #ifndef __LUNAIX_RTC_H
2 #define __LUNAIX_RTC_H
3
4 #include "io.h"
5
6 #define RTC_INDEX_PORT 0x70
7 #define RTC_TARGET_PORT 0x71
8
9 #define WITH_NMI_DISABLED 0x80
10
11 #define RTC_CURRENT_CENTRY 20
12
13 #define RTC_REG_YRS 0x9
14 #define RTC_REG_MTH 0x8
15 #define RTC_REG_DAY 0x7
16 #define RTC_REG_WDY 0x6
17 #define RTC_REG_HRS 0x4
18 #define RTC_REG_MIN 0x2
19 #define RTC_REG_SEC 0x0
20
21 #define RTC_REG_A 0xA
22 #define RTC_REG_B 0xB
23 #define RTC_REG_C 0xC
24 #define RTC_REG_D 0xD
25
26 #define RTC_BIN_ENCODED(reg)    (reg & 0x04)
27 #define RTC_24HRS_ENCODED(reg)  (reg & 0x02)
28
29 typedef struct
30 {
31     uint32_t year;      // use int32 as we need to store the 4-digit year
32     uint8_t month;
33     uint8_t day;
34     uint8_t weekday;
35     uint8_t hour;
36     uint8_t minute;
37     uint8_t second;
38 } rtc_datetime;
39
40
41 uint8_t
42 rtc_read_reg(uint8_t reg_selector);
43
44 void 
45 rtc_get_datetime(rtc_datetime* datetime);
46
47 #endif /* __LUNAIX_RTC_H */