aboutsummaryrefslogtreecommitdiff
path: root/Arduino/ems/Clock.h
diff options
context:
space:
mode:
Diffstat (limited to 'Arduino/ems/Clock.h')
-rwxr-xr-xArduino/ems/Clock.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/Arduino/ems/Clock.h b/Arduino/ems/Clock.h
new file mode 100755
index 0000000..4b28dc3
--- /dev/null
+++ b/Arduino/ems/Clock.h
@@ -0,0 +1,131 @@
+/*---------------------------------------------------------------------Clock.h
+ * Authors: Joseph Wayne Dumoulin, Donald Delmar Davis, Suspect Devices
+ *
+ * Liscence: "Simplified BSD License"
+ *
+ * Copyright (c) 2016, Donald Delmar Davis, Suspect Devices
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in thedocumentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *-----------------------------------------------------------------------------
+ *
+ *
+ *
+ */
+
+#ifndef Clock_h
+#define Clock_h
+
+#include "Common.h"
+#include "Monitor.h"
+#include "TaskScheduler.h"
+
+#define SECONDS_PER_DAY 86400L
+#define SECONDS_FROM_1970_TO_2000 946684800
+#define DEBUG_SYNC 0
+#define CHARS_IN_TIMESTAMP 20
+
+// add preprocessor code here for non M0 systems.
+#include <RTCZero.h>
+extern RTCZero rtc;
+
+// forward
+class Clock;
+extern Clock clock;
+
+void timeStamp(char *);
+
+class Clock
+{
+private:
+
+
+public:
+
+
+ /*----------------------------------------------------------------------
+ * Monitor Callbacks
+ *--------------------------------------------------------------------*/
+
+ static void TIM (uint8_t kwIndex, uint8_t verb,char *args) {
+ static char thetimestamp[CHARS_IN_TIMESTAMP];
+ if (verb == '!') {
+ clock.set(args);
+ }
+ timeStamp(thetimestamp);
+ monitor.update("TIM","%s",thetimestamp);
+ }
+
+ static void NOW (uint8_t kwIndex, uint8_t verb,char *args) {
+ static char intbuff[25];
+ if (verb == '!') {
+ clock.set(atol(args));
+ }
+ ultoa(clock.time(),intbuff,10);
+ monitor.update("NOW","%s",intbuff);
+
+ }
+
+
+ Clock() {} ;
+ void init();
+ bool RTCIsRunning();// const { return (rtcisrunning==1); };
+ void set(time_t);
+ time_t get();
+ void set(const char *);
+
+// need to generalize this at some point.
+#if 0
+ uint16_t year() const { return 2000 + yOff; }
+ uint8_t month() const { return m; }
+ uint8_t day() const { return d; }
+ uint8_t hour() const { return hh % 24; }
+ uint8_t minute() const { return mm % 60; }
+ uint8_t second() const { return ss % 60; }
+ time_t time() const {return unixtime;}
+#else
+ uint16_t year() const { return 2000 + rtc.getYear(); }
+ uint8_t month() const { return rtc.getMonth(); }
+ uint8_t day() const { return rtc.getDay(); }
+ uint8_t hour() const { return rtc.getHours(); }
+ uint8_t minute() const { return rtc.getMinutes(); }
+ uint8_t second() const { return rtc.getSeconds(); }
+ time_t time() const {return rtc.getEpoch();}
+#endif
+ uint8_t dayofweek();
+ void tick(void);
+ void run(); // this is wrong.
+ bool rolledOver(); //??
+ void addToCalendar();
+ void removeFromCalendar();
+ void sync();
+ void calcUnixTime();
+
+protected:
+ uint8_t yOff, m, d, hh, mm, ss, rtcisrunning;
+ time_t unixtime;
+
+};
+
+
+#endif