/*
* ds1307.h 
* author: gtk
*/


#ifndef __DS1307_H__
#define __DS1307_H__

#include <avr/io.h>
#include <avr/interrupt.h>

typedef unsigned char BYTE;

//device
#define UC_DEVICE 0x68 // 1101000

// Command set
#define SECOND_ADDR 0x00
#define MINUTES_ADDR 0x01
#define HOURS_ADDR 0x02
#define RAM_ADDR 0x09 //08h nem irhato 
#define ALRM_ONOFF_RAM_ADDR 0x0D
#define ALRM_TIMESPAN_ADDR 0x0E
#define BRIGHTNESS_VAL_ADDR 0x0F
#define OCR_VAL_ADDR 0x10

//get_clock_arry[] index's
#define SEC 0
#define MIN 1
#define HRS 2


//0: sec, 1: min, 2: hours
BYTE get_clock_arry[3];
BYTE alarm_time_arry[3];

BYTE CH_data;

// I2C Start
// Returns 1 if OK
BYTE i2c_start(void);
// I2C Stop
void i2c_stop(void);
// I2C select device and read mode
// Returns 1 if OK
BYTE i2c_select_read(BYTE ucDevice);
// I2C select device and write mode
// Returns 1 if OK
BYTE i2c_select_write(BYTE ucDevice);
// I2C write bytes
// Returns 1 if OK
BYTE i2c_write(BYTE* ucData, BYTE ucLen);
// I2C read bytes
// Returns 1 if OK
BYTE i2c_read(BYTE* ucData, BYTE ucLen);
// ds1307 Write to Register
// Returns 1 if OK
BYTE ds1307_write_reg(BYTE ucDevice, BYTE ucCmd, BYTE* ucReg, BYTE ucLen);
// ds1307 Read from Register
// Returns 1 if OK
BYTE ds1307_read_reg(BYTE ucDevice, BYTE ucCmd, BYTE* ucReg, BYTE ucLen);


BYTE DecimalToBCD(BYTE n);
BYTE BCDToDecimal(BYTE n);
BYTE ds1307_set_seconds();
BYTE ds1307_set_minutes(BYTE *min);
BYTE ds1307_set_hours(BYTE *hour);
BYTE ds1307_read_clock(BYTE *m_perc_p, BYTE *perc_p, BYTE *ora_p);
BYTE ds1307_save_alarm_time(BYTE *em_perc_p, BYTE *eperc_p, BYTE *eora_p);
BYTE ds1307_get_alarm_time(BYTE *em_perc_p, BYTE *eperc_p, BYTE *eora_p);
BYTE ds1307_save_alrm_onoff(BYTE *alrm_onoff);
BYTE ds1307_get_alrm_onoff(BYTE *alrm_onoff);
BYTE ds1307_CH_detect();
BYTE ds1307_save_timespan(BYTE *data);
BYTE ds1307_get_timespan(BYTE *data);
BYTE ds1307_save_brightness_value(BYTE *data);
BYTE ds1307_get_brightness_value(BYTE *data);
BYTE ds1307_save_ocr_value(BYTE *data);
BYTE ds1307_get_ocr_value(BYTE *data);

#endif

