#include "ds1624.h"
#include "i2c_sw.h"

int ds1624_config(void)
{
	/* i2c start condition */
	i2c_start();
	
	/* sends slave address */
	i2c_send(DS1624_ADDRESS<<1);

	/* send access config command */
	i2c_send(0xac);	
	/* continuous conversion command */
	i2c_send(0x00);
	/* i2c stop condition */
	i2c_stop();
	
	/* no errors */
	return 0;
}

int ds1624_startconvert(void) 
{
	/* i2c start condition */
	i2c_start();
	
	/* sends slave address */
	i2c_send(DS1624_ADDRESS<<1); 
	/* continuous conversion command */
	i2c_send(0xee);
	/* i2c stop condition */
	i2c_stop();
	
	/* no errors */
	return 0;
}

float ds1624_readtemp(void) {
	unsigned char temp_data[2];
	
	/* i2c start condition */
	i2c_start();
	
	/* sends slave address + read */
	i2c_send(DS1624_ADDRESS<<1); 

	/* read temperature command */
	i2c_send(0xaa);
	
	i2c_start();
	/* sends slave address + read */
	i2c_send(DS1624_ADDRESS<<1|0x01);
		
	/* read two bytes from sensor */
	i2c_receive(temp_data, 2);
	
	/* i2c stop condition */
	i2c_stop();
	
	/* converts temperature  and returns */
	return (float)temp_data[0] + (float)((temp_data[1]>>3)*0.03125);
}
