/****************************************************************************/
/* Copyright (c) 2014 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : SimulatedCarl.cc                                                 */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 11/07/2014                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include <process.h>

#include "Syslog.h"
#include "SimulatedCarl.h"
#include "StringAttribute.h"
#include "IntegerAttribute.h"
#include "FloatAttribute.h"

/*
CLASS
SimulatedCarl

DESCRIPTION
Server Interface for video CAmera Recorder and Logger

AUTHOR
Henthorn

*/

SimulatedCarl::SimulatedCarl(const char* configFileName)
{
#if 0
   : _attributes(CARL_IFServerName)
   // Load attributes from config file
   //
   _attributes.add(new StringAttribute("KiProIP", "KiProIP",
               &_aja_ip, "134.89.32.54"));

   _attributes.add(new StringAttribute("ModtronixIP", "ModtronixIP",
               &_mod_ip, "134.89.32.55"));

   _attributes.add(new StringAttribute("ModtronixPort", "ModtronixPort",
               &_mod_port, "54123"));

   _attributes.add(new IntegerAttribute("ModtronixPeriod", "Sample period",
               &_mod_period, -1L));

   AttributeParser::parse(configFileName, &_attributes);

   System::copyToLogDir(configFileName);

   Syslog::write("KiPro server set to %s", _aja_ip);
   _aja = new KiPro("aja", _aja_ip);
   _msgQ = new ModtronixMsg();

   _mod_output  = new ModtronixOutput();
#endif
}

SimulatedCarl::~SimulatedCarl()
{

}
  
int SimulatedCarl::spawnAuxTasks()
{
   return 0;
}


DeviceIF::Status SimulatedCarl::initialize()
{
   Syslog::write("SimulatedCarl initialized!");
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::get_env_data(float *temp, float *humidity,
                                          float *fwd_h2o, float *aft_h2o,
                                          short *h2o_alarm)
{
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::auto_iris(float sensor_voltage)
{
  return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::camera_bus_on()
{
   _cameraPower = True;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::camera_bus_off()
{
   _cameraPower = False;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::camera_lights_on()
{
   _lightPower = True;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::camera_lights_off()
{
   _lightPower = False;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::light_level(short level)
{
   _lightLevel = level;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::ctd_on()
{
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::ctd_off()
{
   return DeviceIF::Ok;
}

Boolean SimulatedCarl::is_ctd_on()
{
   return True;
}

DeviceIF::Status SimulatedCarl::recorder_on()
{
   _recorderPower = True;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::recorder_off()
{
   _recorderPower = False;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::start_recording()
{
   Syslog::write("SimulatedCarl::start_recording()...");
   _recording = True;

   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::stop_recording()
{
   Syslog::write("SimulatedCarl::stop_recording()...");
   _recording = False;
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::recorder_time(TimeIF::TimeSpec *ts)
{
   ts->seconds = 123;
   ts->nanoSeconds = 456;
   return DeviceIF::Ok;
}

Boolean SimulatedCarl::is_camera_on()
{
   return _cameraPower;
}

Boolean SimulatedCarl::aja_ready()
{
   return _recorderPower;
}

Boolean SimulatedCarl::is_recording()
{
   return _recording;
}

short SimulatedCarl::are_lights_on()
{
   if( _lightPower )
      return _lightLevel*100+15;
   else
      return 0;
}

DeviceIF::Status SimulatedCarl::sync_time()
{
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::record_mode()
{
   return DeviceIF::Ok;
}

DeviceIF::Status SimulatedCarl::data_mode()
{
   return DeviceIF::Ok;
}

///////////////////////////////////////////////////////////////////
// Get the Ki Pro timecode
//
DeviceIF::Status SimulatedCarl::get_timecode(float *timecode)
{
   Syslog::write("SimulatedCarl::get_timecode()");
   return DeviceIF::Ok;
}

///////////////////////////////////////////////////////////////////
// Get the remaining media from the Ki Pro
//
DeviceIF::Status SimulatedCarl::available_media(short *media)
{
   Syslog::write("SimulatedCarl::available_media()");
   *media = 90;
   return DeviceIF::Ok;
}

///////////////////////////////////////////////////////////////////
// Set the Ki Pro clip name
//
DeviceIF::Status SimulatedCarl::set_clipname(CARL_IF::Clipname clipname)
{
   Syslog::write("SimulatedCarl::set_clipname()");
   return DeviceIF::Ok;
}

///////////////////////////////////////////////////////////////////
// Get the CARL status
//
DeviceIF::Status SimulatedCarl::get_status(CARL_IF::Status *s)
{
   return DeviceIF::Ok;
}

///////////////////////////////////////////////////////////////////
// Control of the Iris motor controller
//
DeviceIF::Status SimulatedCarl::iris_control(CARL_IF::IrisCmds cmd, short fstop)
{
   return DeviceIF::Ok;
}

virtual Boolean SimulatedCarl::motor_action()
{
   Syslog::write("SimulatedCarl::motor_action");
   return False;
}

