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

#ifndef __NavigationIF_SK_H
#define __NavigationIF_SK_H

#include "TaskServer.h"
#include "NavigationIF.h"

class NavigationIF_SK : public TaskServer {

  public:

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

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

  virtual ~NavigationIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual void getLogData(NavigationIF::LogData *data) = 0;
  virtual void state(NavigationIF::Position *position, NavigationIF::Attitude *attitude) = 0;
  virtual void heading(double *heading) = 0;
  virtual void location(double *latitude, double *longitude, double *depth, double *altitude) = 0;
  virtual float speed() = 0;
  virtual double course() = 0;
  virtual double depth() = 0;
  virtual double altitude() = 0;
  virtual double pitch() = 0;
  virtual void setMagneticVariation(double angle) = 0;
  virtual double magneticVariation() = 0;
  virtual void mode(NavigationIF::Mode *mode) = 0;
  
  // Declare callbacks corresponding to each method
  Boolean getLogDataCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

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

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

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

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

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

  
  // Message structure pointer for each method
  NavigationIF::GetLogDataMsg *_getLogDataMsg;
  NavigationIF::StateMsg *_stateMsg;
  NavigationIF::HeadingMsg *_headingMsg;
  NavigationIF::LocationMsg *_locationMsg;
  NavigationIF::SpeedMsg *_speedMsg;
  NavigationIF::CourseMsg *_courseMsg;
  NavigationIF::DepthMsg *_depthMsg;
  NavigationIF::AltitudeMsg *_altitudeMsg;
  NavigationIF::PitchMsg *_pitchMsg;
  NavigationIF::SetMagneticVariationMsg *_setMagneticVariationMsg;
  NavigationIF::MagneticVariationMsg *_magneticVariationMsg;
  NavigationIF::ModeMsg *_modeMsg;
  
  // 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

