#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 "BluefinBattOutput.h"
#include "SharedData.h"
#include "PeriodicTask.h"
#include "SerialDevice.h"
#include "time.h"
#include "Syslog.h"
#include "BluefinBattLog.h"
#include "StreamSerialDriver.h"

//#define BAUD 4800
//#define PARITY "NONE"
//#define STOP_BITS 1
//#define DATA_BITS 8
//#define READ_TIMEOUT 100

//#define VOLTAGE_MSG "$4RD\n"
//#define CURRENT_MSG "$2RD\n"

/*
CLASS 
BluefinBatt

DESCRIPTION
Bluefin Battery Driver

AUTHOR
Rich Henthorn

*/

class BluefinBatt : public PeriodicTask {
  
  friend class BluefinBattLog;
  
 public:
  
  BluefinBatt();
  BluefinBatt(SerialDevice *interface, int numBatts, float abortVoltage);
  ~BluefinBatt();
  
 protected:
  
  enum DataType {
    CurrentData,
    VoltageData
  };

  // Initialize 
  DeviceIF::Status init();

  // Periodic callback
  void sample(void);

  // Read specified data type
  int getData(DataType dataType);

  int _numBatts;
  BluefinBattLog *_log;
  BluefinBattOutput *_output;
  SerialDevice *_device;
  float _abortVoltage;
  Boolean _aborted;
};
