00001
00002
00003
00004
00005
00006
00007
00008 #include <mach/pc/rtc.h>
00009
00010 __BEGIN_SYS
00011
00012 PC_RTC::Seconds PC_RTC::read()
00013 {
00014 unsigned int Y, M, D, h, m, s;
00015
00016 do {
00017 s = reg(SECONDS);
00018 m = reg(MINUTES);
00019 h = reg(HOURS);
00020 D = reg(DAY);
00021 M = reg(MONTH);
00022 Y = reg(YEAR);
00023 } while(s != reg(SECONDS));
00024 if ((Y += 1900) < _Traits::EPOCH_YEAR)
00025 Y += 100;
00026
00027 return date2offset(_Traits::EPOCH_DAYS, Y, M, D, h, m, s);
00028 }
00029
00030 void PC_RTC::write(const PC_RTC::Seconds & time)
00031 {
00032 db<PC_RTC>(TRC) << "PC_RTC::write(time= " << time << ")\n";
00033
00034 unsigned int Y, M, D, h, m, s;
00035
00036 offset2date(time, _Traits::EPOCH_DAYS, &Y, &M, &D, &h, &m, &s);
00037
00038 reg(YEAR, Y);
00039 reg(MONTH, M);
00040 reg(DAY, D);
00041 reg(HOURS, h);
00042 reg(MINUTES, m);
00043 reg(SECONDS, s);
00044 }
00045
00046 __END_SYS