/** \file
 *
 *  Contains the SpeedCalculator class declaration.
 *
 *  SpeedCalculator.h should only be included by SpeedCalculator.cpp
 *  Other classes should include SpeedCalculatorIF.h
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */
#ifndef SPEEDCALCULATOR_H_
#define SPEEDCALCULATOR_H_

#include "component/SyncComponent.h"

class UniversalDataReader;
class UniversalDataWriter;

/**
 *  Over simplified SpeedCalculator component.
 *
 *  SpeedCalculator.h should only be included by SpeedCalculator.cpp
 *  Other classes should include SpeedCalculatorIF.h
 *
 *  \ingroup modules_derivation
 */
class SpeedCalculator : public SyncDerivationComponent
{
public:
    SpeedCalculator( const Module* module );
    virtual ~SpeedCalculator();

    /// Initialize function
    void initialize( void );

    /// The actual "payload" of the component
    void run();

private:

    UniversalDataReader* propOmegaReader_;
    UniversalDataWriter* speedWriter_;
    UniversalDataWriter* xVelocityWriter_;
    UniversalDataWriter* distanceWriter_;

    // Configuration
    ConfigReader *speedAccuracyCfgReader_;
    ConfigReader *propPitchCfgReader_;

    double propOmega_, propPitch_, speed_, speedAccuracy_, distance_, distanceAccuracy_;

};

#endif /* SPEEDCALCULATOR_H_ */
