/** \file
 *
 *  Specifies the interface details for the ExternalSim component in the
 *  SimulatorModule.
 *
 *  ExternalSim.h should only be included by ExternalSim.cpp
 *  Other classes should include ExternalSimIF.h
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef EXTERNALSIMIF_H_
#define EXTERNALSIMIF_H_

#include "data/ElementURI.h"

/**
 *  Specifies the interface details for the ExternalSim component in the
 *  SimulatorModule.
 *
 *  ExternalSim.h should only be included by ExternalSim.cpp
 *  Other classes should include ExternalSimIF.h
 *
 *  \ingroup modules_simulator
 */
namespace ExternalSimIF
{
// Component name
static const Str NAME( "ExternalSim" );

// Include common ConfigURIs -- must be in namespace and follow definition of NAME
#include "component/HasLoadAtStartupIF.h"

static const RestartConfigURI SIM_DAEMON_SERVER( NAME, "SimDaemonServer", Units::NONE, MULTIVALUE );

// Output constant names
static const DataURI LATITUDE_SIM( NAME, "latitudeSim", Units::DEGREE, DOUBLE6 );
static const DataURI LONGITUDE_SIM( NAME, "longitudeSim", Units::DEGREE, DOUBLE6 );
static const DataURI EASTING_SIM( NAME, "eastingSim", Units::METER, DOUBLE6 );
static const DataURI NORTHING_SIM( NAME, "northingSim", Units::METER, DOUBLE6 );
static const DataURI UTM_ZONE_SIM( NAME, "utmZoneSim", Units::ENUM, SHORT2 );
static const DataURI RATE_U_SIM( NAME, "rateUSim", Units::METER_PER_SECOND, FLOAT4 );
static const DataURI RATE_V_SIM( NAME, "rateVSim", Units::METER_PER_SECOND, FLOAT4 );
static const DataURI RATE_W_SIM( NAME, "rateWSim", Units::METER_PER_SECOND, FLOAT4 );
static const DataURI RATE_P_SIM( NAME, "ratePSim", Units::METER_PER_SECOND, FLOAT4 );
static const DataURI RATE_Q_SIM( NAME, "rateQSim", Units::METER_PER_SECOND, FLOAT4 );
static const DataURI RATE_R_SIM( NAME, "rateRSim", Units::METER_PER_SECOND, FLOAT4 );
static const DataURI PROP_THRUST_SIM( NAME, "propThrustSim", Units::NEWTON, FLOAT4 );
static const DataURI PROP_TORQUE_SIM( NAME, "propTorqueSim", Units::NEWTON_METER, FLOAT4 );
static const DataURI NET_BUOY_SIM( NAME, "netBuoySim", Units::NEWTON, FLOAT4 );
static const DataURI FORCE_X_SIM( NAME, "forceXSim", Units::NEWTON, FLOAT4 );
static const DataURI FORCE_Y_SIM( NAME, "forceYSim", Units::NEWTON, FLOAT4 );
static const DataURI FORCE_Z_SIM( NAME, "forceZSim", Units::NEWTON, FLOAT4 );
static const DataURI POS_X_SIM( NAME, "posXSim", Units::METER, DOUBLE8 );
static const DataURI POS_Y_SIM( NAME, "posYSim", Units::METER, DOUBLE8 );
static const DataURI POS_Z_SIM( NAME, "posZSim", Units::METER, FLOAT4 );
static const DataURI ROLL_SIM( NAME, "rollSim", Units::RADIAN, FLOAT4 );
static const DataURI PITCH_SIM( NAME, "pitchSim", Units::RADIAN, FLOAT4 );
static const DataURI HEADING_SIM( NAME, "headingSim", Units::RADIAN, FLOAT4 );
static const DataURI POS_X_DOT_SIM( NAME, "posXDotSim", Units::METER, DOUBLE8 );
static const DataURI POS_Y_DOT_SIM( NAME, "posYDotSim", Units::METER, DOUBLE8 );
static const DataURI POS_Z_DOT_SIM( NAME, "posZDotSim", Units::METER, FLOAT4 );

static const DataURI HOMING_SENSOR_ADDRESS_SIM( NAME, "homingSensorAddressSim", Units::COUNT, INT4 );
static const DataURI HOMING_SENSOR_RANGE_SIM( NAME, "homingSensorRangeSim", Units::METER, FLOAT4 );
static const DataURI HOMING_SENSOR_AZIM_SIM( NAME, "homingSensorAzimSim", Units::RADIAN, FLOAT4 );
static const DataURI HOMING_SENSOR_ELEV_SIM( NAME, "homingSensorElevSim", Units::RADIAN, FLOAT4 );

// Input settings
static const DataURI AHRS_NOISE_AMPLITUDE_SETTING( NAME, "ahrsNoiseAmplitude", Units::RADIAN );
static const DataURI DEPTH_NOISE_AMPLITUDE_SETTING( NAME, "depthNoiseAmplitude", Units::METER );

}

#endif /*EXTERNALSIMIF_H_*/
