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

#ifndef __CtdIF_H
#define __CtdIF_H

#include "TaskInterface.h"

#include "InstrumentIF.h"
#include "TimeIF.h"

#define CtdIFServerName "CtdIFServer"

class CtdIF : public InstrumentIF {

  friend class CtdIF_SK;

  public:

  
  
  
  CtdIF(const char *name, int timeout = 10);

  CtdIF(const char *name, const char *serverName, int timeout = 10);

  ~CtdIF();

  /////////////////////////////////////////////////////////
  // Get all Data from CTD Simultaneously
  DeviceIF::Status get_CTD_data(float *conductivity, float *temperature, float *depth, float *tfreq, float *cfreq, TimeIF::TimeSpec *conductivityTime, TimeIF::TimeSpec *temperatureTime, float *v1, float *v2, float *v3, float *v4, float *v5, float *v6);

  ////////////////////////////////////////////////////////
  // Get Conductivity Data
  DeviceIF::Status conductivity(float *cond, float *cfreq, TimeIF::TimeSpec *sampleTime);

  ///////////////////////////////////////////////////////////////////
  // Get Temperature
  DeviceIF::Status temperature(float *temp, float *tfreq, TimeIF::TimeSpec *sampleTime);

  ///////////////////////////////////////////////////////////////////
  // Get external Voltages
  DeviceIF::Status voltages(float *v1, float *v2, float *v3, float *v4, float *v5, float *v6);

  
  protected:

  // Message codes for each method
  enum CtdIFMsgCode {
    Get_CTD_dataMsgCode = 8,
    ConductivityMsgCode,
    TemperatureMsgCode,
    VoltagesMsgCode
  };

  // Define message structure for each method
  struct Get_CTD_dataMsg : Request, Reply {
    DeviceIF::Status returnVal;
    float conductivity;
    float temperature;
    float depth;
    float tfreq;
    float cfreq;
    TimeIF::TimeSpec conductivityTime;
    TimeIF::TimeSpec temperatureTime;
    float v1;
    float v2;
    float v3;
    float v4;
    float v5;
    float v6;
  
  } _get_CTD_dataMsg;

  struct ConductivityMsg : Request, Reply {
    DeviceIF::Status returnVal;
    float cond;
    float cfreq;
    TimeIF::TimeSpec sampleTime;
  
  } _conductivityMsg;

  struct TemperatureMsg : Request, Reply {
    DeviceIF::Status returnVal;
    float temp;
    float tfreq;
    TimeIF::TimeSpec sampleTime;
  
  } _temperatureMsg;

  struct VoltagesMsg : Request, Reply {
    DeviceIF::Status returnVal;
    float v1;
    float v2;
    float v3;
    float v4;
    float v5;
    float v6;
  
  } _voltagesMsg;

};

#endif

