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

#ifndef __WorkSiteIF_H
#define __WorkSiteIF_H

#include "TaskInterface.h"


#define WorkSiteIFServerName "WorkSiteIFServer"

/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : WorkSiteIF.idl                                                */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/*                                                                          */
/* 06/11/00 - Added sound speed and transponder channel                     */
/*          - Eickstedt MIT Sea Grant                                       */
/****************************************************************************/
/*
CLASS 
WorkSiteIF

DESCRIPTION
TaskInterface to WorkSite

AUTHOR
Tom O'Reilly
*/
class WorkSiteIF : public TaskInterface {

  friend class WorkSiteIF_SK;

  public:

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

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

  ~WorkSiteIF();

  ///////////////////////////////////////////////////////////////////
  // Approximate latitude
  double latitude();

  ///////////////////////////////////////////////////////////////////
  // Approximate longitude
  double longitude();

  ///////////////////////////////////////////////////////////////////
  // UTM zone
  long utmZone();

  ///////////////////////////////////////////////////////////////////
  // Surface pressure
  double magneticVariation();

  ///////////////////////////////////////////////////////////////////
  // Number of LBL transponders
  short nLblTransponders();

  ///////////////////////////////////////////////////////////////////
  // Parameters for nth LBL transponder
  // Return 0 on success, -1 on error (transponderNo out of bounds)
  // [input] transponderNo: Transponder number
  // [output] easting: Transponder easting
  // [output] northing: Transponder northing
  // [output] depth: Transponder depth
  // [output] turnaroundTime: Transponder turnaround
  long getTransponder(short transponderNo, double *easting, double *northing, double *depth, long *turnaroundTime, long *channel);

  double soundSpeed();

  
  protected:

  // Message codes for each method
  enum WorkSiteIFMsgCode {
    LatitudeMsgCode,
    LongitudeMsgCode,
    UtmZoneMsgCode,
    MagneticVariationMsgCode,
    NLblTranspondersMsgCode,
    GetTransponderMsgCode,
    SoundSpeedMsgCode
  };

  // Define message structure for each method
  struct LatitudeMsg : Request, Reply {
    double returnVal;
  
  } _latitudeMsg;

  struct LongitudeMsg : Request, Reply {
    double returnVal;
  
  } _longitudeMsg;

  struct UtmZoneMsg : Request, Reply {
    long returnVal;
  
  } _utmZoneMsg;

  struct MagneticVariationMsg : Request, Reply {
    double returnVal;
  
  } _magneticVariationMsg;

  struct NLblTranspondersMsg : Request, Reply {
    short returnVal;
  
  } _nLblTranspondersMsg;

  struct GetTransponderMsg : Request, Reply {
    long returnVal;
    short transponderNo;
    double easting;
    double northing;
    double depth;
    long turnaroundTime;
    long channel;
  
  } _getTransponderMsg;

  struct SoundSpeedMsg : Request, Reply {
    double returnVal;
  
  } _soundSpeedMsg;

};

#endif

