x
MCP79412.h@0:04311b121ac4, 2018-07-23 (annotated)
- Committer:
- JackB
- Date:
- Mon Jul 23 12:24:33 2018 +0000
- Revision:
- 0:04311b121ac4
MCP79412
Who changed what in which revision?
User | Revision | Line number | New 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 |