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

#ifndef __DynamicControlIF_SK_H
#define __DynamicControlIF_SK_H

#include "TaskServer.h"
#include "DynamicControlIF.h"

class DynamicControlIF_SK : public TaskServer {

  public:

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

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

  virtual ~DynamicControlIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual void getLogData(DynamicControlIF::LogData *data) = 0;
  virtual void setCommand(DynamicControlIF::Command *command) = 0;
  virtual void setMaxHeadingRate(double rate) = 0;
  virtual double maxHeadingRate() = 0;
  virtual void setMaxDepthRate(double rate) = 0;
  virtual double maxDepthRate() = 0;
  virtual void setTau(float tau) = 0;
  virtual float tau() = 0;
  virtual void setPitchServoGains(double proportional, double integral, double derivative) = 0;
  virtual void pitchServoGains(double *proportional, double *integral, double *derivative) = 0;
  virtual void setHeadingServoGains(double proportional, double integral, double derivative) = 0;
  virtual void headingServoGains(double *proportional, double *integral, double *derivative) = 0;
  
  // Declare callbacks corresponding to each method
  Boolean getLogDataCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

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

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

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

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

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

  
  // Message structure pointer for each method
  DynamicControlIF::GetLogDataMsg *_getLogDataMsg;
  DynamicControlIF::SetCommandMsg *_setCommandMsg;
  DynamicControlIF::SetMaxHeadingRateMsg *_setMaxHeadingRateMsg;
  DynamicControlIF::MaxHeadingRateMsg *_maxHeadingRateMsg;
  DynamicControlIF::SetMaxDepthRateMsg *_setMaxDepthRateMsg;
  DynamicControlIF::MaxDepthRateMsg *_maxDepthRateMsg;
  DynamicControlIF::SetTauMsg *_setTauMsg;
  DynamicControlIF::TauMsg *_tauMsg;
  DynamicControlIF::SetPitchServoGainsMsg *_setPitchServoGainsMsg;
  DynamicControlIF::PitchServoGainsMsg *_pitchServoGainsMsg;
  DynamicControlIF::SetHeadingServoGainsMsg *_setHeadingServoGainsMsg;
  DynamicControlIF::HeadingServoGainsMsg *_headingServoGainsMsg;
  
  // 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

