#include "mcp4725.hpp"

MCP4725::MCP4725(pwrd_md power_down_mode,
		 i2c_addr address,
		 i2c_write_n_t i2c_write) :
			power_down_mode(power_down_mode),
			address(address),
			i2c_write(i2c_write)
{
	uint8_t temp[6];

      	temp[0] = write_dac_and_eeprom | (power_down_mode << 1);
     	temp[1] = static_cast<uint8_t>(dac_value >> 4);
     	temp[2] = static_cast<uint8_t>(dac_value << 4);
	temp[3] = temp[0];
	temp[4] = temp[1];
	temp[5] = temp[2];

	i2c_write(address, temp,6);
}

MCP4725::MCP4725(i2c_addr address,
		 i2c_write_n_t i2c_write)
			power_down_mode(MCP4725::normal),
			address(address),
			i2c_write(i2c_write)
{	
	uint8_t temp[6];

      	temp[0] = write_dac_and_eeprom | (power_down_mode << 1);
     	temp[1] = static_cast<uint8_t>(dac_value >> 4);
     	temp[2] = static_cast<uint8_t>(dac_value << 4);
	temp[3] = temp[0];
	temp[4] = temp[1];
	temp[5] = temp[2];

	i2c_write(address, temp, 6);
}

MCP4725::~MCP4725()
{

}

void MCP4725::operator=(uint16_t dac_value)
{
	uint8_t temp[3];
	this.dac_value = dac_value;
	
	temp[0] = write_dac | (power_down_mode << 1);
	temp[1] = static_cast<uint8_t>(dac_value >> 4);
	temp[2] = static_cast<uint8_t>(dac_value << 4);

	i2c_write(address, temp, 3);
}

void MCP4725::operator==(uint16_t dac_and_eeprom_value)
{
	uint8_t temp[6];
	dac_value = dac_and_eeprom_value;
	eeprom_value = dac_value;

	temp[0] = write_dac_and_eeprom | (power_down_mode << 1); 
}

void MCP4725::write_dac(uint16_t dac_value)
{
	&this = dac_value;
}

void MCP4725::write_dac_and_eeprom(uint16_t dac_and_eeprom_value)
{
	&this == dac_and_eeprom_value;
}


