/****************************************************************************/
/* Copyright (c) 2008 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  : Camera Log Class                                              */
/* Filename : CameraLog.h                                                   */
/* Author   : rsm                                                           */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 05/01/2008                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/

#ifndef CAMERALOG_H
#define CAMERALOG_H

#define CameraLogName "camera"

#include "DataLogWriter.h"
#include "IntegerData.h"
#include "TimeTag.h"
#include "SimulatedCameraServer.h"
#include "TimeP.h"
#include "Syslog.h"
#include "ShortData.h"
#include "DoubleData.h"

class Camera;
class SimulatedCameraServer;

/** Writes camera device data log. */
class CameraLog: public DataLogWriter {

public:

  ///////////////////////////////////////////////////////////////////
  // Constructor
  // [input] fileFormat: Specifies either DataLog::AsciiFormat or 
  //         DataLog::BinaryFormat.
  CameraLog(Camera                *camera, DataLog::FileFormat fileFormat);
  CameraLog(SimulatedCameraServer *camera, DataLog::FileFormat fileFormat);

  ~CameraLog();

protected:
  /** Camera driver instance*/
  Camera *_driver;
  /** simulated camera server instance*/
  SimulatedCameraServer *_simServer;

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

  void init();
  /** image number(?) data */
  IntegerData *_num;
  /** latitude data */
  DoubleData  *_lat;
  /** longitude data */
  DoubleData  *_lon;
  /** depth data */
  DoubleData  *_depth;
  /** ? data */
  DoubleData  *_dmg;

};

#endif
