#include "ds1305.h"
#include "logger_hw_defs.h"
#include "spi.h"
#include "timer.h"
#include "rprintf.h"
//#include <avr/signal.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "rtc.h"



void ds1305_write(u08 rtcregister, u08 data) {
	spiSetClockPhase(RTC_CLOCK_PHASE);
	spiSetBitrate(DEFAULT_SPI_DIV);

	// set up
	sbi(RTC_CS_PORT,RTC_CS_PIN);
	delay_us(1);
	spiTransferByte(rtcregister + 0x80);
	spiTransferByte(data);
	delay_us(1);
	cbi(RTC_CS_PORT,RTC_CS_PIN);
}

/* Intterupt from rtc not in use
SIGNAL(SIG_INTERRUPT2) {
	if (SECOND % 2) {
		cbi(PORTA, LED6);
	}
	else {
		sbi(PORTA, LED6);
	}
	EIMSK = EIMSK | (1<<2);
	ds1305_read(0x0B);
}
*/

void ds1305_init(void) {

	/* For setting interrupt every second
	//ds1305_read(0x0B);
	// write alarm registers to give signal every second
	//ds1305_write(DS1305_ALARM0_SECOND, (1 << 7));
	//ds1305_write(DS1305_ALARM0_MINUTE, (1 << 7));
	//ds1305_write(DS1305_ALARM0_HOUR, (1 << 7));
	//ds1305_write(DS1305_ALARM0_DAY, (1 << 7));
	//ds1305_write(DS1305_CONTROL_REGISTER,(1 << DS1305_CONTROL_INTCN) | (1 << DS1305_CONTROL_AIE0));
	*/
	ds1305_write(DS1305_CONTROL_REGISTER,0x00);

	timerPause(25);

	//ds1305_write(DS1305_CONTROL_REGISTER,(1 << DS1305_CONTROL_INTCN) | (1 << DS1305_CONTROL_AIE0));
	ds1305_write(DS1305_CONTROL_REGISTER,0x00);

	//rprintf("ds1305 control: %u\r\n",ds1305_read(DS1305_CONTROL_REGISTER));
	//rprintf("ds1305 status: %u\r\n",ds1305_read(DS1305_STATUS_REGISTER));

	// enable alarm0
	//ds1305_write(DS1305_ALARM0_SECOND,0x8A);
}

u08 ds1305_read(u08 rtcregister) {
	u08 data;

	spiSetClockPhase(RTC_CLOCK_PHASE);
	spiSetBitrate(DEFAULT_SPI_DIV);

	sbi(RTC_CS_PORT,RTC_CS_PIN);
	delay_us(1);
	spiTransferByte(rtcregister);
	data = spiTransferByte(0x00);
	delay_us(1);
	cbi(RTC_CS_PORT,RTC_CS_PIN);

	return data;
}
