embkernel
 All Classes Functions Variables Typedefs Groups Pages
LibRtc.cpp
1 //------------------------------------------------------------------------------
2 //This file is part of embKernel.
3 //See license.txt for the full license governing this code.
4 //------------------------------------------------------------------------------
5 
6 #include "LibRtc.hpp"
7 
8 const uint8_t LibRtc::DAYS_IN_MONTH[] = {
9  31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
10 
11 bool LibRtc::isLeapYear(int year) {
12  if ((year % 400) == 0) {
13  return true;
14  }
15  if ((year % 100) == 0) {
16  return false;
17  }
18  if ((year % 4) == 0) {
19  return true;
20  }
21  return false;
22 }
23 
24 void LibRtc::updateDayOfWeek(DATE* date) {
25  const static int t[] = {
26  0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
27 
28  int d = date->dayOfMonth;
29  int m = date->month;
30  int y = date->year - (m < 3 ? 1 : 0);
31 
32  date->dayOfWeek = (DAY_OF_WEEK) ((y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7);
33 }
34 
35 void LibRtc::updateDayOfYear(DATE* date) {
36  date->dayOfYear = 0;
37  bool leapYear = isLeapYear(date->year);
38  for (int i = 1; i < date->month; i++) {
39  if (i == FEBRUARY && leapYear) {
40  date->dayOfYear += 29;
41  }
42  else {
43  date->dayOfYear += DAYS_IN_MONTH[i - 1];
44  }
45  }
46  date->dayOfYear += date->dayOfMonth;
47 }
48 
49 __attribute__(( weak)) void LibRtc::getCurrentDateAndTime(DATE_AND_TIME* dateAndTime) {
50  dateAndTime->date.dayOfMonth = 18;
51  dateAndTime->date.month = AUGUST;
52  dateAndTime->date.year = 2012;
53  updateDayOfWeek(&dateAndTime->date);
54  updateDayOfYear(&dateAndTime->date);
55 
56  dateAndTime->time.ms = 0;
57  dateAndTime->time.sec = 0;
58  dateAndTime->time.min = 0;
59  dateAndTime->time.hour = 12;
60 }
61 
62 __attribute__(( weak)) void LibRtc::setCurrentDateAndTime(DATE_AND_TIME* dateAndTime) {
63 
64 }
65 
66 __attribute__(( weak)) uint32_t LibRtc::getGmtUnixTime() {
67  return 1350716400;
68 }