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

#ifndef DUSBL_HYDROIDIF_H
#define DUSBL_HYDROIDIF_H

#include "data/ElementURI.h"

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

// 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"

// Other config URIs
static const ConfigURI VERBOSITY_CFG( NAME, "verbosity", "0=concise to 3=most verbose", Units::ENUM );
static const ConfigURI TRANSMIT_LOCKOUT_CFG( NAME, "transmitLockout", "Time after transmit to ignore replies. Max 50 ms", Units::MILLISECOND );
static const ConfigURI RECIEVE_TIMEOUT_CFG( NAME, "recieveTimeout", "Time after transmit to listen for replies. Max 4095 ms", Units::MILLISECOND );
static const ConfigURI DETECTION_THRESHOLD_CFG( NAME, "detectionThreshold", "Ignore singals lower than this value. Max ~64 count", Units::COUNT );
static const ConfigURI X_CENTER_CFG( NAME, "xCenter", "X-axis offset, up to +/- 6.35 arcdeg", Units::ANGULAR_DEGREE );
static const ConfigURI Y_CENTER_CFG( NAME, "yCenter", "Y-axis offset, up to +/- 6.35 arcdeg", Units::ANGULAR_DEGREE );
static const ConfigURI DEFAULT_SOUND_SPEED_CFG( NAME, "defaultSoundSpeed", "Speed of sound in water if not measured", Units::METER_PER_SECOND );
static const ConfigURI DEFAULT_TAT_CFG( NAME, "defaultTurnAroundTime", "Turn around time of the transponder being used", Units::MILLISECOND );


// inputs from other components
static const DataURI TRANSPONDER_CODE_REQUESTED( NAME, "transponderCode", "Transponder code: 2 for DR1-A, 3 for DR1-B, etc", Units::ENUM );
static const DataURI PING_REQUESTED( NAME, "pingRequested", Units::COUNT );

// slate outputs direct from instrument
static const DataURI X_ANGLE_READING( NAME, "xAngle", Units::ANGULAR_DEGREE );
static const DataURI Y_ANGLE_READING( NAME, "yAngle", Units::ANGULAR_DEGREE );
static const DataURI TRAVEL_TIME_READING( NAME, "travelTime", Units::MICROSECOND );
static const DataURI LATENCY_READING( NAME, "latency", Units::MICROSECOND );
static const DataURI GAIN_READING( NAME, "gain", Units::RATIO );
static const DataURI IN_BAND_SINGAL_TO_NOISE_READING( NAME, "inBandSignalToNoise", Units::RATIO );
static const DataURI OUT_BAND_SINGAL_TO_NOISE_READING( NAME, "outBandSignalToNoise", Units::RATIO );

// slate outputs after some calculations
//static const BlobURI DIRECTION( NAME, "direction", Units::NONE, BLOB_FLOAT64LE, 3 );

}

#endif /*DUSBL_HYDROIDIF_H*/
