/*
********************************************************
Copyright 2000 MBARI.
MBARI Proprietary Information. All rights reserved.
NOTE: This file is automatically generated.
DO NOT MODIFY.
********************************************************
*/

#ifndef __CARL_IF_SK_H
#define __CARL_IF_SK_H

#include "TaskServer.h"
#include "CARL_IF.h"

class CARL_IF_SK : public TaskServer {

  public:

  // Constructor for server with default name
  CARL_IF_SK();

  // Constructor for server with specific name
  CARL_IF_SK(const char *serverName);

  virtual ~CARL_IF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual DeviceIF::Status auto_iris(float target_light_level) = 0;
  virtual DeviceIF::Status iris_control(CARL_IF::IrisCmds cmd, short fstop) = 0;
  virtual Boolean motor_action() = 0;
  virtual Boolean is_recording() = 0;
  virtual DeviceIF::Status get_env_data(float *temp, float *humidity, float *fwd_h2o, float *aft_h20, short *h2o_alarm) = 0;
  virtual Boolean aja_ready() = 0;
  virtual DeviceIF::Status camera_bus_on() = 0;
  virtual DeviceIF::Status camera_bus_off() = 0;
  virtual Boolean is_camera_on() = 0;
  virtual DeviceIF::Status recorder_on() = 0;
  virtual DeviceIF::Status recorder_off() = 0;
  virtual DeviceIF::Status camera_lights_on() = 0;
  virtual DeviceIF::Status camera_lights_off() = 0;
  virtual short are_lights_on() = 0;
  virtual DeviceIF::Status light_level(short level) = 0;
  virtual DeviceIF::Status ctd_on() = 0;
  virtual DeviceIF::Status ctd_off() = 0;
  virtual Boolean is_ctd_on() = 0;
  virtual DeviceIF::Status get_status(CARL_IF::Status *status) = 0;
  virtual DeviceIF::Status start_recording() = 0;
  virtual DeviceIF::Status stop_recording() = 0;
  virtual DeviceIF::Status recorder_time(TimeIF::TimeSpec *recorder_time) = 0;
  virtual DeviceIF::Status get_timecode(float *timecode) = 0;
  virtual DeviceIF::Status available_media(short *media) = 0;
  virtual DeviceIF::Status set_clipname(CARL_IF::Clipname clipname) = 0;
  virtual DeviceIF::Status sync_time() = 0;
  virtual DeviceIF::Status record_mode() = 0;
  virtual DeviceIF::Status data_mode() = 0;
  
  // Declare callbacks corresponding to each method
  Boolean auto_irisCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean iris_controlCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean motor_actionCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean is_recordingCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean get_env_dataCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean aja_readyCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean camera_bus_onCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean camera_bus_offCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean is_camera_onCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean recorder_onCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean recorder_offCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean camera_lights_onCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean camera_lights_offCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean are_lights_onCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean light_levelCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean ctd_onCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean ctd_offCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean is_ctd_onCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean get_statusCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean start_recordingCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean stop_recordingCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean recorder_timeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean get_timecodeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean available_mediaCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean set_clipnameCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean sync_timeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean record_modeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean data_modeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  
  // Message structure pointer for each method
  CARL_IF::Auto_irisMsg *_auto_irisMsg;
  CARL_IF::Iris_controlMsg *_iris_controlMsg;
  CARL_IF::Motor_actionMsg *_motor_actionMsg;
  CARL_IF::Is_recordingMsg *_is_recordingMsg;
  CARL_IF::Get_env_dataMsg *_get_env_dataMsg;
  CARL_IF::Aja_readyMsg *_aja_readyMsg;
  CARL_IF::Camera_bus_onMsg *_camera_bus_onMsg;
  CARL_IF::Camera_bus_offMsg *_camera_bus_offMsg;
  CARL_IF::Is_camera_onMsg *_is_camera_onMsg;
  CARL_IF::Recorder_onMsg *_recorder_onMsg;
  CARL_IF::Recorder_offMsg *_recorder_offMsg;
  CARL_IF::Camera_lights_onMsg *_camera_lights_onMsg;
  CARL_IF::Camera_lights_offMsg *_camera_lights_offMsg;
  CARL_IF::Are_lights_onMsg *_are_lights_onMsg;
  CARL_IF::Light_levelMsg *_light_levelMsg;
  CARL_IF::Ctd_onMsg *_ctd_onMsg;
  CARL_IF::Ctd_offMsg *_ctd_offMsg;
  CARL_IF::Is_ctd_onMsg *_is_ctd_onMsg;
  CARL_IF::Get_statusMsg *_get_statusMsg;
  CARL_IF::Start_recordingMsg *_start_recordingMsg;
  CARL_IF::Stop_recordingMsg *_stop_recordingMsg;
  CARL_IF::Recorder_timeMsg *_recorder_timeMsg;
  CARL_IF::Get_timecodeMsg *_get_timecodeMsg;
  CARL_IF::Available_mediaMsg *_available_mediaMsg;
  CARL_IF::Set_clipnameMsg *_set_clipnameMsg;
  CARL_IF::Sync_timeMsg *_sync_timeMsg;
  CARL_IF::Record_modeMsg *_record_modeMsg;
  CARL_IF::Data_modeMsg *_data_modeMsg;
  
  // Determine max bytes required for message buffer
  virtual size_t maxRequestBytes();

  // Allocate buffer for messages, set pointers, etc
  virtual void allocateBuffers();

  private:

  // Initializer method called by constructors
  int init();

};

#endif

