/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : NavigationServer.h                                            */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#ifndef _NavigationServer_H
#define _NavigationServer_H
#include "NavigationIF_SK.h"
#include "NavigationOutput.h"

class NavigationServer : public NavigationIF_SK {

public:

  NavigationServer();
  ~NavigationServer();

protected:

  virtual void getLogData(NavigationIF::LogData *logData);

  virtual void state(NavigationIF::Position *position, 
		     NavigationIF::Attitude *attitude);

  virtual void heading(double *heading);

  virtual void location(double *latitude, double *longitude, double *depth, 
			double *altitude);

  virtual float speed();
  virtual double course();
  virtual double depth();
  virtual double altitude();
  virtual double pitch();
  virtual void setMagneticVariation(double angle);
  virtual double magneticVariation();
  virtual void mode(NavigationIF::Mode *mode);

  virtual int spawnAuxTasks();

  void deviceStatusCallback(TaskInterface *taskInterface, EventCode eventCode);

  NavigationOutput::State _state;
  NavigationOutput *_output;

  int _utmZone;
};

#endif
