x

Dependents:   20180621_FT813

Committer:
JackB
Date:
Mon Jul 23 12:24:33 2018 +0000
Revision:
0:04311b121ac4
MCP79412

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackB 0:04311b121ac4 1 /** mbded library for driving the PMAXIM DS3231 Real Time Clock
JackB 0:04311b121ac4 2 * datasheet link : http://datasheets.maximintegrated.com/en/ds/DS3231.pdf
JackB 0:04311b121ac4 3 * breakout : MACETECH ChronoDot V2.1 High Precision RTC
JackB 0:04311b121ac4 4 * remi cormier 2012
JackB 0:04311b121ac4 5 * WARNING : sda and sdl should be pulled up with 2.2k resistor
JackB 0:04311b121ac4 6 */
JackB 0:04311b121ac4 7
JackB 0:04311b121ac4 8 /** Example code
JackB 0:04311b121ac4 9 * @code
JackB 0:04311b121ac4 10 // DS3231 Library test program
JackB 0:04311b121ac4 11 // remi cormier 2012
JackB 0:04311b121ac4 12
JackB 0:04311b121ac4 13 #include "mbed.h"
JackB 0:04311b121ac4 14 #include "DS3231.h"
JackB 0:04311b121ac4 15
JackB 0:04311b121ac4 16 Serial pc(USBTX, USBRX);
JackB 0:04311b121ac4 17
JackB 0:04311b121ac4 18 int hour;
JackB 0:04311b121ac4 19 int minute;
JackB 0:04311b121ac4 20 int second;
JackB 0:04311b121ac4 21
JackB 0:04311b121ac4 22 int dayOfWeek;
JackB 0:04311b121ac4 23 int date;
JackB 0:04311b121ac4 24 int month;
JackB 0:04311b121ac4 25 int year;
JackB 0:04311b121ac4 26
JackB 0:04311b121ac4 27 DS3231 RTC(p28,p27);
JackB 0:04311b121ac4 28
JackB 0:04311b121ac4 29
JackB 0:04311b121ac4 30 int main()
JackB 0:04311b121ac4 31 {printf("\r\n\nDS3231 Library test program\r\nremi cormier 2012\r\n\n");
JackB 0:04311b121ac4 32
JackB 0:04311b121ac4 33 RTC.setI2Cfrequency(400000);
JackB 0:04311b121ac4 34
JackB 0:04311b121ac4 35 //RTC.writeRegister(DS3231_Aging_Offset,0); // uncomment to set Aging Offset 1LSB = approx. 0.1 ppm according from datasheet = 0.05 ppm @ 21 °C from my measurments
JackB 0:04311b121ac4 36
JackB 0:04311b121ac4 37 RTC.convertTemperature();
JackB 0:04311b121ac4 38
JackB 0:04311b121ac4 39 int reg=RTC.readRegister(DS3231_Aging_Offset);
JackB 0:04311b121ac4 40 if (reg>127)
JackB 0:04311b121ac4 41 {reg=reg-256;}
JackB 0:04311b121ac4 42 pc.printf("Aging offset : %i\r\n",reg);
JackB 0:04311b121ac4 43
JackB 0:04311b121ac4 44 pc.printf("OSF flag : %i",RTC.OSF());
JackB 0:04311b121ac4 45 pc.printf("\r\n");
JackB 0:04311b121ac4 46
JackB 0:04311b121ac4 47 RTC.readDate(&date,&month,&year);
JackB 0:04311b121ac4 48 pc.printf("date : %02i-%02i-%02i",date,month,year);
JackB 0:04311b121ac4 49 pc.printf("\r\n");
JackB 0:04311b121ac4 50
JackB 0:04311b121ac4 51 //RTC.setTime(19,48,45); // uncomment to set time
JackB 0:04311b121ac4 52
JackB 0:04311b121ac4 53 RTC.readTime(&hour,&minute,&second);
JackB 0:04311b121ac4 54 pc.printf("time : %02i:%02i:%02i",hour,minute,second);
JackB 0:04311b121ac4 55 pc.printf("\r\n");
JackB 0:04311b121ac4 56
JackB 0:04311b121ac4 57 //RTC.setDate(6,22,12,2012); // uncomment to set date
JackB 0:04311b121ac4 58
JackB 0:04311b121ac4 59 RTC.readDateTime(&dayOfWeek,&date,&month,&year,&hour,&minute,&second);
JackB 0:04311b121ac4 60 pc.printf("date time : %i / %02i-%02i-%02i %02i:%02i:%02i",dayOfWeek,date,month,year,hour,minute,second);
JackB 0:04311b121ac4 61 pc.printf("\r\n");
JackB 0:04311b121ac4 62
JackB 0:04311b121ac4 63 pc.printf("temperature :%6.2f",RTC.readTemp());
JackB 0:04311b121ac4 64 pc.printf("\r\n");
JackB 0:04311b121ac4 65 }
JackB 0:04311b121ac4 66 * @endcode
JackB 0:04311b121ac4 67 */
JackB 0:04311b121ac4 68
JackB 0:04311b121ac4 69 /*
JackB 0:04311b121ac4 70 http://www.cplusplus.com/reference/ctime/strftime/
JackB 0:04311b121ac4 71 %a Abbreviated weekday name * Thu
JackB 0:04311b121ac4 72 %A Full weekday name * Thursday
JackB 0:04311b121ac4 73 %b Abbreviated month name * Aug
JackB 0:04311b121ac4 74 %B Full month name * August
JackB 0:04311b121ac4 75 %d Day of the month, zero-padded (01-31) 23
JackB 0:04311b121ac4 76 %e Day of the month, space-padded ( 1-31) 23
JackB 0:04311b121ac4 77 %F Short YYYY-MM-DD date, equivalent to %Y-%m-%d 2001-08-23
JackB 0:04311b121ac4 78 %H Hour in 24h format (00-23) 14
JackB 0:04311b121ac4 79 %j Day of the year (001-366) 235
JackB 0:04311b121ac4 80 %m Month as a decimal number (01-12) 08
JackB 0:04311b121ac4 81 %M Minute (00-59) 55
JackB 0:04311b121ac4 82 %R 24-hour HH:MM time, equivalent to %H:%M 14:55
JackB 0:04311b121ac4 83 %S Second (00-61) 02
JackB 0:04311b121ac4 84 %T ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S 14:55:02
JackB 0:04311b121ac4 85 %u ISO 8601 weekday as number with Monday as 1 (1-7) 4
JackB 0:04311b121ac4 86 %V ISO 8601 week number (00-53) 34
JackB 0:04311b121ac4 87 %w Weekday as a decimal number with Sunday as 0 (0-6) 4
JackB 0:04311b121ac4 88 %W Week number with the first Monday as the first day of week one (00-53) 34
JackB 0:04311b121ac4 89 %X Time representation * 14:55:02
JackB 0:04311b121ac4 90 %y Year, last two digits (00-99) 01
JackB 0:04311b121ac4 91 %Y Year 2001
JackB 0:04311b121ac4 92
JackB 0:04311b121ac4 93 http://www.cplusplus.com/reference/ctime/tm/
JackB 0:04311b121ac4 94 Member Type Meaning Range
JackB 0:04311b121ac4 95 tm_sec int seconds after the minute 0-61*
JackB 0:04311b121ac4 96 tm_min int minutes after the hour 0-59
JackB 0:04311b121ac4 97 tm_hour int hours since midnight 0-23
JackB 0:04311b121ac4 98 tm_mday int day of the month 1-31
JackB 0:04311b121ac4 99 tm_mon int months since January 0-11
JackB 0:04311b121ac4 100 tm_year int years since 1900
JackB 0:04311b121ac4 101 tm_wday int days since Sunday 0-6 (0 = Sunday)
JackB 0:04311b121ac4 102 tm_yday int days since January 1 0-365
JackB 0:04311b121ac4 103 tm_isdst int Daylight Saving Time flag
JackB 0:04311b121ac4 104 The Daylight Saving Time flag (tm_isdst) is greater than zero if Daylight Saving Time is in effect,
JackB 0:04311b121ac4 105 zero if Daylight Saving Time is not in effect, and less than zero if the information is not available.
JackB 0:04311b121ac4 106 * tm_sec is generally 0-59. The extra range is to accommodate for leap seconds in certain systems.
JackB 0:04311b121ac4 107
JackB 0:04311b121ac4 108 http://www.epochconverter.com/programming/c
JackB 0:04311b121ac4 109 Convert from epoch to human readable date
JackB 0:04311b121ac4 110 time_t now;
JackB 0:04311b121ac4 111 struct tm ts;
JackB 0:04311b121ac4 112 char buf[80];
JackB 0:04311b121ac4 113 // Get current time
JackB 0:04311b121ac4 114 time(&now);
JackB 0:04311b121ac4 115 // Format time, "ddd yyyy-mm-dd hh:mm:ss zzz"
JackB 0:04311b121ac4 116 ts = *localtime(&now);
JackB 0:04311b121ac4 117 strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts);
JackB 0:04311b121ac4 118 printf("%s\n", buf);
JackB 0:04311b121ac4 119
JackB 0:04311b121ac4 120 Convert from human readable date to epoch
JackB 0:04311b121ac4 121 struct tm t;
JackB 0:04311b121ac4 122 time_t t_of_day;
JackB 0:04311b121ac4 123 t.tm_year = 2011-1900;
JackB 0:04311b121ac4 124 t.tm_mon = 7; // Month, 0 - jan
JackB 0:04311b121ac4 125 t.tm_mday = 8; // Day of the month
JackB 0:04311b121ac4 126 t.tm_hour = 16;
JackB 0:04311b121ac4 127 t.tm_min = 11;
JackB 0:04311b121ac4 128 t.tm_sec = 42;
JackB 0:04311b121ac4 129 t.tm_isdst = -1; // Is DST on? 1 = yes, 0 = no, -1 = unknown
JackB 0:04311b121ac4 130 t_of_day = mktime(&t);
JackB 0:04311b121ac4 131 printf("seconds since the Epoch: %ld\n", (long) t_of_day)
JackB 0:04311b121ac4 132
JackB 0:04311b121ac4 133 https://github.com/raburton/esp8266/blob/master/drivers/ds3231.c
JackB 0:04311b121ac4 134 https://github.com/raburton/esp8266/blob/master/drivers/ds3231.h
JackB 0:04311b121ac4 135
JackB 0:04311b121ac4 136 // https://www.unixtimestamp.com/
JackB 0:04311b121ac4 137
JackB 0:04311b121ac4 138 */
JackB 0:04311b121ac4 139 #include "mbed.h"
JackB 0:04311b121ac4 140 #include "macros.h"
JackB 0:04311b121ac4 141 #include "TableSummerTime.h"
JackB 0:04311b121ac4 142 #include "TableDayLight.h"
JackB 0:04311b121ac4 143
JackB 0:04311b121ac4 144 #ifndef __MCP79412__H_
JackB 0:04311b121ac4 145 #define __MCP79412__H_
JackB 0:04311b121ac4 146
JackB 0:04311b121ac4 147 // MCP7941x I2C Addresses
JackB 0:04311b121ac4 148 #define MCP79412_RTC_ADDR 0x6F
JackB 0:04311b121ac4 149 #define MCP79412_EEPROM_ADDR 0x57
JackB 0:04311b121ac4 150 #define MAC_LOCATION 0xF2 // Starts at 0xF0 but we are only interested in 6 bytes.
JackB 0:04311b121ac4 151 #define RTC_LOCATION 0x00
JackB 0:04311b121ac4 152
JackB 0:04311b121ac4 153 //MCP7941x Register Addresses
JackB 0:04311b121ac4 154 #define TIME_REG 0x00 // 7 registers, Seconds, Minutes, Hours, DOW, Date, Month, Year
JackB 0:04311b121ac4 155 #define DAY_REG 0x03 // the RTC Day register contains the OSCON, VBAT, and VBATEN bits
JackB 0:04311b121ac4 156 #define YEAR_REG 0x06 // RTC year register
JackB 0:04311b121ac4 157 #define CTRL_REG 0x07 // control register
JackB 0:04311b121ac4 158 #define CALIB_REG 0x08 // calibration register
JackB 0:04311b121ac4 159 #define UNLOCK_ID_REG 0x09 // unlock ID register
JackB 0:04311b121ac4 160 #define ALM0_REG 0x0A // alarm 0, 6 registers, Seconds, Minutes, Hours, DOW, Date, Month
JackB 0:04311b121ac4 161 #define ALM1_REG 0x11 // alarm 1, 6 registers, Seconds, Minutes, Hours, DOW, Date, Month
JackB 0:04311b121ac4 162 #define ALM0_DAY 0x0D // DOW register has alarm config/flag bits
JackB 0:04311b121ac4 163 #define PWRDWN_TS_REG 0x18 // power-down timestamp, 4 registers, Minutes, Hours, Date, Month
JackB 0:04311b121ac4 164 #define PWRUP_TS_REG 0x1C // power-up timestamp, 4 registers, Minutes, Hours, Date, Month
JackB 0:04311b121ac4 165 #define TIMESTAMP_SIZE 8 // number of bytes in the two timestamp registers
JackB 0:04311b121ac4 166 #define SRAM_START_ADDR 0x20 // first SRAM address
JackB 0:04311b121ac4 167 #define SRAM_END_ADDR 0x5F // last SRAM address
JackB 0:04311b121ac4 168 #define SRAM_SIZE 64 // number of bytes of SRAM
JackB 0:04311b121ac4 169 #define EEPROM_SIZE 128 // number of bytes of EEPROM
JackB 0:04311b121ac4 170 #define EEPROM_PAGE_SIZE 8 // number of bytes on an EEPROM page
JackB 0:04311b121ac4 171 #define UNIQUE_ID_ADDR 0xF0 // starting address for unique ID
JackB 0:04311b121ac4 172 #define UNIQUE_ID_SIZE 8 // number of bytes in unique ID
JackB 0:04311b121ac4 173
JackB 0:04311b121ac4 174 #define UNLOCK_ID_CODE1 0x55 // PROTECTED EEPROM UNLOCK SEQUENCE
JackB 0:04311b121ac4 175 #define UNLOCK_ID_CODE2 0xAA // PROTECTED EEPROM UNLOCK SEQUENCE
JackB 0:04311b121ac4 176
JackB 0:04311b121ac4 177 //Control Register bits
JackB 0:04311b121ac4 178 #define OUT 7 // sets logic level on MFP when not used as square wave output
JackB 0:04311b121ac4 179 #define SQWE 6 // set to enable square wave output
JackB 0:04311b121ac4 180 #define ALM1 5 // alarm 1 is active
JackB 0:04311b121ac4 181 #define ALM0 4 // alarm 0 is active
JackB 0:04311b121ac4 182 #define EXTOSC 3 // set to drive the RTC registers from an external oscillator instead of a crystal
JackB 0:04311b121ac4 183 #define RS2 2 // RS2:0 set square wave output frequency: 0==1Hz, 1==4096Hz, 2==8192Hz, 3=32768Hz
JackB 0:04311b121ac4 184 #define RS1 1
JackB 0:04311b121ac4 185 #define RS0 0
JackB 0:04311b121ac4 186
JackB 0:04311b121ac4 187 //Other Control Bits
JackB 0:04311b121ac4 188 #define ST 7 // Seconds register (TIME_REG) oscillator start/stop bit, 1==Start, 0==Stop
JackB 0:04311b121ac4 189 #define HR1224 6 // Hours register (TIME_REG+2) 12 or 24 hour mode (24 hour mode==0)
JackB 0:04311b121ac4 190 #define AMPM 5 // Hours register (TIME_REG+2) AM/PM bit for 12 hour mode
JackB 0:04311b121ac4 191 #define OSCON 5 // Day register (TIME_REG+3) oscillator running (set and cleared by hardware)
JackB 0:04311b121ac4 192 #define VBAT 4 // Day register (TIME_REG+3) set by hardware when Vcc fails and RTC runs on battery.
JackB 0:04311b121ac4 193 // VBAT is cleared by software, clearing VBAT also clears the timestamp registers
JackB 0:04311b121ac4 194 #define VBATEN 3 // Day register (TIME_REG+3) VBATEN==1 enables backup battery, VBATEN==0 disconnects the VBAT pin (e.g. to save battery)
JackB 0:04311b121ac4 195 #define LP 5 // Month register (TIME_REG+5) leap year bit
JackB 0:04311b121ac4 196
JackB 0:04311b121ac4 197 //Alarm Control Bits
JackB 0:04311b121ac4 198 #define ALMPOL 7 // Alarm Polarity: Defines the logic level for the MFP when an alarm is triggered.
JackB 0:04311b121ac4 199 #define ALMC2 6 // Alarm configuration bits determine how alarms match. See ALM_MATCH defines below.
JackB 0:04311b121ac4 200 #define ALMC1 5
JackB 0:04311b121ac4 201 #define ALMC0 4
JackB 0:04311b121ac4 202 #define ALMIF 3 // Alarm Interrupt Flag: Set by hardware when an alarm was triggered, cleared by software.
JackB 0:04311b121ac4 203 // Note ALM_MATCH_DAY triggers alarm at midnight
JackB 0:04311b121ac4 204 #define ALARM_0 0 // constants for calling functions
JackB 0:04311b121ac4 205 #define ALARM_1 1
JackB 0:04311b121ac4 206
JackB 0:04311b121ac4 207 #define MCP79412_SET 0
JackB 0:04311b121ac4 208 #define MCP79412_CLEAR 1
JackB 0:04311b121ac4 209 #define MCP79412_REPLACE 2
JackB 0:04311b121ac4 210
JackB 0:04311b121ac4 211 #define NTP_OFFSET 2208988800ULL
JackB 0:04311b121ac4 212
JackB 0:04311b121ac4 213 //convenience macros to convert to and from tm years
JackB 0:04311b121ac4 214 #define tmYearToCalendar(Y) ((Y) + 1970) // full four digit year
JackB 0:04311b121ac4 215 #define CalendarYrToTm(Y) ((Y) - 1970)
JackB 0:04311b121ac4 216 #define tmYearToY2k(Y) ((Y) - 30) // offset is from 2000
JackB 0:04311b121ac4 217 #define y2kYearToTm(Y) ((Y) + 30)
JackB 0:04311b121ac4 218
JackB 0:04311b121ac4 219 enum Sqwave {
JackB 0:04311b121ac4 220 SQWAVE_1_HZ,
JackB 0:04311b121ac4 221 SQWAVE_4096_HZ,
JackB 0:04311b121ac4 222 SQWAVE_8192_HZ,
JackB 0:04311b121ac4 223 SQWAVE_32768_HZ,
JackB 0:04311b121ac4 224 SQWAVE_NONE
JackB 0:04311b121ac4 225 };
JackB 0:04311b121ac4 226
JackB 0:04311b121ac4 227 enum {
JackB 0:04311b121ac4 228 ALM_MATCH_SECONDS,
JackB 0:04311b121ac4 229 ALM_MATCH_MINUTES,
JackB 0:04311b121ac4 230 ALM_MATCH_HOURS,
JackB 0:04311b121ac4 231 ALM_MATCH_DAY,
JackB 0:04311b121ac4 232 ALM_MATCH_DATE,
JackB 0:04311b121ac4 233 ALM_RESERVED_5,
JackB 0:04311b121ac4 234 ALM_RESERVED_6,
JackB 0:04311b121ac4 235 ALM_MATCH_DATETIME,
JackB 0:04311b121ac4 236 ALM_DISABLE
JackB 0:04311b121ac4 237 };
JackB 0:04311b121ac4 238
JackB 0:04311b121ac4 239 typedef struct DateTime {
JackB 0:04311b121ac4 240 int year;
JackB 0:04311b121ac4 241 int mon;
JackB 0:04311b121ac4 242 int mday;
JackB 0:04311b121ac4 243 int wday;
JackB 0:04311b121ac4 244 int yday;
JackB 0:04311b121ac4 245 int hour;
JackB 0:04311b121ac4 246 int min;
JackB 0:04311b121ac4 247 int sec;
JackB 0:04311b121ac4 248 };
JackB 0:04311b121ac4 249
JackB 0:04311b121ac4 250 class MCP79412 {
JackB 0:04311b121ac4 251 public:
JackB 0:04311b121ac4 252 DateTime datetime;
JackB 0:04311b121ac4 253 struct tm *t;
JackB 0:04311b121ac4 254 time_t secondsEpoch;
JackB 0:04311b121ac4 255 uint8_t second, minute, hour, dayOfWeek, dayOfMonth, month, year;
JackB 0:04311b121ac4 256
JackB 0:04311b121ac4 257 MCP79412(PinName sda, PinName scl);
JackB 0:04311b121ac4 258 void setI2Cfrequency(int freq);
JackB 0:04311b121ac4 259 bool getFlag(char reg, char mask, char *flag);
JackB 0:04311b121ac4 260 void setFlag(char reg, char bits, char mode);
JackB 0:04311b121ac4 261 int readRegister(char reg);
JackB 0:04311b121ac4 262 void readRegisters(char reg, char *outbuf, char length);
JackB 0:04311b121ac4 263 void writeRegister(int reg, char byte);
JackB 0:04311b121ac4 264 void writeRegisters(int reg, char *inbuf, char length);
JackB 0:04311b121ac4 265 void getMacAddress(char *mac_address);
JackB 0:04311b121ac4 266 void writeMacAddress(char *mac_address);
JackB 0:04311b121ac4 267 void unlockUniqueID();
JackB 0:04311b121ac4 268 void setRtcDateTime(uint8_t second, uint8_t minute, uint8_t hour, uint8_t dayOfWeek, uint8_t dayOfMonth, uint8_t month, uint8_t year);
JackB 0:04311b121ac4 269 void getRtcDateTime(uint8_t *second, uint8_t *minute, uint8_t *hour, uint8_t *dayOfWeek, uint8_t *dayOfMonth, uint8_t *month, uint8_t *year);
JackB 0:04311b121ac4 270 bool checkTimeLost(void);
JackB 0:04311b121ac4 271 void enableClock();
JackB 0:04311b121ac4 272 void disableClock();
JackB 0:04311b121ac4 273 void enableBattery();
JackB 0:04311b121ac4 274
JackB 0:04311b121ac4 275 void writeRamByte(uint8_t location, uint8_t data);
JackB 0:04311b121ac4 276 uint8_t writeRamBytes(uint8_t location, uint8_t *data, uint8_t length);
JackB 0:04311b121ac4 277 uint8_t readRamByte(uint8_t location);
JackB 0:04311b121ac4 278 uint8_t readRamBytes(uint8_t location, uint8_t *data, uint8_t length);
JackB 0:04311b121ac4 279
JackB 0:04311b121ac4 280 void writeSramByte(uint8_t location, uint8_t data);
JackB 0:04311b121ac4 281 uint8_t writeSramBytes(uint8_t location, uint8_t *data, uint8_t length);
JackB 0:04311b121ac4 282 uint8_t readSramByte(uint8_t location);
JackB 0:04311b121ac4 283 uint8_t readSramBytes(uint8_t location, uint8_t *data, uint8_t length);
JackB 0:04311b121ac4 284
JackB 0:04311b121ac4 285 void writeEepromByte(uint8_t location, uint8_t data);
JackB 0:04311b121ac4 286 uint8_t writeEepromBytes(uint8_t location, uint8_t *data, uint8_t length);
JackB 0:04311b121ac4 287 uint8_t readEepromByte(uint8_t location);
JackB 0:04311b121ac4 288 uint8_t readEepromBytes(uint8_t location, uint8_t *data, uint8_t length);
JackB 0:04311b121ac4 289
JackB 0:04311b121ac4 290 int calibRead(void);
JackB 0:04311b121ac4 291 void calibWrite(int value);
JackB 0:04311b121ac4 292 void readUniqueId(char *uniqueID);
JackB 0:04311b121ac4 293 void getEUI64(char *uniqueID);
JackB 0:04311b121ac4 294 bool powerFail(time_t *powerDown, time_t *powerUp);
JackB 0:04311b121ac4 295 void squareWave(Sqwave freq);
JackB 0:04311b121ac4 296 void setAlarm(uint8_t alarmNumber, time_t alarmTime);
JackB 0:04311b121ac4 297 void enableAlarm(uint8_t alarmNumber, uint8_t alarmType);
JackB 0:04311b121ac4 298 bool alarm(uint8_t alarmNumber);
JackB 0:04311b121ac4 299 void out(bool level);
JackB 0:04311b121ac4 300 void alarmPolarity(bool polarity);
JackB 0:04311b121ac4 301 bool isRunning(void);
JackB 0:04311b121ac4 302 void vbaten(bool enable);
JackB 0:04311b121ac4 303
JackB 0:04311b121ac4 304 // bool getSummerTime(void);
JackB 0:04311b121ac4 305 // int dayOfYearC(void);
JackB 0:04311b121ac4 306 // char * getSunRise(void);
JackB 0:04311b121ac4 307 // char * getSunSet(void);
JackB 0:04311b121ac4 308 // char * getDayLength(void);
JackB 0:04311b121ac4 309 // int getSunRiseMinute(void);
JackB 0:04311b121ac4 310 // int getSunSetMinute(void);
JackB 0:04311b121ac4 311 // bool checkSunRise(void);
JackB 0:04311b121ac4 312
JackB 0:04311b121ac4 313 void substr(char *s, char *d, int pos, int len);
JackB 0:04311b121ac4 314 char * substr(char *s, int pos, int len);
JackB 0:04311b121ac4 315
JackB 0:04311b121ac4 316 // Mbed dateTime
JackB 0:04311b121ac4 317 struct tm setSystemDateTime(uint8_t second, uint8_t minute, uint8_t hour, uint8_t dayOfMonth, uint8_t month, uint8_t year);
JackB 0:04311b121ac4 318 void getSystemDateTime(uint8_t *second, uint8_t *minute, uint8_t *hour, uint8_t *dayOfWeek, uint8_t *dayOfMonth, uint8_t *month, uint8_t *year);
JackB 0:04311b121ac4 319 void setRtcToSystemDateTime(void);
JackB 0:04311b121ac4 320 void setSystemToRtcDateTime(void);
JackB 0:04311b121ac4 321 void setRtcFromTm(struct tm *t);
JackB 0:04311b121ac4 322 struct tm getTmFromRtc(void);
JackB 0:04311b121ac4 323
JackB 0:04311b121ac4 324 time_t getSecondsEpoch(void);
JackB 0:04311b121ac4 325 void setSecondsEpoch(time_t t);
JackB 0:04311b121ac4 326
JackB 0:04311b121ac4 327 void getRtcDateTimeAsTm(void);
JackB 0:04311b121ac4 328 time_t convertDateTimeToTimestamp(uint8_t second, uint8_t minute, uint8_t hour, uint8_t dayOfMonth, uint8_t month, uint8_t year);
JackB 0:04311b121ac4 329 uint8_t getWeekdayFromDate(uint8_t dayOfMonth, uint8_t month, uint8_t year);
JackB 0:04311b121ac4 330
JackB 0:04311b121ac4 331 int bcd2dec(int k); // bcd to decimal conversion
JackB 0:04311b121ac4 332 int dec2bcd(int k); // decimal to bcd conversion
JackB 0:04311b121ac4 333 int decToBcd(int val);
JackB 0:04311b121ac4 334 int bcdToDec(int val);
JackB 0:04311b121ac4 335
JackB 0:04311b121ac4 336 private :
JackB 0:04311b121ac4 337 I2C _i2c;
JackB 0:04311b121ac4 338 char _address_RTC;
JackB 0:04311b121ac4 339 char buffer[32];
JackB 0:04311b121ac4 340 bool _error;
JackB 0:04311b121ac4 341
JackB 0:04311b121ac4 342
JackB 0:04311b121ac4 343 };
JackB 0:04311b121ac4 344
JackB 0:04311b121ac4 345 #endif