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

#ifndef ONBOARDIF_H_
#define ONBOARDIF_H_

#include "data/ElementURI.h"

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

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

static const DataURI PRESSURE_READING( NAME, "Pressure", Units::PASCAL );
static const DataURI TEMPERATURE_READING( NAME, "Temperature", Units::CELSIUS );
static const DataURI HUMIDITY_READING( NAME, "Humidity", Units::PERCENT );
static const DataURI MAIN_BATTERY_VOLTAGE( NAME, "MainBatteryVoltage", Units::VOLT );
static const DataURI BACKUP_BATTERY_VOLTAGE( NAME, "BackupBatteryVoltage", Units::VOLT );
static const DataURI BATTERY_CURRENT( NAME, "BatteryCurrent", Units::MILLIAMPERE );
}

namespace OnboardHumidityIF
{
static const Str NAME( "OnboardHumidity" );
#include "component/HasI2CIF.h"
}

namespace OnboardPressureIF
{
static const Str NAME( "OnboardPressure" );
#include "component/HasI2CIF.h"

static const ConfigURI SLOPE( NAME, "slope", Units::POUND_PER_SQUARE_INCH_PER_VOLT );
static const ConfigURI INTERCEPT( NAME, "intercept", Units::POUND_PER_SQUARE_INCH );

static const ConfigURI COEFA0( NAME, "coefA0", Units::COUNT );
static const ConfigURI COEFB1( NAME, "coefB1", Units::COUNT );
static const ConfigURI COEFB2( NAME, "coefB2", Units::COUNT );
static const ConfigURI COEFC12( NAME, "coefC12", Units::COUNT );

}

namespace OnboardTemperatureIF
{
static const Str NAME( "OnboardTemperature" );
#include "component/HasAnalogToDigitalIF.h"
}

namespace OnboardBatteryIF
{
static const Str NAME( "OnboardBattery" );

static const float ONBOARD_BATTERY_VOLTAGE_ACCURACY = 0.01;
static const float ONBOARD_CURRENT_ACCURACY = 0.01;
static const float ONBOARD_POWER_ACCURACY = 0.01;

static const RestartConfigURI MAIN_BATTERY_SYSNODE( NAME, "mainBatterySysNode",
        "sysclass node", Units::NONE, STRVALUE );
static const RestartConfigURI BACKUP_BATTERY_SYSNODE( NAME, "backupBatterySysNode",
        "sysclass node", Units::NONE, STRVALUE );
}

#endif /*ONBOARDIF_H_*/
