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

#ifndef CBITIF_H_
#define CBITIF_H_

#include "data/ElementURI.h"

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

// Include common ConfigURIs -- must be in namespace and follow definition of NAME
#include "component/HasLoadAtStartupIF.h"
#include "component/HasHardwareIF.h"

// TODO: change these static const str to DataURI, etc.
/// Static consts for input settings
static const DataURI CLEAR_FAULT_CMD( NAME, "clearFaultCmd", Units::ENUM );
static const DataURI CLEAR_LEAK_FAULT_CMD( NAME, "clearLeakFaultCmd", Units::ENUM );

static const DataURI SHOREPOWER_ON( NAME, "shorePowerOn", Units::BOOL );

static const DataURI AH_USED( NAME, "ampHoursUsed", Units::AMPERE_HOUR );

static const DataURI GF_ACTIVE_STATE( NAME, "GFActive", Units::BOOL );
static const DataURI GFCHANA0_READING( NAME, "GFCHANA0Current", Units::MILLIAMPERE );
static const DataURI GFCHANA1_READING( NAME, "GFCHANA1Current", Units::MILLIAMPERE );
static const DataURI GFCHANA2_READING( NAME, "GFCHANA2Current", Units::MILLIAMPERE );
static const DataURI GFCHANA3_READING( NAME, "GFCHANA3Current", Units::MILLIAMPERE );
static const DataURI GFCHANB0_READING( NAME, "GFCHANB0Current", Units::MILLIAMPERE );
static const DataURI GFCHANB1_READING( NAME, "GFCHANB1Current", Units::MILLIAMPERE );
static const DataURI GFCHANB2_READING( NAME, "GFCHANB2Current", Units::MILLIAMPERE );
static const DataURI GFCHANB3_READING( NAME, "GFCHANB3Current", Units::MILLIAMPERE );
static const DataURI GFCHANOPEN_READING( NAME, "GFCHANOpenCurrent", Units::MILLIAMPERE );


static const DataURI EFC_ELEV_OFFSET( NAME, "empiricalFaultElevOffset", Units::RADIAN );
static const DataURI EMPERICAL_FAULT_READING( NAME, "empericalClassifierFaultDetected", Units::ENUM );
static const DataURI BINNED_DEPTH_RATE_READING( NAME, "binnedDepthRate", Units::METER_PER_SECOND );

static const ConfigURI ABORT_DEPTH_CFG( NAME, "abortDepth", Units::METER );                        // Depth at which we drop the weight. Should be greater than all depth envelopes
static const ConfigURI STOP_DEPTH_CFG( NAME, "stopDepth", Units::METER );                          // Depth at which we stop the mission. Should be greater than all depth envelopes and less than abort depth

static const ConfigURI HUMIDITY_THRESHOLD_CFG( NAME, "humidityThreshold", Units::PERCENT );    // relative humidity
static const ConfigURI PRESSURE_THRESHOLD_CFG( NAME, "pressureThreshold", Units::POUND_PER_SQUARE_INCH ); // Onboard pressure must measure greater than this offset from 1 ATM
static const ConfigURI TEMP_THRESHOLD_CFG( NAME, "tempThreshold", Units::CELSIUS );            // Only need to use kelvin for temperature deltas

static const ConfigURI NAV_ERROR_THRESHOLD_CFG( NAME, "navErrorThreshold", Units::PERCENT );
static const ConfigURI RUN_NAV_ERROR_CRITICAL( NAME, "runNavErrorCritical", Units::BOOL );       // Will throw a critical is navigation error is above threshold defined above

