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

#ifndef __DepthSensorIF_H
#define __DepthSensorIF_H

#include "TaskInterface.h"

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

#define DepthSensorIFServerName "DepthSensorIFServer"

class DepthSensorIF : public InstrumentIF {

  friend class DepthSensorIF_SK;

  public:

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

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

  ~DepthSensorIF();

  /*
  CLASS 
  DepthSensorIF
  
  DESCRIPTION
  InstrumentIF for depth sensor device driver
  
  AUTHOR
  John O'Rieffel
  
  (with much inspiration from CompassIF by OReilly)
  
  */
  /////////////////////////////////////////////////////////
  // Depth
  // [output] value: depth
  // [output] time: Sampling time
  DeviceIF::Status depth(double *value, TimeIF::TimeSpec *sampleTime);

  /////////////////////////////////////////////////////////
  // Temperature
  // [output] value: temperature
  // [output] time: sampling time
  DeviceIF::Status temp(double *value, TimeIF::TimeSpec *sampleTime);

  /////////////////////////////////////////////////////////
  // Pressure
  // [output] value: pressure
  // [output] time: sampling time
  DeviceIF::Status pressure(double *value, TimeIF::TimeSpec *sampleTime);

  ///////////////////////////////////////////////////////////////////
  // Initiate calibration routine
  DeviceIF::Status calibrate();

  
  protected:

  // Message codes for each method
  enum DepthSensorIFMsgCode {
    DepthMsgCode = 8,
    TempMsgCode,
    PressureMsgCode,
    CalibrateMsgCode
  };

  // Define message structure for each method
  struct DepthMsg : Request, Reply {
    DeviceIF::Status returnVal;
    double value;
    TimeIF::TimeSpec sampleTime;
  
  } _depthMsg;

  struct TempMsg : Request, Reply {
    DeviceIF::Status returnVal;
    double value;
    TimeIF::TimeSpec sampleTime;
  
  } _tempMsg;

  struct PressureMsg : Request, Reply {
    DeviceIF::Status returnVal;
    double value;
    TimeIF::TimeSpec sampleTime;
  
  } _pressureMsg;

  struct CalibrateMsg : Request, Reply {
    DeviceIF::Status returnVal;
  
  } _calibrateMsg;

};

#endif

