#include <unistd.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include <fcntl.h>
#include <errno.h>
//#include "epiBattOutput.h"
#include "SharedData.h"
#include "PeriodicTask.h"
#include "SerialDevice.h"
#include "time.h"
#include "Syslog.h"
#include "LayeredControlIF.h"
#include "epiBattLog.h"
#include "StreamSerialDriver.h"

/*
CLASS 
epiBatt

DESCRIPTION
Eagle Picher Battery Driver

AUTHOR
Hans Thomas
*/

class epiBatt : public PeriodicTask {
  
   friend class epiBattLog;
  
 public:
  
  epiBatt();
  epiBatt(SerialDevice *interface, float abortVoltage,
	  float terminateVoltage, Boolean exitFlag, const char *name);
  ~epiBatt();
  
 protected:
  
  // Initialize 
  DeviceIF::Status init();

  // Periodic callback
  void sample(void);

  epiBattLog *_log;
//  epiBattOutput *_output;
  SerialDevice *_device;
  float _abortVoltage;
  float _terminateVoltage;
  Boolean _aborted;
  Boolean _exitFlag;
  LayeredControlIF *layeredControl;
  
  //battery status info
  typedef struct {
  	float gasGauge; //amp-hours
  	float cellVoltage[8]; //volts
  	float current; //amps
  	int temp[9]; //degrees C
  	int rH; //relative humidity
  	int balance; //balance register
  	int tempAlertFlag; //temperature alert flag
  	int voltAlertFlag; //voltage alert flag
  	int batteryStateFlag; //battery state flags 
   } EPI_BATTERY_STATE;
   EPI_BATTERY_STATE _battState;
};
