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

#ifndef NAL9602IF_H_
#define NAL9602IF_H_

#include "data/ElementURI.h"

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

// 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/HasPowerIF.h"
#include "component/HasUartIF.h"

static const ConfigURI POWER_PLATFORM_COMMUNICATIONS( NAME, "power_platform_communications", Units::WATT );
static const ConfigURI GPS_FAIL_TIMEOUT_CFG( NAME, "gpsFailTimeout", Units::SECOND );
static const ConfigURI IRIDIUM_MTQUEUE_FAIL_TIMEOUT_CFG( NAME, "iridiumMTQueueTimeout", "How long to wait for an Iridium session to check for waiting MT SBD messages in the queue", Units::SECOND );

static const ConfigURI REQUEST_GGA_CFG( NAME, "requestGGA", Units::BOOL );
static const ConfigURI FAST_GPS_FIX( NAME, "fastGPSFix", "Leaves the power applied to the NAL in order to allow for faster GPS fixes", Units::BOOL );
static const ConfigURI HANDLE_ZDA_MSG_CFG( NAME, "handleZDAMessages", "Deals with incoming ZDA messages for mapping LRAUVs", Units::BOOL );

static const RestartConfigURI MAX_DOWNLINK_MSG_SIZE( NAME, "maxDownlinkMsgSize", "Maximum size of SBD packets sent from vehicle to shore (no more than 340)", Units::BOOL );
static const RestartConfigURI MAX_UPLINK_MSG_SIZE( NAME, "maxUplinkMsgSize", "Maximum size of SBD packets sent from shore to vehicle (no more than 270)", Units::BYTE );

static const DataURI GOOD_FIX_STATE( NAME, "goodFix", Units::BOOL );
static const DataURI NUM_SATELLITES_READING( NAME, "numSatellites", Units::COUNT );
static const DataURI SIG_QUALITY_READING( NAME, "sigQuality", Units::COUNT );
static const DataURI SOG_READING( NAME, "SOG", Units::KNOT );
static const DataURI COG_READING( NAME, "COG", Units::DEGREE );
static const DataURI STROBE_MODE( NAME, "strobeMode", Units::COUNT );

/// Static consts for outputs
/// (Supplied so inputSettings can be directed to these outputs)
static const Str NAL_SNR_BASENAME( "SNRSatellite_" );

static const int MAX_GPS_SATS_9602 = 12;

/// Defines downlink (out) status states
typedef enum
{
    DOWNLINK_OUT_OK = 0,       // Successful connection to GSS
    DOWNLINK_OUT_SENT = 1,     // Successful connection to GSS; but sent a message??
    DOWNLINK_OUT_ERROR = 2,    // Error while connecting to GSS
} DownlinkOutStatus;

/// Defines uplink (in) status states
typedef enum
{
    UPLINK_IN_NO_MESSAGE = 0,  // No uplinked msg received
    UPLINK_IN_GOT_MESSAGE = 1, // Uplink msg in receive buffer
    UPLINK_IN_ERROR = 2,       // Maintain the specified heading
} UplinkInStatus;

}

#endif /*NAL9602IF_H_*/
