#include "InstrumentIF.idl"
#include "TimeIF.idl"

/*
CLASS
LiPolyBatteryIF

DESCRIPTION
Task Interface to LiPolyBattery device driver.

AUTHOR
Christenson

2001.05.20 Christenson, Version 1.0.
2001.06.25 Paley, Version 1.1: added getNumPacks(), getNumCells(),
	   getNumTempSensors()
2001.07.26 Christenson, Version 1.2: added ability for driver
           to generate battery flags.

*/

interface LiPolyBatteryIF : InstrumentIF {

  // Problem Action
  enum PROBLEM_ACTION {
    Ignore=0,
    Warn=1,
    Abort=2
  };

  // Battery Pack Limits
  enum PACK_LIMITS {
    maxNumberOfBatteryPacks = 2,
    maxNumberOfTempSensors = 10,
    maxNumberOfCells = 16
  };

  typedef sequence<long, 2> LongArray;
  typedef sequence<double, 2> DoubleArray;
  typedef sequence<double, 10> DoubleArrayTemp;
  typedef sequence<double, 16> DoubleArrayCell;
  typedef sequence<long, 8> Flags;


  struct FlagStructure {
    Flags flags;
  };

  struct TempStructure {
    DoubleArrayTemp value;
  };


  typedef sequence<FlagStructure,16> FlagsArrayCell;
  struct CellStructure {
    DoubleArrayCell value;
    FlagsArrayCell cell;
  };

  typedef sequence<FlagStructure,2> FlagsArray;
  typedef sequence<TempStructure,2> TempArray;
  typedef sequence<CellStructure,2> CellArray;

  Status getGlobalConfigValues( out long driverSetsBatteryFlags,
				out long ignoreWarnAbortFlag,
				out long numberOfBatteryPacks,
				out long requiredNumberOfBatteryPacks );

  Status getPackConfigValues( out LongArray packAddress,
			      out LongArray numberOfCells,
			      out LongArray numberOfTempSensors,
			      out DoubleArray refBattVoltage,
			      out DoubleArray refTempVoltage,
			      out DoubleArray refCurrVoltage,
			      out DoubleArray refPackVoltage,
			      out DoubleArray cellUnderVoltage,
			      out DoubleArray cellLowVoltage,
			      out DoubleArray cellOverVoltage );

  Status getPackStatus( out DoubleArray packVoltage,
			out DoubleArray packCurrent,
			out FlagsArray packState,
			out FlagsArray packAlarms );

  Status getCellStatus( out CellArray cellVoltage );

  Status getTempStatus( out TempArray cellTemperature );

  // DAP added 6/25/01
  Status getNumPacks( out long numberOfBatteryPacks);
  Status getNumCells( out LongArray numberOfCells);
  Status getNumTempSensors (out LongArray numberOfTempSensors);
  //end DAP add

  Status updateBatteryStatus();
  Status updateType0x01();
  Status updateType0x02( in long packCount );
  Status updateType0x03Cell( in long packCount );
  Status updateType0x03Temp( in long packCount );
  Status updateType0x04();
  Status updateType0x05();
  Status updateType0x06( in long packCount );

};

