Rename DS1307 driver files to a more generic RTC, as different RTC drivers may be...
[pub/lufa.git] / Projects / TempDataLogger / Lib / RTC.h
diff --git a/Projects/TempDataLogger/Lib/RTC.h b/Projects/TempDataLogger/Lib/RTC.h
new file mode 100644 (file)
index 0000000..2e20dbf
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+#ifndef _RTC_H_
+#define _RTC_H_
+
+       /* Includes: */
+               #include <avr/io.h>
+
+               #include <LUFA/Drivers/Peripheral/TWI.h>
+
+               #include "Config/AppConfig.h"
+
+       /* Type Defines: */
+               typedef struct
+               {
+                       uint8_t Hour;
+                       uint8_t Minute;
+                       uint8_t Second;
+                       uint8_t Day;
+                       uint8_t Month;
+                       uint8_t Year;
+               } TimeDate_t;
+
+               typedef struct
+               {
+                       union
+                       {
+                               struct
+                               {
+                                       unsigned Sec            : 4;
+                                       unsigned TenSec         : 3;
+                                       unsigned CH             : 1;
+                               } Fields;
+
+                               uint8_t IntVal;
+                       } Byte1;
+
+                       union
+                       {
+                               struct
+                               {
+                                       unsigned Min            : 4;
+                                       unsigned TenMin         : 3;
+                                       unsigned Reserved       : 1;
+                               } Fields;
+
+                               uint8_t IntVal;
+                       } Byte2;
+
+                       union
+                       {
+                               struct
+                               {
+                                       unsigned Hour            : 4;
+                                       unsigned TenHour         : 2;
+                                       unsigned TwelveHourMode  : 1;
+                                       unsigned Reserved        : 1;
+                               } Fields;
+
+                               uint8_t IntVal;
+                       } Byte3;
+
+                       union
+                       {
+                               struct
+                               {
+                                       unsigned DayOfWeek       : 3;
+                                       unsigned Reserved        : 5;
+                               } Fields;
+
+                               uint8_t IntVal;
+                       } Byte4;
+
+                       union
+                       {
+                               struct
+                               {
+                                       unsigned Day             : 4;
+                                       unsigned TenDay          : 2;
+                                       unsigned Reserved        : 2;
+                               } Fields;
+
+                               uint8_t IntVal;
+                       } Byte5;
+
+                       union
+                       {
+                               struct
+                               {
+                                       unsigned Month           : 4;
+                                       unsigned TenMonth        : 1;
+                                       unsigned Reserved        : 3;
+                               } Fields;
+
+                               uint8_t IntVal;
+                       } Byte6;
+
+                       union
+                       {
+                               struct
+                               {
+                                       unsigned Year            : 4;
+                                       unsigned TenYear         : 4;
+                               } Fields;
+
+                               uint8_t IntVal;
+                       } Byte7;
+               } DS1307_DateTimeRegs_t;
+
+       /* Macros: */
+               /** TWI address of the DS1307 device on the bus. */
+               #define DS1307_ADDRESS       0xD0
+
+       /* Function Prototypes: */
+               void RTC_Init(void);
+               void RTC_Tick500ms(void);
+               bool RTC_SetTimeDate(const TimeDate_t* NewTimeDate);
+               bool RTC_GetTimeDate(TimeDate_t* const TimeDate);
+
+#endif
+