#include "DataLogWriter.h"
#include "epiBattLog.h"
#include "epiBatt.h"
#include "TimeP.h"
#include "Syslog.h"

epiBattLog::epiBattLog(epiBatt *batt, 
	               DataLog::FileFormat fileFormat)
           :DataLogWriter(epiLogName, fileFormat, AutoTimeStamp) 
{
  char buf[100];
  setMnemonic("epiBattLog");
  Boolean debug = False;

  // Create and initialize data structures for each battery in the array.
  // And setup units and longname fields for logging
  //
  _data = new struct battdata;

  addField((_data
  for (int i = 0; i < _numBatts; i++)
  addField((_data.gasGauge = new DoubleData("gasGauge")));
  _data.gasGauge->setUnits("Ah");
  _data.gasGauge->setLongName("Elapsed Capacity in Ah");

  for (int i=0;i<8;i++) {
	sprintf(buf, "voltage_%d", i);
	addField((_data.cellVoltage[i] = new DoubleData(buf)));
	_data.cellVoltage[i]->setUnits("Volts");
  }

  addField((_data.current = new DoubleData("current");
  _data.current->setUnits("Amps");

  _: 

  _bluefinBatt = bluefinBatt;
}


BluefinBattLog::~BluefinBattLog()
{
  for (int i = 0; i < _numBatts; i++) {
    delete _data[i].voltage;
    delete _data[i].current;
    delete _data[i].temp;
    delete _data[i].minvoltage;
    delete _data[i].maxvoltage;
    delete _data[i].waterleak;
    delete _data[i].capacity;
    delete _data[i].depth;
  }

  delete _data;
}


void BluefinBattLog::setFields()
{

  // Set values
  for (int i = 0; i < _numBatts; i++)
  {
    _data[i].voltage->setValue(_bluefinBatt->_output->data[i].voltage);
    _data[i].current->setValue(_bluefinBatt->_output->data[i].current);
    _data[i].temp->setValue(_bluefinBatt->_output->data[i].temp);
    _data[i].minvoltage->setValue(_bluefinBatt->_output->data[i].minvoltage);
    _data[i].maxvoltage->setValue(_bluefinBatt->_output->data[i].maxvoltage);
    _data[i].waterleak->setValue(_bluefinBatt->_output->data[i].waterleak);
    _data[i].capacity->setValue(_bluefinBatt->_output->data[i].capacity);
    _data[i].depth->setValue(_bluefinBatt->_depth); // Depth is not in output record
  }

}

