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

#ifndef ACOUSTICMODEM_BENTHOS_ATM900IF_H_
#define ACOUSTICMODEM_BENTHOS_ATM900IF_H_

#include "data/ElementURI.h"

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

// 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/HasLoadControl2IF.h"
#include "component/HasUartIF.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 LOCAL_ADDRESS_CFG( NAME, "localAddress", Units::COUNT );
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 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 );

// 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 ACOUSTIC_WAKEUP( NAME, "acoustic_wakeup", Units::COUNT );
//static const DataURI RX_TIME( NAME, "modem_receive_time", Units::EPOCH_SECOND );
//static const DataURI TX_TIME( NAME, "modem_transmit_time", Units::EPOCH_SECOND );
static const DataURI RANGE_REQUEST( NAME, "range_request", Units::COUNT );
static const DataURI REMOTE_ADDRESS_READING( NAME, "remote_address", Units::COUNT );
static const DataURI LOCAL_ADDRESS_READING( NAME, "local_address", Units::COUNT );
static const DataURI RANGE_READING( NAME, "range", Units::METER );
static const DataURI QUERY_PING_SENT( NAME, "query_pings", Units::COUNT );

}

#endif /*ACOUSTICMODEM_BENTHOS_ATM900IF_H_*/
