Realtime clock library for DS1307 and DS3231m

Dependents:   vfd_modular_clock_mbed

Committer:
perjg
Date:
Mon Aug 10 03:16:52 2015 +0000
Revision:
2:6119507e6713
Parent:
1:3fe5649f1e02
Fixed compile error

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Backstrom 0:1602fdac44ec 1 /*
Backstrom 0:1602fdac44ec 2 * RTC library - mbed
Backstrom 0:1602fdac44ec 3 * (C) 2011-15 Akafugu Corporation
Backstrom 0:1602fdac44ec 4 *
Backstrom 0:1602fdac44ec 5 * This program is free software; you can redistribute it and/or modify it under the
Backstrom 0:1602fdac44ec 6 * terms of the GNU General Public License as published by the Free Software
Backstrom 0:1602fdac44ec 7 * Foundation; either version 2 of the License, or (at your option) any later
Backstrom 0:1602fdac44ec 8 * version.
Backstrom 0:1602fdac44ec 9 *
Backstrom 0:1602fdac44ec 10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY
Backstrom 0:1602fdac44ec 11 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
Backstrom 0:1602fdac44ec 12 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
Backstrom 0:1602fdac44ec 13 *
Backstrom 0:1602fdac44ec 14 */
Backstrom 0:1602fdac44ec 15
Backstrom 0:1602fdac44ec 16 #ifndef __DS3231M_H_
Backstrom 0:1602fdac44ec 17 #define __DS3231M_H_
Backstrom 0:1602fdac44ec 18
Backstrom 0:1602fdac44ec 19 #include "rtc.h"
Backstrom 0:1602fdac44ec 20
Backstrom 0:1602fdac44ec 21 // leap year calulator expects year argument as years offset from 1970
Backstrom 0:1602fdac44ec 22 #define LEAP_YEAR(Y) ( ((1970+Y)>0) && !((1970+Y)%4) && ( ((1970+Y)%100) || !((1970+Y)%400) ) )
Backstrom 0:1602fdac44ec 23 /* Useful Constants */
Backstrom 0:1602fdac44ec 24 #define SECS_PER_MIN (60UL)
Backstrom 0:1602fdac44ec 25 #define SECS_PER_HOUR (3600UL)
Backstrom 0:1602fdac44ec 26 #define SECS_PER_DAY (SECS_PER_HOUR * 24UL)
Backstrom 0:1602fdac44ec 27 #define DAYS_PER_WEEK (7UL)
Backstrom 0:1602fdac44ec 28 #define SECS_PER_WEEK (SECS_PER_DAY * DAYS_PER_WEEK)
Backstrom 0:1602fdac44ec 29 #define SECS_PER_YEAR (SECS_PER_WEEK * 52UL)
Backstrom 0:1602fdac44ec 30 #define SECS_YR_2000 (946684800UL) // the time at the start of y2k
Backstrom 0:1602fdac44ec 31
Backstrom 0:1602fdac44ec 32 class DS3231M : public RTC {
Backstrom 0:1602fdac44ec 33 public:
Backstrom 0:1602fdac44ec 34 DS3231M(I2C& i2c);
Backstrom 0:1602fdac44ec 35
Backstrom 0:1602fdac44ec 36 virtual void begin();
Backstrom 0:1602fdac44ec 37
Backstrom 0:1602fdac44ec 38 virtual time_t time();
Backstrom 0:1602fdac44ec 39 virtual struct tm* getTime();
Backstrom 0:1602fdac44ec 40 virtual void getTime(uint8_t* hour, uint8_t* min, uint8_t* sec);
Backstrom 0:1602fdac44ec 41
Backstrom 0:1602fdac44ec 42 virtual void setTime(time_t t);
Backstrom 0:1602fdac44ec 43 virtual void setTime(struct tm* tm);
Backstrom 0:1602fdac44ec 44 virtual void setTime(uint8_t hour, uint8_t min, uint8_t sec);
Backstrom 0:1602fdac44ec 45
Backstrom 0:1602fdac44ec 46 virtual void setAlarm(time_t t);
Backstrom 0:1602fdac44ec 47 virtual void setAlarm(uint8_t hour, uint8_t min, uint8_t sec);
Backstrom 0:1602fdac44ec 48 virtual struct tm* getAlarm(void);
Backstrom 0:1602fdac44ec 49 virtual void getAlarm(uint8_t* hour, uint8_t* min, uint8_t* sec);
Backstrom 0:1602fdac44ec 50 virtual bool checkAlarm(void);
Backstrom 0:1602fdac44ec 51
Backstrom 0:1602fdac44ec 52 virtual void SQWEnable(bool enable);
Backstrom 0:1602fdac44ec 53 virtual void SQWSetFreq(enum RTC_SQW_FREQ freq);
Backstrom 0:1602fdac44ec 54 virtual void Osc32kHzEnable(bool enable);
Backstrom 1:3fe5649f1e02 55
Backstrom 1:3fe5649f1e02 56 // Temperature
Backstrom 1:3fe5649f1e02 57 void getTemp(int8_t* i, uint8_t* f);
Backstrom 1:3fe5649f1e02 58 void forceTempConversion(uint8_t block);
Backstrom 0:1602fdac44ec 59
Backstrom 0:1602fdac44ec 60 private:
Backstrom 0:1602fdac44ec 61 I2C& m_i2c;
Backstrom 0:1602fdac44ec 62
Backstrom 0:1602fdac44ec 63 bool m_is_ds1307;
Backstrom 0:1602fdac44ec 64 bool m_is_ds3231;
Backstrom 0:1602fdac44ec 65
Backstrom 0:1602fdac44ec 66 uint8_t read_byte(uint8_t offset);
Backstrom 0:1602fdac44ec 67 void write_byte(uint8_t b, uint8_t offset);
Backstrom 0:1602fdac44ec 68 void write_addr(uint8_t addr);
Backstrom 0:1602fdac44ec 69 };
Backstrom 0:1602fdac44ec 70
Backstrom 0:1602fdac44ec 71 #endif // __DS3231M_H_