/** \file
 *
 *  Specifies the interface details for the ESPComponent in the ScienceModule.
 *
 *  ESPComponent.h should only be included by ESPComponent.cpp.
 *  Other classes should include ESPComponentIF.h
 *
 *  Copyright (c) 2015 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef ESPCOMPONENTIF_H_
#define ESPCOMPONENTIF_H_

#include "data/ElementURI.h"

/**
 *  Specifies the interface details for the ESPComponent in the ScienceModule.
 *
 *  \ingroup modules_science
 */
namespace ESPComponentIF
{
/// Static const for component name
/// (Can be used by other components)
static const Str NAME( "ESPComponent" );

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

static const ConfigURI DEBUG_CFG( NAME, "debug", Units::BOOL );
static const ConfigURI ESP_LOG_FILTER_REGEX_CFG( NAME, "espLogFilterRegex", Units::NONE, STRVALUE );
static const ConfigURI SOCKET_SERVER_PORT_CFG( NAME, "socketServerPort", Units::COUNT );
static const ConfigURI ESP_SERVER_HOST_CFG( NAME, "espServerHost", Units::NONE, STRVALUE );
static const ConfigURI PO_TIMEOUT_CFG( NAME, "poTimeout", Units::SECOND );
static const ConfigURI CONNECT_TIMEOUT_CFG( NAME, "connectTimeout", Units::SECOND );
static const ConfigURI SAMPLE_TIMEOUT_CFG( NAME, "sampleTimeout", Units::SECOND );
static const ConfigURI INITIAL_PROMPT_TIMEOUT_CFG( NAME, "initialPromptTimeout", Units::SECOND );
static const ConfigURI LOAD_CARTRIDGE_TIMEOUT_CFG( NAME, "loadCartridgeTimeout", Units::SECOND );
static const ConfigURI FILTER_RESULT_TIMEOUT_CFG( NAME, "filterResultTimeout", Units::SECOND );
static const ConfigURI PROCESS_RESULT_TIMEOUT_CFG( NAME, "processResultTimeout", Units::SECOND );
static const ConfigURI STOP_RESULT_TIMEOUT_CFG( NAME, "stopResultTimeout", Units::SECOND );
static const ConfigURI UPSYNC_TIMEOUT_CFG( NAME, "upsyncTimeout", Units::SECOND );
static const ConfigURI UPSYNC_CFG( NAME, "upsync", Units::NONE, STRVALUE );

/// Argument for the `Cmd.loadCartridge` call
static const DataURI CARTRIDGE( NAME, "cartridge", Units::COUNT );

static const RestartConfigURI PPP_CONNECT( NAME, "pppConnect", Units::NONE, STRVALUE );
static const RestartConfigURI PPP_FLOW( NAME, "pppFlow", Units::NONE, STRVALUE );

static const RestartConfigURI CONSOLEUART( NAME, "consoleUart", "logical device "
        "name of UART", Units::NONE, STRVALUE );

static const DataURI SAMPLING_ACTIVE_STATE( NAME, "sampling", Units::BOOL );
static const DataURI SAMPLE_VOLUME( NAME, "sampleVolume", Units::MILLILITER );
static const DataURI SAMPLE_NUMBER( NAME, "sample_number", Units::COUNT );

static const DataURI STOP_SAMPLING( NAME, "stopSampling", Units::BOOL );

}

#endif /*ESPCOMPONENTIF_H_*/
