Skip to content

Commit 58dae9e

Browse files
committed
Added basic SoftwareRTC implementation.
See #3
1 parent bde41a3 commit 58dae9e

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

api/SoftwareRTC.cpp

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
Software RealTimeClock
3+
Copyright (c) 2016 Arduino LLC. All right reserved.
4+
5+
This library is free software; you can redistribute it and/or
6+
modify it under the terms of the GNU Lesser General Public
7+
License as published by the Free Software Foundation; either
8+
version 2.1 of the License, or (at your option) any later version.
9+
10+
This library is distributed in the hope that it will be useful,
11+
but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13+
Lesser General Public License for more details.
14+
15+
You should have received a copy of the GNU Lesser General Public
16+
License along with this library; if not, write to the Free Software
17+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18+
*/
19+
20+
#include "Arduino.h"
21+
#include "SoftwareRTC.h"
22+
23+
SoftwareRTC::SoftwareRTC() : lastTimestamp(0), lastMillis(0)
24+
{
25+
// Empty
26+
}
27+
28+
unsigned long SoftwareRTC::getTime()
29+
{
30+
if (lastTimestamp == 0) return 0;
31+
unsigned long now = millis();
32+
unsigned long delta = now - lastMillis;
33+
if (delta >= 1000) {
34+
delta /= 1000; // Determine the number of seconds elapsed
35+
lastMillis += delta * 1000;
36+
lastTimestamp += delta;
37+
}
38+
return lastTimestamp;
39+
}
40+
41+
bool SoftwareRTC::setTime(unsigned long t)
42+
{
43+
lastTimestamp = t;
44+
lastMillis = millis();
45+
}
46+

api/SoftwareRTC.h

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
Software RealTimeClock
3+
Copyright (c) 2016 Arduino LLC. All right reserved.
4+
5+
This library is free software; you can redistribute it and/or
6+
modify it under the terms of the GNU Lesser General Public
7+
License as published by the Free Software Foundation; either
8+
version 2.1 of the License, or (at your option) any later version.
9+
10+
This library is distributed in the hope that it will be useful,
11+
but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13+
Lesser General Public License for more details.
14+
15+
You should have received a copy of the GNU Lesser General Public
16+
License along with this library; if not, write to the Free Software
17+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18+
*/
19+
20+
#ifndef ARDUINO_SOFTWARE_RTC_H
21+
#define ARDUINO_SOFTWARE_RTC_H
22+
23+
#include "RealTimeClock.h"
24+
25+
class SoftwareRTC : public RealTimeClock {
26+
public:
27+
SoftwareRTC();
28+
29+
// Get the current time as unix-timestamp.
30+
// Return 0 if time has not been set.
31+
virtual unsigned long getTime();
32+
33+
// Set the current time as unix-timestamp
34+
virtual bool setTime(unsigned long t);
35+
36+
private:
37+
unsigned long lastTimestamp;
38+
unsigned long lastMillis;
39+
};
40+
41+
#endif

0 commit comments

Comments
 (0)