#include "amperimeter_ina169.h"

// driver para ler o valor da corrente baseado no in169
typedef struct {
	double r_shunt, r_load;
} tAmp;

static tAmp sensors[INA169_N_SENSORS]; // vetor de tipos de modelos de sensores a ser gerenciados

// inicializa os parametros para calculos para o modelo do sensor especificado
// parametros:	tidx: Descrimina o sensor a ser gerencicado
//				rs: Valor do resistor em ohms de shunt
//				rl: Valor do resistor em kohms de carga
void ina169_Init(uint tidx, double rs, double rl) {
	if (tidx >= INA169_N_SENSORS) return;
	sensors[tidx].r_shunt = rs;
	sensors[tidx].r_load = rl;
}

// para mais detalhes veja D:\meus_conhecimentos\_devices_misc__\sensores\sensor_corrente
// retorna com o valor da tensão lida no circuito correspondente ao ADC
double ina169_ValueVoltage(uint dec) {
	return (dec*INA169_AVCC)/(_BV(INA169_BIT_RESOLUTION)-1);
}

// converte para amperagem o valor lido na ponta de prova
//	tidx: Indice do sensor a ser lido: 0=sensor 1, 1=sensor2 e assim sucessivamente
//	adc: Valor adc lido do respectivo sensor
// retorna em microamperes
double ina169_ConvertToAmperage(uint tidx, uint adc) {
	if (tidx >= INA169_N_SENSORS) return 0;
	double vout;
	vout = amp_ValueVoltage(tidx, adc);
	return  (vout/(sensors[tidx].r_shunt*sensors[tidx].r_load))*1000000;
}
