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

#include "VehicleConstants.h"
#include "DeviceList.h"

#define AuvConfigDirName "AUV_CONFIG_DIR"


class VehicleConfigurationServer : public VehicleConfigurationIF_SK {

public:

  VehicleConfigurationServer(const char *name, const char *fileName);
  ~VehicleConfigurationServer();


protected:

  virtual short deviceCount();
  virtual short findDevice(VehicleConfigurationIF::Name name);
  virtual short getDeviceDriver(short index, 
				VehicleConfigurationIF::Driver driver);
  virtual short getDeviceDriver(VehicleConfigurationIF::Name name, 
				VehicleConfigurationIF::Driver driver);
  virtual short getDeviceName( short index,
			       VehicleConfigurationIF::Name name );
  virtual short deviceInfo(short index, 
			   VehicleConfigurationIF::Name name, 
			   VehicleConfigurationIF::Port port, 
			   short *priority);
  virtual short deviceInfo(VehicleConfigurationIF::Name name, 
			   VehicleConfigurationIF::Port port, 
			   short *priority);

  virtual void vehicleName(VehicleConfigurationIF::Name name);
  virtual double propPitch();
  virtual double mass();
  virtual double buoyancy();
  virtual double kpHeading();
  virtual double kdHeading();
  virtual double kiHeading();
  virtual double kiHeadingLimit();
  virtual double kwpHeading();
  virtual double maxHdgRate();
  virtual double rudLimit();
  virtual double rudActLimit();
  virtual double rudActRateLimit();
  virtual double kpPitch();
  virtual double kdPitch();
  virtual double kiPitch();
  virtual double kiPitchLimit();
  virtual double pitchLimit();
  virtual double maxDiveRate();
  virtual double kpDepth();
  virtual double kiDepth();
  virtual double elevLimit();
  virtual double elevActLimit();
  virtual double elevActRateLimit();
  virtual double Ts();
  virtual double effDragCoef();
  virtual double tau();
  virtual double maxDepthInt();
  virtual double maxHdgInt();
  virtual double maxPitchInt();
  virtual double xuabu();
  virtual double decouple();
  virtual double altimeterInstrument();
  virtual double useLbl();
  virtual double useIns();

  virtual void centerOfMass(VehicleConfigurationIF::Vector v);

  virtual void centerOfBuoyancy(VehicleConfigurationIF::Vector v);

  virtual double propEfficiency();

  virtual double ductArea();

  virtual short nDropWeights();

  virtual short dropWeight(short weightNo, double *mass, double *buoyancy, 
			  VehicleConfigurationIF::Vector location);

  virtual void finLocations(VehicleConfigurationIF::Vector lowerRudder, 
			    VehicleConfigurationIF::Vector portElevator, 
			    VehicleConfigurationIF::Vector upperRudder, 
			    VehicleConfigurationIF::Vector stbdElevator);

  virtual int spawnAuxTasks();

  //-----------------------------------------------------------------------
  // Structure for storing vehicle constants
  VehicleConstants *_constants;


  //-----------------------------------------------------------------------
  // Structure for storing device configuration details.

  DeviceList *_devList;

};

#endif
