#include "SharedData.h"
#include "time.h"

/*
CLASS 
BluefinBattOutput

DESCRIPTION
SharedData interface for BluefinBatt data

AUTHOR
Rich Henthorn
*/

#define BluefinBattOutputName "BluefinBattOutput"

class BluefinBattOutput : public SharedData {

public:
  //battery states
  enum BattState {
	Unknown,
	Shutdown,
	Discharging,
	Charging,
	Balancing
  };
  enum FaultCode {
	Clear, 
        OverVolt, 
	UnderVolt, 
	OverCurrent,
	MaxCellOverVolt, 
	MinCellUnderVolt, 
	OverTemp, 
        WaterLeak, 
	HardwareProt,
	HardwareTransient, 
	WatchdogTimeout
  };

  struct Data {
    timespec sampleTime;
    enum BattState state;
    enum FaultCode fault;
    int   battSN;
    float voltage;
    float current;
    float temp;
    float minvoltage;
    float maxvoltage;
    int   waterleak;
    float capacity;
  };

  BluefinBattOutput(int num_batts,
		    Access access = NoAccess,
		    Boolean init = False);

  ~BluefinBattOutput();

  ////////////////////////////////////////////////////////////////////
  // Read output command from shared memory
  void read();


  ////////////////////////////////////////////////////////////////////
  // Write output command to shared memory
  void write();

  Data *data;

 private:
  int _num_batts;
};


