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

#ifndef __GncIF_H
#define __GncIF_H

#include "TaskInterface.h"


#define GncIFServerName "GncIFServer"

/*
CLASS
GncIF

DESCRIPTION
TaskInterface to GNC

AUTHOR
k headley

*/
class GncIF : public TaskInterface {

  friend class GncIF_SK;

  public:

  // Forward declarations of public structures
  struct LogData;
  struct Gains;
  
  
  
  ////////////////////////////////////////////////////////////
  // [placeholder] Data to be logged
  struct LogData {
    double x;
    double y;
    double z;
  };
  ///////////////////////////////////////////////////////////////////
  // DynamicControl: Gain data
  struct Gains {
    double kwpHeading;
    double kiwp;
    double kpHeading;
    double kiHeading;
    double kdHeading;
    double kpDepth;
    double kiDepth;
    double kdDepth;
    double kpPitch;
    double kiPitch;
    double kdPitch;
  };
  GncIF(const char *name, int timeout = 10);

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

  ~GncIF();

  ///////////////////////////////////////////////////////////////////
  // DynamicControl: Set all control gains.
  void dcSetGains(GncIF::Gains *gains);

  ///////////////////////////////////////////////////////////////////
  // DynamicControl: Revert control gains to the values in the configuration file
  void dcRevertGains();

  ///////////////////////////////////////////////////////////////////
  // DynamicControl: Get wall data
  void dcGetWallData(double *lastWallTime, double *wallBearing);

  
  protected:

  // Message codes for each method
  enum GncIFMsgCode {
    DcSetGainsMsgCode,
    DcRevertGainsMsgCode,
    DcGetWallDataMsgCode
  };

  // Define message structure for each method
  struct DcSetGainsMsg : Request, Reply {
    GncIF::Gains gains;
  
  } _dcSetGainsMsg;

  struct DcRevertGainsMsg : Request, Reply {
  
  } _dcRevertGainsMsg;

  struct DcGetWallDataMsg : Request, Reply {
    double lastWallTime;
    double wallBearing;
  
  } _dcGetWallDataMsg;

};

#endif

