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

#include "SimulatorIF_SK.h"
#include "SimulatorInput.h"
#include "SimulatorOutput.h"


class SimulatorServer : public SimulatorIF_SK {

public:

  SimulatorServer();

  ~SimulatorServer();
  
  protected:

  virtual long dropWeight(float droppedMass);

  virtual long setPropSpeed(double propSpeed);
  virtual long setRudder(double rudder);
  virtual long setElevator(double elevator);

  virtual long setCurrent(double north, double east);

  virtual long state(SimulatorIF::Vector position,
		     SimulatorIF::Vector positionRate,
		     SimulatorIF::Vector eulerAngles,
		     SimulatorIF::Vector rotationRate);

  virtual long rotationalVelocity(SimulatorIF::Vector velocity, 
				  SimulatorIF::Vector backDiff);

  virtual long translationalVelocity(SimulatorIF::Vector velocity, 
				     SimulatorIF::Vector backDiff);

  virtual long controlSurfaces(double *rudder, double *elevator);

  virtual long force(SimulatorIF::Vector vector);

  virtual long torque(SimulatorIF::Vector vector);

  virtual long propSpeed(double *rpm);

  virtual int spawnAuxTasks();

  SimulatorInput _input;
  SimulatorInput::Data _inputData;

  SimulatorOutput _output;
  SimulatorOutput::Data _outputData;
};

#endif

