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

#ifndef POINTIF_H_
#define POINTIF_H_

#include "data/ElementURI.h"

/**
 *  Specifies the interface details for the Point component in the
 *  GuidanceModule.
 *
 *  Point.h should only be included by Point.cpp
 *  Other classes should include PointIF.h
 *
 *  \ingroup modules_guidance
 */
namespace PointIF
{
/// Static const for component name
/// (Can be used by other components)
static const Str NAME( "Point" );

/// Static consts for input settings
/// (Supplied so outputs can be directed to these inputs)

/// Desired absolute heading to direct the vehicle to.
/// If specified with headingDelta, the two are added.
/// This variable is used as a test for sequential completion if
/// none of Latitude, Longitude, Northings, or Eastings are specified
static const SettingURI HEADING_SETTING( "heading", "Desired absolute heading "
        "to direct the vehicle to. If specified with headingDelta, the two "
        "are added.", Units::RADIAN );

/// Desired change in heading to direct the vehicle to.
/// If specified with Heading Delta, the two are added.
/// This variable is used as a test for sequential completion if
/// none of Latitude, Longitude, Northings, or Eastings are specified
static const SettingURI HEADING_DELTA_SETTING( "headingDelta", "Desired change "
        "in heading to direct the vehicle to. If specified with Heading Delta, "
        "the two are added.", Units::RADIAN );

/// Desired rate of change in heading.
/// If specified with Heading, Heading Delta, Latitude, or Longitude, only active
///    until the desired heading change is achieved.
/// Otherwise drives the vehicle in an arc.
/// This variable is not used as a test for sequential completion
static const SettingURI HEADING_RATE_SETTING( "headingRate", "Desired rate of "
        "change in heading. If specified with Heading, Heading Delta, Latitude, "
        "or Longitude, only active until the desired heading change is "
        "achieved. Otherwise drives the vehicle in an arc.", Units::RADIAN_PER_SECOND );

/// Desired rudder angle for the vehicle.
/// If specified with Heading, Heading Delta, Latitude, or Longitude, only active
///    until the desired heading change is achieved.
/// Otherwise drives the vehicle in an arc.
/// Overrides yawRate command.
/// This variable is not used as a test for sequential completion
static const SettingURI RUDDER_ANGLE_SETTING( "rudderAngle", "Desired rudder "
        "angle for the vehicle. If specified with Heading, Heading Delta, "
        "Latitude, or Longitude, only active until the desired heading change "
        "is achieved. Otherwise drives the vehicle in an arc. Overrides "
        "yawRate setting", Units::RADIAN );

/// Desired latitude to achieve.  Nominally drives the vehicle due east or west.
/// Can be specified with Longitude, Heading, or Heading Delta to drive the vehicle diagonally.
/// This variable is used as a test for sequential completion
static const SettingURI LATITUDE_SETTING( "latitude", "Desired latitude to "
        "achieve.  Nominally drives the vehicle due east or west. Can be "
        "specified with Longitude, Heading, or Heading Delta to drive the "
        "vehicle diagonally.", Units::RADIAN );

/// Desired change in latitude to achieve.
/// If specified with Latitude, added to the specified Latitude
/// Otherwise added to the Latitude at initialization time
/// This variable is used as a test for sequential completion
static const SettingURI LATITUDE_DELTA_SETTING( "latitudeDelta", "Desired "
        "change in latitude to achieve. If specified with Latitude, added to "
        "the specified Latitude. Otherwise added to the Latitude at "
        "initialization time", Units::RADIAN );

/// Desired longitude to achieve.  Nominally drives the vehicle due north or south.
/// Can be specified with Latitude, Heading, or Heading Delta to drive the vehicle diagonally.
/// This variable is used as a test for sequential completion
static const SettingURI LONGITUDE_SETTING( "longitude", "Desired longitude to "
        "achieve.  Nominally drives the vehicle due north or south. Can be "
        "specified with Latitude, Heading, or Heading Delta to drive the "
        "vehicle diagonally.", Units::RADIAN );

/// Desired change in longitude to achieve.
/// If specified with Longitude, added to the specified Longitude
/// Otherwise added to the Longitude at initialization time
/// This variable is used as a test for sequential completion
static const SettingURI LONGITUDE_DELTA_SETTING( "longitudeDelta", "Desired "
        "change in longitude to achieve. If specified with Longitude, added "
        "to the specified Longitude. Otherwise added to the Longitude at "
        "initialization time", Units::RADIAN );

/// Desired change in latitude to achieve, expressed as a distance.
/// If specified with Latitude, added to the specified Latitude
/// Otherwise added to the Latitude at initialization time
/// This variable is used as a test for sequential completion
static const SettingURI NORTHINGS_DELTA_SETTING( "northingsDelta", "Desired "
        "change in latitude to achieve, expressed as a distance. If specified "
        "with Latitude, added to the specified Latitude. Otherwise added to "
        "the Latitude at initialization time", Units::METER );

/// Desired change in longitude to achieve, expressed as a distance.
/// If specified with Longitude, added to the specified Longitude
/// Otherwise added to the Longitude at initialization time
/// This variable is used as a test for sequential completion
static const SettingURI EASTINGS_DELTA_SETTING( "eastingsDelta", "Desired "
        "change in longitude to achieve, expressed as a distance. If specified "
        "with Longitude, added to the specified Longitude. Otherwise added to "
        "the Longitude at initialization time", Units::METER );

static const SettingURI FORCE_UPDATE_SETTING( "forceUpdate", "Force settings "
        "update ervery cycle", Units::BOOL );

}

#endif /*POINTIF_H_*/