static const ConfigURI VEHICLE_OPEN_CFG( NAME, "vehicleOpen", Units::BOOL );
static const ConfigURI ABORT_DEPTH_TIMEOUT_CFG( NAME, "abortDepthTimeout", Units::SECOND );      // If this time has elapsed and we're still below abort depth, drop the weight, end the mission.
static const ConfigURI BATT_FAIL_REPORT_CFG( NAME, "battFailReportTime", Units::MINUTE );        // Report main battery failover at this interval
static const ConfigURI ENV_TIMEOUT_CFG( NAME, "envTimeout", Units::SECOND );                     // If this time has elapsed and pressure or humidity are still above threshold, end the mission.
static const ConfigURI RUN_FAULT_CLASSIFIER( NAME, "runFaultClassifier", Units::BOOL );          // Runs the empirical fault classifier as part of CBIT if true
static const ConfigURI RUN_ELEV_OFFSET_CALCULATOR( NAME, "runElevOffsetCalc", Units::BOOL );     // Runs the empirical fault classifier's elevator offset calculator as part of CBIT if true
static const ConfigURI ALLOW_AUX_LEAK( NAME, "allowAuxLeak", Units::BOOL );                      // Don't drop weight if water only detected aux

static const ConfigURI BATT_TEMP_THRESHOLD_CFG( NAME, "battTempThreshold", Units::CELSIUS );     // The allowable threshold for battery temperature

static const ConfigURI GFCHANA0_THRESHOLD_CFG( NAME, "gfChanA0_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault
static const ConfigURI GFCHANA1_THRESHOLD_CFG( NAME, "gfChanA1_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault
static const ConfigURI GFCHANA2_THRESHOLD_CFG( NAME, "gfChanA2_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault
static const ConfigURI GFCHANA3_THRESHOLD_CFG( NAME, "gfChanA3_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault
static const ConfigURI GFCHANB0_THRESHOLD_CFG( NAME, "gfChanB0_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault
static const ConfigURI GFCHANB1_THRESHOLD_CFG( NAME, "gfChanB1_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault
static const ConfigURI GFCHANB2_THRESHOLD_CFG( NAME, "gfChanB2_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault
static const ConfigURI GFCHANB3_THRESHOLD_CFG( NAME, "gfChanB3_Threshold", Units::MILLIAMPERE ); // Current above baseline that triggers a ground fault

static const ConfigURI GFSCAN_TIMEOUT_CFG( NAME, "gfScanTimeout", Units::MILLIAMPERE );         // How often to scan for ground faults

// Offsets for leakage current
static const ConfigURI GFBATTOFFSET_CFG( NAME, "gfBattOffset", Units::MICROAMPERE );
static const ConfigURI GF24OFFSET_CFG( NAME, "gf24Offset", Units::MICROAMPERE );
static const ConfigURI GF12OFFSET_CFG( NAME, "gf12Offset", Units::MICROAMPERE );
static const ConfigURI GF5OFFSET_CFG( NAME, "gf5Offset", Units::MICROAMPERE );
static const ConfigURI GF3_3OFFSET_CFG( NAME, "gf3_3Offset", Units::MICROAMPERE );
static const ConfigURI GF3_15OFFSET_CFG( NAME, "gf3_15Offset", Units::MICROAMPERE );
static const ConfigURI GFCOMMOFFSET_CFG( NAME, "gfCommOffset", Units::MICROAMPERE );

}

namespace CBITMainGroundfaultIF
{
static const Str NAME( "CBITMainGroundfault" );
#include "component/HasAnalogToDigitalIF.h"
#include "component/HasAnalogToDigitalTimeoutIF.h"
}

namespace CBITWaterAlarmBowIF
{
static const Str NAME( "CBITWaterAlarmBow" );
#include "component/HasAnalogToDigitalIF.h"
#include "component/HasAnalogToDigitalTimeoutIF.h"
}

namespace CBITWaterAlarmSternIF
{
static const Str NAME( "CBITWaterAlarmStern" );
#include "component/HasAnalogToDigitalIF.h"
#include "component/HasAnalogToDigitalTimeoutIF.h"
}

namespace CBITWaterAlarmAuxIF
{
static const Str NAME( "CBITWaterAlarmAux" );
#include "component/HasAnalogToDigitalIF.h"
#include "component/HasAnalogToDigitalTimeoutIF.h"
}

#endif /*CBITIF_H_*/
