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

#ifndef __VehicleConfigurationIF_SK_H
#define __VehicleConfigurationIF_SK_H

#include "TaskServer.h"
#include "VehicleConfigurationIF.h"

class VehicleConfigurationIF_SK : public TaskServer {

  public:

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

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

  virtual ~VehicleConfigurationIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual short deviceCount() = 0;
  virtual short findDevice(VehicleConfigurationIF::Name name) = 0;
  virtual short getDeviceName(short index, VehicleConfigurationIF::Name name) = 0;
  virtual short getDeviceDriver(short index, VehicleConfigurationIF::Driver driver) = 0;
  virtual short getDeviceDriver(VehicleConfigurationIF::Name name, VehicleConfigurationIF::Driver driver) = 0;
  virtual short deviceInfo(short index, VehicleConfigurationIF::Name name, VehicleConfigurationIF::Port port, short *priority) = 0;
  virtual short deviceInfo(VehicleConfigurationIF::Name name, VehicleConfigurationIF::Port port, short *priority) = 0;
  virtual void vehicleName(VehicleConfigurationIF::Name name) = 0;
  virtual double propPitch() = 0;
  virtual double mass() = 0;
  virtual double buoyancy() = 0;
  virtual double kpHeading() = 0;
  virtual double kdHeading() = 0;
  virtual double kiHeading() = 0;
  virtual double kwpHeading() = 0;
  virtual double maxHdgRate() = 0;
  virtual double rudLimit() = 0;
  virtual double rudActLimit() = 0;
  virtual double rudActRateLimit() = 0;
  virtual double kpPitch() = 0;
  virtual double kdPitch() = 0;
  virtual double kiPitch() = 0;
  virtual double pitchLimit() = 0;
  virtual double maxDiveRate() = 0;
  virtual double kpDepth() = 0;
  virtual double kiDepth() = 0;
  virtual double elevLimit() = 0;
  virtual double elevActLimit() = 0;
  virtual double elevActRateLimit() = 0;
  virtual double Ts() = 0;
  virtual double effDragCoef() = 0;
  virtual double propEfficiency() = 0;
  virtual double tau() = 0;
  virtual double maxDepthInt() = 0;
  virtual double maxHdgInt() = 0;
  virtual double maxPitchInt() = 0;
  virtual double xuabu() = 0;
  virtual void centerOfMass(VehicleConfigurationIF::Vector v) = 0;
  virtual void centerOfBuoyancy(VehicleConfigurationIF::Vector v) = 0;
  virtual double ductArea() = 0;
  virtual short nDropWeights() = 0;
  virtual short dropWeight(short weightNo, double *mass, double *buoyancy, VehicleConfigurationIF::Vector location) = 0;
  virtual void finLocations(VehicleConfigurationIF::Vector lowerRudder, VehicleConfigurationIF::Vector upperRudder, VehicleConfigurationIF::Vector portElevator, VehicleConfigurationIF::Vector stbdElevator) = 0;
  virtual double decouple() = 0;
  virtual double altimeterInstrument() = 0;
  virtual double useLbl() = 0;
  virtual double useIns() = 0;
  
  // Declare callbacks corresponding to each method
  Boolean deviceCountCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  
  // Message structure pointer for each method
  VehicleConfigurationIF::DeviceCountMsg *_deviceCountMsg;
  VehicleConfigurationIF::FindDeviceMsg *_findDeviceMsg;
  VehicleConfigurationIF::GetDeviceNameMsg *_getDeviceNameMsg;
  VehicleConfigurationIF::GetDeviceDriverMsg *_getDeviceDriverMsg;
  VehicleConfigurationIF::GetDeviceDriver01Msg *_getDeviceDriver01Msg;
  VehicleConfigurationIF::DeviceInfoMsg *_deviceInfoMsg;
  VehicleConfigurationIF::DeviceInfo01Msg *_deviceInfo01Msg;
  VehicleConfigurationIF::VehicleNameMsg *_vehicleNameMsg;
  VehicleConfigurationIF::PropPitchMsg *_propPitchMsg;
  VehicleConfigurationIF::MassMsg *_massMsg;
  VehicleConfigurationIF::BuoyancyMsg *_buoyancyMsg;
  VehicleConfigurationIF::KpHeadingMsg *_kpHeadingMsg;
  VehicleConfigurationIF::KdHeadingMsg *_kdHeadingMsg;
  VehicleConfigurationIF::KiHeadingMsg *_kiHeadingMsg;
  VehicleConfigurationIF::KwpHeadingMsg *_kwpHeadingMsg;
  VehicleConfigurationIF::MaxHdgRateMsg *_maxHdgRateMsg;
  VehicleConfigurationIF::RudLimitMsg *_rudLimitMsg;
  VehicleConfigurationIF::RudActLimitMsg *_rudActLimitMsg;
  VehicleConfigurationIF::RudActRateLimitMsg *_rudActRateLimitMsg;
  VehicleConfigurationIF::KpPitchMsg *_kpPitchMsg;
  VehicleConfigurationIF::KdPitchMsg *_kdPitchMsg;
  VehicleConfigurationIF::KiPitchMsg *_kiPitchMsg;
  VehicleConfigurationIF::PitchLimitMsg *_pitchLimitMsg;
  VehicleConfigurationIF::MaxDiveRateMsg *_maxDiveRateMsg;
  VehicleConfigurationIF::KpDepthMsg *_kpDepthMsg;
  VehicleConfigurationIF::KiDepthMsg *_kiDepthMsg;
  VehicleConfigurationIF::ElevLimitMsg *_elevLimitMsg;
  VehicleConfigurationIF::ElevActLimitMsg *_elevActLimitMsg;
  VehicleConfigurationIF::ElevActRateLimitMsg *_elevActRateLimitMsg;
  VehicleConfigurationIF::TsMsg *_TsMsg;
  VehicleConfigurationIF::EffDragCoefMsg *_effDragCoefMsg;
  VehicleConfigurationIF::PropEfficiencyMsg *_propEfficiencyMsg;
  VehicleConfigurationIF::TauMsg *_tauMsg;
  VehicleConfigurationIF::MaxDepthIntMsg *_maxDepthIntMsg;
  VehicleConfigurationIF::MaxHdgIntMsg *_maxHdgIntMsg;
  VehicleConfigurationIF::MaxPitchIntMsg *_maxPitchIntMsg;
  VehicleConfigurationIF::XuabuMsg *_xuabuMsg;
  VehicleConfigurationIF::CenterOfMassMsg *_centerOfMassMsg;
  VehicleConfigurationIF::CenterOfBuoyancyMsg *_centerOfBuoyancyMsg;
  VehicleConfigurationIF::DuctAreaMsg *_ductAreaMsg;
  VehicleConfigurationIF::NDropWeightsMsg *_nDropWeightsMsg;
  VehicleConfigurationIF::DropWeightMsg *_dropWeightMsg;
  VehicleConfigurationIF::FinLocationsMsg *_finLocationsMsg;
  VehicleConfigurationIF::DecoupleMsg *_decoupleMsg;
  VehicleConfigurationIF::AltimeterInstrumentMsg *_altimeterInstrumentMsg;
  VehicleConfigurationIF::UseLblMsg *_useLblMsg;
  VehicleConfigurationIF::UseInsMsg *_useInsMsg;
  
  // 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

