/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : CrossbowLog.cc                                                */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
/*-----------------------------------------------------------------------*
  CLASS: CrossbowLog.h

  DESCRIPTION: Logging object for the Crossbow

  $Id: CrossbowLog.cc,v 1.7 2003/07/03 17:37:59 henthorn Exp $
  *-----------------------------------------------------------------------*/

#include "CrossbowLog.h"
#include "Crossbow.h"

CrossbowLog::CrossbowLog( Crossbow *crossbow,
			  DataLog::FileFormat format )
  : DataLogWriter( CrossbowLogName, format, AutoTimeStamp )
{
  setMnemonic("dataCB");

  addField( (_roll       = new AngleData("mRollCB")) );
  addField( (_rollRate   = new AngleData("mOmega_xCB")) );
  addField( (_pitch      = new AngleData("mPitchCB")) );
  addField( (_pitchRate  = new AngleData("mOmega_yCB")) );
  addField( (_yaw        = new AngleData("mYawCB")) );
  addField( (_yawRate    = new AngleData("mOmega_zCB")) );

  addField( (_accelX     = new DoubleData("mAccel_xCB")) );
  addField( (_accelY     = new DoubleData("mAccel_yCB")) );
  addField( (_accelZ     = new DoubleData("mAccel_zCB")) );

  addField( (_magX       = new DoubleData("mMag_xCB")) );
  addField( (_magY       = new DoubleData("mMag_yCB")) );
  addField( (_magZ       = new DoubleData("mMag_zCB")) );

  addField( (_temp       = new DoubleData("mTempCB")) );

  // Setup units and longname fields for logging
  //
  _roll->setUnits("Degrees");
  _rollRate->setUnits("Degrees/second");
  _pitch->setUnits("Degrees");
  _pitchRate->setUnits("Degrees/second");
  _yaw->setUnits("Degrees");
  _yawRate->setUnits("Degrees/second");

  _accelX->setUnits("G");
  _accelY->setUnits("G");
  _accelZ->setUnits("G");

  _magX->setUnits("Gauss");
  _magY->setUnits("Gauss");
  _magZ->setUnits("Gauss");

  _temp->setUnits("Celsius");

  _roll->setLongName("Roll");
  _rollRate->setLongName("Roll rate");
  _pitch->setLongName("Pitch");
  _pitchRate->setLongName("Pitch rate");
  _yaw->setLongName("Yaw");
  _yawRate->setLongName("Yaw rate");

  _accelX->setLongName("Acceleration along vehicle x-axis");
  _accelY->setLongName("Acceleration along vehicle y-axis");
  _accelZ->setLongName("Acceleration along vehicle z-axis");

  _magX->setLongName("Magnetic field along vehicle x-axis");
  _magY->setLongName("Magnetic field along vehicle y-axis");
  _magZ->setLongName("Magnetic field along vehicle z-axis");

  _temp->setLongName("Crossbow internal temperature");

  _crossbow = crossbow;
}  

CrossbowLog::~CrossbowLog()
{
  delete _roll;
  delete _rollRate;
  delete _pitch;
  delete _pitchRate;
  delete _yaw;
  delete _yawRate;

  delete _magX;
  delete _magY;
  delete _magZ;
  
  delete _accelX;
  delete _accelY;
  delete _accelZ;

  delete _temp;
}

void CrossbowLog::setFields()
{
  _roll->setValue( _crossbow->_output.data.roll );
  _rollRate->setValue( _crossbow->_output.data.rollRate );
  _pitch->setValue( _crossbow->_output.data.pitch);
  _pitchRate->setValue( _crossbow->_output.data.pitchRate );
  _yaw->setValue( _crossbow->_output.data.yaw );
  _yawRate->setValue( _crossbow->_output.data.yawRate );

  _accelX->setValue( _crossbow->_output.data.accelX );
  _accelY->setValue( _crossbow->_output.data.accelY );
  _accelZ->setValue( _crossbow->_output.data.accelZ );
  
  _magX->setValue( _crossbow->_output.data.magX );
  _magY->setValue( _crossbow->_output.data.magY );
  _magZ->setValue( _crossbow->_output.data.magZ );
  
  _temp->setValue( _crossbow->_output.data.temperature );

}
