#ifndef _DS1307_H_
#define _DS1307_H_

#include "i2c.h"

// address
#define DS1307_WRITE_ADDR     0xD0
#define DS1307_READ_ADDR      0xD1
// registers
#define DS1307_REG_SEC        0x00
#define DS1307_REG_MIN        0x01
#define DS1307_REG_HOUR       0x02
#define DS1307_REG_DAY        0x03
#define DS1307_REG_DATE       0x04
#define DS1307_REG_MONTH      0x05
#define DS1307_REG_YEAR       0x06
#define DS1307_CONFIG         0x07
// config bits
#define DS1307_OUT_ON         0b00010000
#define DS1307_OUT_1HZ        0b00000000
#define DS1307_OUT_4096HZ     0b00000001
#define DS1307_OUT_8192HZ     0b00000010
#define DS1307_OUT_32768HZ    0b00000011
#define DS1307_SQWOUT_H       0b00000000
#define DS1307_SQWOUT_L       0b10000000

#ifdef I2C_MULTISPEED
   #define DS1307_CLOCK                100000
   #define DS1307_Set_100kHz()          SSP2ADD = ((CLOCK_FREQ/4)/DS1307_CLOCK)-1
#endif

typedef union
{ 
   struct   
   {
      unsigned char Sec; 
      unsigned char Min; 
      unsigned char Hour; 
      unsigned char Day; 
      unsigned char Date; 
      unsigned char Month; 
      unsigned char Year; 
   };
} dt;


// prototypes
void WaitSSP(void);
void DS1307_WriteByte(unsigned int address, unsigned int data);
void DS1307_WriteData(unsigned int address, unsigned char * data, unsigned int count );
void DS1307_ReadByte(unsigned int address);
void DS1307_ReadData(unsigned int address, unsigned char* data, unsigned int count);
void DS1307_ReadDateTime(void);
void DS1307_ReadDate();
void DS1307_ReadDateStr(auto char * buffer );
void DS1307_ReadTime();
void DS1307_ReadTimeStr(auto char * buffer, int addDot );
void DS1307_SetDateTime( unsigned int year, unsigned int month, unsigned int date, unsigned int hour, unsigned int min, unsigned int sec );
void DS1307_DecodeDate(void);
void DS1307_DecodeTime(void);
void DS1307_DecodeDateTime(void);
void DS1307_Init(unsigned int config );

char BCDToDecimal(unsigned char n);
char DecimalToBCD(unsigned char n);

void DS1307_PrintUSART(void);


#endif
