/**************************************************************************
 * Драйвер для INA219
 **************************************************************************/
#ifndef _INA219DRV_H_
#define _INA219DRV_H_
#include "ina219/ina219.h"
#include "device.h"
#include "timer_api.h"
#include "driver/i2c_drv.h"

typedef struct _ina219_data {
	union {
		signed short voltage; 	// Voltage, 1mV
		unsigned char 	vuc[2];
	} v;
	union {
		signed short current;	// Current, 50uA?
		unsigned char 	iuc[2];
	} i;
} INA219DATA, *PINA219DATA;

typedef struct _ina219drv {
	unsigned char status;
	unsigned char addr;			// адрес INA219 на шине I2C (формат 7 bit)
	signed char init;
	unsigned char tmp;

	unsigned short config;		// регистр конфигурации INA219
	unsigned short calibration;	// коэф. шунта для INA219

	unsigned short count;		// счетчик считанных значений
	unsigned short overrun;		// счет переполнений буфера

	unsigned short errs;		// счет ошибок на I2C
	unsigned short buf_idx;		// объем буфера pbuf[buf_idx+1], максимальный индекс-номер замера
	unsigned short buf_rx;		// индекс-номер ещё не считанного замера
	unsigned short buf_tx;		// индекс-номер для записи следующего замера
	PINA219DATA pbuf;
	gtimer_t timer;
	union {						// буфер
		unsigned char 	uc[4];
		unsigned short	us[2];
		signed short	ss[2];
		unsigned int	ui;
	} buf_i2c;
	volatile i2c_drv_t   i2c;
} INA219DRV, *PINA219DRV;


#define INA219_I2C_PIN_SDA	PC_4
#define INA219_I2C_PIN_SCL	PC_5
#define INA219_I2C_BUS_CLK	300000  //hz
#define INA219_TIMER TIMER3	// используемый таймер

#endif // _INA219DRV_H_
