/****************************************************************************/
/* Copyright (c) 2014 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : ModtronixLog.h                                                */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 12/07/2014                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#ifndef _ModtronixLog_H
#define _ModtronixLog_H

#include "DataLogWriter.h"
#include "FloatData.h"
#include "IntegerData.h"

class Modtronix;

#define ModtronixLogName "modtronixlog"

/*
CLASS
ModtronixLog

DESCRIPTION
Logs Modtronix data through the DataLogWriter interface.

To use this class, instantiate an instance within a Modtronix object
and periodically invoke the write() method:
<pre>

  ModtronixLog *log = new ModtronixLog(this, DataLog::AsciiFormat);

  [...other stuff...]

  // Log the data
  log->write();

</pre>
AUTHOR
Henthorn
*/
class ModtronixLog : public DataLogWriter {

public:

  ///////////////////////////////////////////////////////////////////
  // Constructor
  // [input] fileFormat: Specifies either DataLog::AsciiFormat or
  //         DataLog::BinaryFormat.
  //Log(Modtronix *mb, DataLog::FileFormat fileFormat);
  ModtronixLog(Modtronix *m, DataLog::FileFormat fileFormat,
       const char* postfix = "");

  ~ModtronixLog();

protected:

  ///////////////////////////////////////////////////////////////////
  // Set values in record array elements. This virtual method is called
  // by DataLogWriter::write()
  virtual void setFields();

  void init(void);

  ///////////////////////////////////////////////////////////////////
  // setFields() accesses the data to be logged from this PSA916
  // object.
  Modtronix *_mod;


private:

  // Indicates that the modtronix board initialized and ready
  IntegerData *_mod_ready;
  IntegerData *_mod_comms;

  // Light status
  //
  IntegerData *_mod_light_level;
  IntegerData *_mod_light_power_1;
  IntegerData *_mod_light_power_2;
  IntegerData *_mod_light_power_3;
  IntegerData *_mod_light_power_4;

  // PWM status (light levels)
  //
  IntegerData *_mod_pwm_mode;
  IntegerData *_mod_pwm_freq;
  IntegerData *_mod_pwm_value;

  // Recorder/Camera power
  //
  IntegerData *_mod_camera_power;
  IntegerData *_mod_recorder_power;
  IntegerData *_mod_recorder_ready;
  IntegerData *_mod_ctd_power;

  // Env data and alarms
  //
  FloatData *_mod_humidity;
  FloatData *_mod_temp;
  FloatData *_mod_h2o_fwd;
  FloatData *_mod_h2o_aft;
  IntegerData *_mod_h2o_alarm;
  FloatData *_mod_sw0, *_mod_sw1, *_mod_sw2;

  // Video analog data
  //
  FloatData *_mod_video_mean;
  FloatData *_mod_video_max;

  // Motor stuff
  IntegerData *_ez_motor_position;
  IntegerData *_ez_motor_action;

};

#endif
