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

  DESCRIPTION: Logging object for the WaypointWall behavior 

  $Id: WaypointWallLog.cc,v 1.3.2.4 2017/02/24 17:23:40 rob Exp $
  *-----------------------------------------------------------------------*/

#include "WaypointWall.h"

WaypointWallLog::WaypointWallLog(DataLog::FileFormat format)
  : DataLogWriter( "WaypointWall", format, AutoTimeStamp )
{
  setMnemonic("wpw.data");

  addField( (_xTrkOffset = new DoubleData("wpw.xTrkOffset")) );

  // Setup units and longname fields for logging
  //
  _xTrkOffset->setUnits("Meters");
  _xTrkOffset->setLongName("cross track offset");

  addField( (_counter = new IntegerData("wpw.counter")) );

  addField( (_minBeamRange = new DoubleData("wpw.minBeamRange")) );
  addField( (_beamIndxMin  = new IntegerData("wpw.beamIndxMin")) );

  addField( (_rangeLS    = new DoubleData("wpw.rangeLS")) );
  addField( (_beamIndxLS = new IntegerData("wpw.beamIndxLS")) );

  addField( (_rangeLSMedian    = new DoubleData("wpw.rangeLSMedian")) );
  addField( (_beamIndxLSMedian = new IntegerData("wpw.beamIndxLSMedian")) );

  addField( (_northings    = new DoubleData("wpw.northings")) );
  addField( (_eastings     = new DoubleData("wpw.eastings")) );
  addField( (_depth        = new DoubleData("wpw.depth")) );
  
  addField( (_phi          = new DoubleData("wpw.phi")) );
  addField( (_theta        = new DoubleData("wpw.theta")) );
  addField( (_psi          = new DoubleData("wpw.psi")) );

  addField( (_psiWall_B    = new DoubleData("wpw.psiWall_B")) );
  addField( (_yInterWall_B = new DoubleData("wpw.yInterWall_B")) );

  addField( (_allInPortQuarter = new ShortData("wpw.allInPortQuarter")) );
  addField( (_beamIndx     = new IntegerData("wpw.beamIndx")) );

}  

WaypointWallLog::~WaypointWallLog()
{
  delete _xTrkOffset;
  delete _counter;

  delete _minBeamRange;
  delete _beamIndxMin;

  delete _rangeLS;
  delete _beamIndxLS;

  delete _rangeLSMedian;
  delete _beamIndxLSMedian;

  delete _northings;
  delete _eastings;
  delete _depth;

  delete _phi;
  delete _theta;
  delete _psi;

  delete _psiWall_B;
  delete _yInterWall_B;

  delete _allInPortQuarter;
  delete _beamIndx;
}

void WaypointWallLog::setFields(WaypointWall *waypointWall)
{
  _xTrkOffset->setValue( waypointWall->_xTrkOffset);
  _counter   ->setValue( waypointWall->_counter);

  _minBeamRange ->setValue( waypointWall->_minBeamRange);
  _beamIndxMin  ->setValue( waypointWall->_beamIndxMin);

  _rangeLS   ->setValue( waypointWall->_rangeLS);
  _beamIndxLS->setValue( waypointWall->_beamIndxLS);

  _rangeLSMedian   ->setValue( waypointWall->_rangeLSMedian);
  _beamIndxLSMedian->setValue( waypointWall->_beamIndxLSMedian);

  _northings       ->setValue( waypointWall->_position.x );
  _eastings        ->setValue( waypointWall->_position.y );
  _depth           ->setValue( waypointWall->_position.z );

  _phi             ->setValue( waypointWall->_attitude.roll );
  _theta           ->setValue( waypointWall->_attitude.pitch );
  _psi             ->setValue( waypointWall->_attitude.yaw );

  _psiWall_B       ->setValue( waypointWall->_psiWall_B );
  _yInterWall_B    ->setValue( waypointWall->_yInterWall_B );

  _allInPortQuarter->setValue( waypointWall->_allInPortQuarter );
  _beamIndx        ->setValue( waypointWall->_beamIndx);
}

void WaypointWallLog::setFields()
{
}

