Xadow Watch with RGB OLED

Dependents:   Xadow_Watch_RGBOLED Xadow_Watch_RGBOLED

DS1337.h

Committer:
loovee
Date:
2014-04-01
Revision:
0:9d7c6f478d8c

File content as of revision 0:9d7c6f478d8c:

/*
  DS1337.h - library for DS1337 rtc
*/

// ensure this library description is only included once
#ifndef DS1337_h
#define DS1337_h

// include types & constants of Wiring core API
#include "mbed.h"

typedef int8_t    byte;

// indices within the rtc_bcd[] buffer
#define DS1337_SEC  0
#define DS1337_MIN  1
#define DS1337_HR   2
#define DS1337_DOW  3
#define DS1337_DATE 4
#define DS1337_MTH  5
#define DS1337_YR   6

#define DS1337_BASE_YR      2000

#define DS1337_CTRL_ID      0xD0

#define I2C_FREQ            100000

// Define register bit masks
#define DS1337_CLOCKHALT    (1<<7)

#define DS1337_LO_BCD       0xf
#define DS1337_HI_BCD       0xf0

#define DS1337_HI_SEC       0x70
#define DS1337_HI_MIN       0x70
#define DS1337_HI_HR        0x30
#define DS1337_LO_DOW       0x07
#define DS1337_HI_DATE      0x30
#define DS1337_HI_MTH       0x30
#define DS1337_HI_YR        0xf0

#define DS1337_ARLM1        0x07
#define DS1337_ARLM1_LO_SEC 0xf
#define DS1337_ARLM1_HI_SEC 0x70
#define DS1337_ARLM1_LO_MIN 0x70
#define DS1337_ARLM1_HI_MIN 0xf

#define DS1337_SP           0x0E
#define DS1337_SP_EOSC      (1<<7)
#define DS1337_SP_RS2       (1<<4)
#define DS1337_SP_RS1       (1<<3)
#define DS1337_SP_INTCN     (1<<2)
#define DS1337_SP_A2IE      (1<<1)
#define DS1337_SP_A1IE      (1<<0)

#define DS1337_STATUS       0x0F
#define DS1337_STATUS_OSF   (1<<7)
#define DS1337_STATUS_A2F   (1<<1)
#define DS1337_STATUS_A1F   (1<<0)

/* Definitions for alarm repeat */
/* The private variable alarm_repeat holds the user's alarm repeat preference. However, the DS1337 encodes these in the topmost bit(s) of the 4 alarm registers. */
/* Splattering these bits across the alarm regs is handled in the writeAlarm() function. */
/* If DY/DT is set, the day field is interpreted as a DayOfWeek (1 ~ 7), else it is interpreted as a DayOfMonth.*/

/* user alarm_repeat bit mask:
       7   6   5    4       3      2       1     0
      [x   x   x   A1M4   DY/DT   A1M3   A1M2   A1M1]
*/

#define EVERY_SECOND       B00010111
#define EVERY_MINUTE       B00010110
#define EVERY_HOUR         B00010100
#define EVERY_DAY          B00010000
#define EVERY_WEEK         B00001000
#define EVERY_MONTH        B00000000


/* typedef struct {
  unsigned int year;
  unsigned char month;
  unsigned char day;
  unsigned char dayOfWeek;
  unsigned char hour;
  unsigned char minute;
  unsigned char second;
} TIME; */


// library interface description
class DS1337 {
    // user-accessible "public" interface
public:
    DS1337( PinName sda, PinName slc);

    void readTime(void);
    unsigned char getSeconds();
    unsigned char getMinutes();
    unsigned char getHours();
    unsigned char getDays();
    unsigned char getDayOfWeek();
    unsigned char getMonths();
    unsigned int getYears();

    void setSeconds(unsigned char);
    void setMinutes(unsigned char);
    void setHours(unsigned char);
    void setDays(unsigned char);
    void setDayOfWeek(unsigned char);
    void setMonths(unsigned char);
    void setYears(unsigned int);
    
    void setTime();


    void    start(void);
    void    stop(void);
    unsigned char getRegister(unsigned char registerNumber);
    void    setRegister(unsigned char registerNumber, unsigned char registerValue);
    //void  unsetRegister(unsigned char registerNumber, unsigned char registerMask);

    // library-accessible "private" interface
private:
    I2C     i2c;
    byte    time_set;
    byte alarm_repeat;
    byte    rtc_bcd[7]; // used prior to read/set DS1337 registers;
    void    read(void);
    void    save(void);
    byte bcd2bin(byte);
    byte bin2bcd(byte);
};

//extern DS1337 RTC;

#endif