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

#ifndef BUOYANCYSERVOIF_H_
#define BUOYANCYSERVOIF_H_

#include "data/ElementURI.h"

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

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

// Include parent URIs -- must be in namespace and follow definition of NAME
#include "EZServoAllIF.h"
#include "EZServoLimitsIF.h"
#include "EZServoPIDIF.h"
#include "EZServoAccelOverloadIF.h"
#include "EZServoVelocityIF.h"

static const ConfigURI COUNTS_PER_CC_CFG( NAME, "countsPerCC", Units::COUNT_PER_CUBIC_CENTIMETER ); // counts on the A/D per ml of fluid pumped
static const ConfigURI DEVIATION_VOLUME_CFG( NAME, "deviationVolume", Units::CUBIC_CENTIMETER );    // Number of ml deviation allowed between expected and actual
static const ConfigURI CHECKING_TIMEOUT_CFG( NAME, "checkingTimeout", Units::SECOND );              // If the buoyancy is idling, this is how often to check for actual position. If there's a leak. This is when we'll find it.
static const ConfigURI OFFSET_VOLUME_CFG( NAME, "offsetVolume", Units::CUBIC_CENTIMETER );          // Offset of position of motor controller
static const ConfigURI FAST_PUMP_DEPTH_CFG( NAME, "fastPumpDepth", Units::METER );                  // Max depth for pumping at a fast rate
static const ConfigURI FAST_PUMP_COEFFICIENT_CFG( NAME, "fastPumpCoefficient", Units::NONE );       // Specifies how many times faster than normal the pump should operate in fast mode (e.g., 2 means twice as fast)

}

#endif /*BUOYANCYSERVOIF_H_*/
