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

#include "System.h"
#include "CARL_IF_SK.h"
#include "Attributes.h"
#include "AttributeParser.h"
#include "DeviceInterface.h"

/*
CLASS
SimulatedCarl

DESCRIPTION
Server Interface for video CAmera Recorder and Logger

AUTHOR
Henthorn

*/

class SimulatedCarl : public CARL_IF_SK {

public:

  SimulatedCarl(const char* configFileName);
  ~SimulatedCarl();
  
  virtual DeviceIF::Status initialize();

protected:

  virtual DeviceIF::Status get_status(CARL_IF::Status *status);
  virtual DeviceIF::Status get_env_data(float *temp, float *humidity,
                                        float *fwd_h2o, float *aft_h2o,
                                        short *h2o_alarm);
  virtual DeviceIF::Status camera_bus_on();
  virtual DeviceIF::Status camera_bus_off();
  virtual Boolean is_camera_on();
  virtual DeviceIF::Status recorder_on();
  virtual DeviceIF::Status recorder_off();
  virtual Boolean is_recording();
  virtual Boolean aja_ready();
  virtual DeviceIF::Status camera_lights_on();
  virtual DeviceIF::Status camera_lights_off();
  virtual short are_lights_on();
  virtual DeviceIF::Status light_level(short level);
  virtual DeviceIF::Status ctd_on();
  virtual DeviceIF::Status ctd_off();
  virtual Boolean is_ctd_on();
  virtual DeviceIF::Status start_recording();
  virtual DeviceIF::Status stop_recording();
  virtual DeviceIF::Status recorder_time(TimeIF::TimeSpec *ts);
  virtual DeviceIF::Status sync_time();
  virtual DeviceIF::Status record_mode();
  virtual DeviceIF::Status data_mode();
  virtual DeviceIF::Status get_timecode(float *timecode);
  virtual DeviceIF::Status available_media(short *media);
  virtual DeviceIF::Status set_clipname(CARL_IF::Clipname clipname);
  virtual DeviceIF::Status iris_control(CARL_IF::IrisCmds cmd, short fstop);
  virtual DeviceIF::Status auto_iris(float sensor_voltage);
  virtual Boolean motor_action();

  int SimulatedCarl::spawnAuxTasks();
  Boolean _recorderPower, _recording, _cameraPower, _lightPower;
  short _lightLevel;


};

#endif
