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
PseudoRTC.cpp@0:9ab044e24d20, 2014-09-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |