Pseudo real-time clock using Ticker interruption, also implements time() and set_time() for platforms that don't (such as mBuino)

Fork of PseudoRTC by Shigenori Inoue

Committer:
s_inoue_mbed
Date:
Sat Sep 20 14:18:46 2014 +0000
Revision:
0:9ab044e24d20
Child:
2:7d153bc7403f
First version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
s_inoue_mbed 0:9ab044e24d20 1 /* Copyright (c) 2014 Shigenori Inoue, MIT License
s_inoue_mbed 0:9ab044e24d20 2 *
s_inoue_mbed 0:9ab044e24d20 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
s_inoue_mbed 0:9ab044e24d20 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
s_inoue_mbed 0:9ab044e24d20 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
s_inoue_mbed 0:9ab044e24d20 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
s_inoue_mbed 0:9ab044e24d20 7 * furnished to do so, subject to the following conditions:
s_inoue_mbed 0:9ab044e24d20 8 *
s_inoue_mbed 0:9ab044e24d20 9 * The above copyright notice and this permission notice shall be included in all copies or
s_inoue_mbed 0:9ab044e24d20 10 * substantial portions of the Software.
s_inoue_mbed 0:9ab044e24d20 11 *
s_inoue_mbed 0:9ab044e24d20 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
s_inoue_mbed 0:9ab044e24d20 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
s_inoue_mbed 0:9ab044e24d20 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
s_inoue_mbed 0:9ab044e24d20 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
s_inoue_mbed 0:9ab044e24d20 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
s_inoue_mbed 0:9ab044e24d20 17 */
s_inoue_mbed 0:9ab044e24d20 18
s_inoue_mbed 0:9ab044e24d20 19 #include "PseudoRTC.h"
s_inoue_mbed 0:9ab044e24d20 20
s_inoue_mbed 0:9ab044e24d20 21 PseudoRTC::PseudoRTC(void)
s_inoue_mbed 0:9ab044e24d20 22 {
s_inoue_mbed 0:9ab044e24d20 23 year = 0;
s_inoue_mbed 0:9ab044e24d20 24 month = 1;
s_inoue_mbed 0:9ab044e24d20 25 day = 1;
s_inoue_mbed 0:9ab044e24d20 26 hour = 1;
s_inoue_mbed 0:9ab044e24d20 27 minute = 0;
s_inoue_mbed 0:9ab044e24d20 28 second = 0;
s_inoue_mbed 0:9ab044e24d20 29 t.attach(this, &PseudoRTC::tictoc, 1);
s_inoue_mbed 0:9ab044e24d20 30 }
s_inoue_mbed 0:9ab044e24d20 31
s_inoue_mbed 0:9ab044e24d20 32 PseudoRTC::~PseudoRTC(void) {}
s_inoue_mbed 0:9ab044e24d20 33
s_inoue_mbed 0:9ab044e24d20 34
s_inoue_mbed 0:9ab044e24d20 35 void PseudoRTC::setTime(int y, int mo, int d, int h, int mi, int s)
s_inoue_mbed 0:9ab044e24d20 36 {
s_inoue_mbed 0:9ab044e24d20 37 /* Check the validity */
s_inoue_mbed 0:9ab044e24d20 38 if (month < 13 && day < 32 && hour < 24 && minute < 60 && second < 60) {
s_inoue_mbed 0:9ab044e24d20 39 year = y;
s_inoue_mbed 0:9ab044e24d20 40 month = mo;
s_inoue_mbed 0:9ab044e24d20 41 day = d;
s_inoue_mbed 0:9ab044e24d20 42 hour = h;
s_inoue_mbed 0:9ab044e24d20 43 minute = mi;
s_inoue_mbed 0:9ab044e24d20 44 second = s;
s_inoue_mbed 0:9ab044e24d20 45 }
s_inoue_mbed 0:9ab044e24d20 46 }
s_inoue_mbed 0:9ab044e24d20 47
s_inoue_mbed 0:9ab044e24d20 48 int PseudoRTC::getYear(void)
s_inoue_mbed 0:9ab044e24d20 49 {
s_inoue_mbed 0:9ab044e24d20 50 return year;
s_inoue_mbed 0:9ab044e24d20 51 }
s_inoue_mbed 0:9ab044e24d20 52
s_inoue_mbed 0:9ab044e24d20 53 int PseudoRTC::getMonth(void)
s_inoue_mbed 0:9ab044e24d20 54 {
s_inoue_mbed 0:9ab044e24d20 55 return month;
s_inoue_mbed 0:9ab044e24d20 56 }
s_inoue_mbed 0:9ab044e24d20 57
s_inoue_mbed 0:9ab044e24d20 58 int PseudoRTC::getDay(void)
s_inoue_mbed 0:9ab044e24d20 59 {
s_inoue_mbed 0:9ab044e24d20 60 return day;
s_inoue_mbed 0:9ab044e24d20 61 }
s_inoue_mbed 0:9ab044e24d20 62
s_inoue_mbed 0:9ab044e24d20 63 int PseudoRTC::getHour(void)
s_inoue_mbed 0:9ab044e24d20 64 {
s_inoue_mbed 0:9ab044e24d20 65 return hour;
s_inoue_mbed 0:9ab044e24d20 66 }
s_inoue_mbed 0:9ab044e24d20 67
s_inoue_mbed 0:9ab044e24d20 68 int PseudoRTC::getMinute(void)
s_inoue_mbed 0:9ab044e24d20 69 {
s_inoue_mbed 0:9ab044e24d20 70 return minute;
s_inoue_mbed 0:9ab044e24d20 71 }
s_inoue_mbed 0:9ab044e24d20 72
s_inoue_mbed 0:9ab044e24d20 73 int PseudoRTC::getSecond(void)
s_inoue_mbed 0:9ab044e24d20 74 {
s_inoue_mbed 0:9ab044e24d20 75 return second;
s_inoue_mbed 0:9ab044e24d20 76 }
s_inoue_mbed 0:9ab044e24d20 77
s_inoue_mbed 0:9ab044e24d20 78 void PseudoRTC::tictoc(void)
s_inoue_mbed 0:9ab044e24d20 79 {
s_inoue_mbed 0:9ab044e24d20 80 if(second < 59) {
s_inoue_mbed 0:9ab044e24d20 81 second++;
s_inoue_mbed 0:9ab044e24d20 82 } else {
s_inoue_mbed 0:9ab044e24d20 83 second = 0;
s_inoue_mbed 0:9ab044e24d20 84 minute++;
s_inoue_mbed 0:9ab044e24d20 85 }
s_inoue_mbed 0:9ab044e24d20 86 if(minute > 59) {
s_inoue_mbed 0:9ab044e24d20 87 minute = 0;
s_inoue_mbed 0:9ab044e24d20 88 hour++;
s_inoue_mbed 0:9ab044e24d20 89 }
s_inoue_mbed 0:9ab044e24d20 90 if(hour > 23) {
s_inoue_mbed 0:9ab044e24d20 91 hour = 0;
s_inoue_mbed 0:9ab044e24d20 92 day++;
s_inoue_mbed 0:9ab044e24d20 93 }
s_inoue_mbed 0:9ab044e24d20 94 if(day > 30 && (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)) {
s_inoue_mbed 0:9ab044e24d20 95 day = 1;
s_inoue_mbed 0:9ab044e24d20 96 month++;
s_inoue_mbed 0:9ab044e24d20 97 }
s_inoue_mbed 0:9ab044e24d20 98 if(day > 29 && (month == 4 || month == 6 || month == 9 || month == 11)) {
s_inoue_mbed 0:9ab044e24d20 99 day = 1;
s_inoue_mbed 0:9ab044e24d20 100 month++;
s_inoue_mbed 0:9ab044e24d20 101 }
s_inoue_mbed 0:9ab044e24d20 102 if(day > 27 && month == 2) {
s_inoue_mbed 0:9ab044e24d20 103 day = 1;
s_inoue_mbed 0:9ab044e24d20 104 month++;
s_inoue_mbed 0:9ab044e24d20 105 }
s_inoue_mbed 0:9ab044e24d20 106 if(month > 12) {
s_inoue_mbed 0:9ab044e24d20 107 year++;
s_inoue_mbed 0:9ab044e24d20 108 }
s_inoue_mbed 0:9ab044e24d20 109 }