#include "adc_8591.h"
#include <sstream>
#include <string>
Adc_8591::Adc_8591(Sensor_port port, Connection *connection, unsigned char adress):I2c(port, connection, LOWSPEED, i2c_address){
}
Adc_8591::~Adc_8591(){}
void Adc_8591::init(bool reply){
I2c::init(reply);
get_port_reading(0x00);
get_port_reading(0x00);
this->has_init = true;
}
//should be optimized to a single I2C poll
int Adc_8591::read(Result &result){
if(! (result.get_type() == ADC_RESULT)){
return 0;
}
if(!this->has_init){
init();
}
Result *temp = (Result *) &result;
Adc_ports *ports = (Adc_ports *) temp;
ports->port0 = get_port_reading(0x00);
ports->port1 = get_port_reading(0x01);
ports->port2 = get_port_reading(0x02);
ports->port3 = get_port_reading(0x03);
return 1;
}
int Adc_8591::get_port_reading(unsigned int port){
if(!this->has_init){
init();
}
unsigned char rx_buffer[I2C_BUFFER_SIZE];
unsigned char command[2];
command[0]=i2c_address;
command[1]=port;
i2c_write(&command[0], 2, 1);
wait_for_bytes(1);
i2c_read(&rx_buffer[0], 1);
return 0xff & rx_buffer[1];
}
Sensor_type Adc_8591::get_type(){
return ADC_8591_SENSOR;
}
std::string Adc_8591::print(){
std::stringstream out;
out << "P0=" << get_port_reading(0x00) << " P1=" + get_port_reading(0x01) << " P2=" + get_port_reading(0x02) << " P3=" + get_port_reading(0x03);
return out.str();
}