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

#ifndef DATIF_H_
#define DATIF_H_

#include "data/ElementURI.h"

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

// 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 "component/HasMissionCriticalIF.h"

// Other config URIs
static const ConfigURI VERBOSITY_CFG( NAME, "verbosity", Units::COUNT );
static const ConfigURI TX_POWER_CFG( NAME, "txPower", "Transmit power level, 1(-21db) to 8(max)", Units::ENUM );
static const ConfigURI SBD_ADDRESS_CFG( NAME, "sbdAddress", "Remote address for sending/receiving SBDs", Units::ENUM );
static const ConfigURI TRANSPONDER_ADDRESS_CFG( NAME, "transponderAddress", "Remote address for acoustic transponder", Units::ENUM );
static const ConfigURI PHASE_TO_DIRECTION_CFG( NAME, "convertPhaseDataToDirection", Units::BOOL );
static const ConfigURI IGNORE_ELEVATION_ANGLE_CFG( NAME, "ignoreElevationAngle", Units::BOOL );
static const ConfigURI SURFACE_THRESHOLD_CFG( NAME, "surfaceThreshold", "Use the modem for communications below this depth", Units::METER );
static const ConfigURI SEND_EXPRESS_CFG( NAME, "sendExpress", "Set to true to send Express-level data.", Units::BOOL );
static const ConfigURI MAX_ACK_TIMEOUTS( NAME, "maxAckTimeouts", "If >0, after this many ack timeouts, send packet after eack ack timeout.", Units::COUNT );

// inputs from other components
static const DataURI QUERY_ADDRESS_REQUESTED( NAME, "queryAddressRequested", Units::COUNT );
static const DataURI NUMBER_OF_PINGS_REQUESTED( NAME, "numberOfPingsRequested", Units::COUNT );

// slate outputs direct from instrument
static const DataURI LVL1_READING( NAME, "LVL1", Units::COUNT );
static const DataURI LVL2_READING( NAME, "LVL2", Units::COUNT );
static const DataURI LVL3_READING( NAME, "LVL3", Units::COUNT );
static const DataURI LVL4_READING( NAME, "LVL4", Units::COUNT );
static const DataURI AGC_READING( NAME, "AGC", Units::COUNT );
static const DataURI IDXPEAK_READING( NAME, "IDXPeak", Units::COUNT );
static const DataURI IDXFIT_READING( NAME, "IDXFit", Units::COUNT );
static const DataURI IDXPHASE_READING( NAME, "IDXPhase", Units::RADIAN );
static const DataURI PHASEA_READING( NAME, "phaseA", Units::RADIAN );
static const DataURI PHASEB_READING( NAME, "phaseB", Units::RADIAN );
static const DataURI PHASEC_READING( NAME, "phaseC", Units::RADIAN );
static const DataURI RAWAZIMUTH_READING( NAME, "rawAzimuth", Units::DEGREE );
static const DataURI RAWELEVATION_READING( NAME, "rawElevation", Units::DEGREE );
static const DataURI CALAZIMUTH_READING( NAME, "calibratedAzimuth", Units::DEGREE );
static const DataURI CALELEVATION_READING( NAME, "calibratedElevation", Units::DEGREE );
static const DataURI ROTAZIMUTH_READING( NAME, "rotatedAzimuth", Units::DEGREE );
static const DataURI ROTELEVATION_READING( NAME, "rotatedElevation", Units::DEGREE );
static const DataURI LOCAL_ADDRESS_READING( NAME, "localAddressReading", Units::ENUM );
static const DataURI DEVICE_ENABLE_REQUESTED( NAME, "deviceEnableRequested", Units::BOOL );
static const DataURI ACOUSTIC_WAKEUP( NAME, "acoustic_wakeup", Units::COUNT );
static const DataURI RANGE_REQUEST( NAME, "range_request", Units::COUNT );
static const DataURI MSG_ACKNOWLEDGED( NAME, "msgAcknowledged", Units::BOOL );

// slate outputs after some calculations
static const DataURI AZIMUTH_IF( NAME, "azimuth_instrumentFrame", Units::RADIAN );
static const DataURI ELEVATION_IF( NAME, "elevation_instrumentFrame", Units::RADIAN );
static const DataURI AZIMUTH_VF( NAME, "azimuth_vehicleFrame", Units::RADIAN );
static const DataURI ELEVATION_VF( NAME, "elevation_vehicleFrame", Units::RADIAN );
static const BlobURI DIRECTION_IF( NAME, "direction_instrumentFrame", Units::NONE, BLOB_FLOAT64LE, 3 );

}

#endif /*DATIF_H_*/
