////////////////////////////////////////////////////////////////////////////////
//
// PURPOSE:  Dvl Log Class.
// AUTHOR:   Rob McEwen.
// DATE:     01/3/9
// COMMENTS: 
//
////////////////////////////////////////////////////////////////////////////////
//

#include "Kearfott.h"
#include "DvlLog.h"
#include "Dvl.h"


DvlLog::DvlLog(Kearfott *dvl, DataLog::FileFormat fileFormat)
  : DataLogWriter(DvlLogName, fileFormat, AutoTimeStamp)
{
  m_dvl = dvl;
  setMnemonic("dataDvl");

  addField(m_dvlBotVel_x   = new DoubleData("dvlBotVelx") );
  addField(m_dvlBotVel_y   = new DoubleData("dvlBotVely") );
  addField(m_dvlBotVel_z   = new DoubleData("dvlBotVelz") );
  addField(m_dvlBotVel_e   = new DoubleData("dvlBotVele") );
  addField(m_dvlBotVelStat = new ShortData ("dvlBotVelStat") );

  addField(m_dvlWatVel_x   = new DoubleData("dvlWatVelx") );
  addField(m_dvlWatVel_y   = new DoubleData("dvlWatVely") );
  addField(m_dvlWatVel_z   = new DoubleData("dvlWatVelz") );
  addField(m_dvlWatVel_e   = new DoubleData("dvlWatVele") );
  addField(m_dvlWatVelStat = new ShortData ("dvlWatVelStat") );

  addField(m_dvlTemp    = new DoubleData("dvlTemp") );
  addField(m_dvlPitch   = new DoubleData("dvlPitch") );
  addField(m_dvlRoll    = new DoubleData("dvlRoll") );
  addField(m_dvlHeading = new DoubleData("dvlHeading") );
  addField(m_dvlBeam1 =   new DoubleData("dvlBeam1") );
  m_dvlBeam1->setAsciiFormat("%4.6f");
  addField(m_dvlBeam2 =   new DoubleData("dvlBeam2") );
  m_dvlBeam2->setAsciiFormat("%4.6f");
  addField(m_dvlBeam3 =   new DoubleData("dvlBeam3") );
  m_dvlBeam3->setAsciiFormat("%4.6f");
  addField(m_dvlBeam4 =   new DoubleData("dvlBeam4") );
  m_dvlBeam3->setAsciiFormat("%4.6f");
  addField(m_dvlRange   = new DoubleData("dvlRange") );
  addField(m_dvlToping = new DoubleData("dvlToping") );
  addField(m_dvlSpdSnd = new DoubleData("dvlSpdSnd") );
  m_dvlToping->setAsciiFormat("%20.4f");
  m_dvlSpdSnd->setAsciiFormat("%12.4f");
}


DvlLog::~DvlLog()
{
  delete m_dvlBotVel_x;
  delete m_dvlBotVel_y;
  delete m_dvlBotVel_z;
  delete m_dvlBotVel_e;
  delete m_dvlBotVelStat;

  delete m_dvlWatVel_x;
  delete m_dvlWatVel_y;
  delete m_dvlWatVel_z;
  delete m_dvlWatVel_e;
  delete m_dvlWatVelStat;

  delete m_dvlTemp;
  delete m_dvlPitch;
  delete m_dvlRoll;
  delete m_dvlHeading;
  delete m_dvlBeam1;
  delete m_dvlBeam2;
  delete m_dvlBeam3;
  delete m_dvlBeam4;
  delete m_dvlRange;
  delete m_dvlToping;
  delete m_dvlSpdSnd;
}


void DvlLog::setFields()
{
  m_dvlBotVel_x->setValue( m_dvl->_dvlOutput->data.bottomTrackVelocity[0] );
  m_dvlBotVel_y->setValue( m_dvl->_dvlOutput->data.bottomTrackVelocity[1] );
  m_dvlBotVel_z->setValue( m_dvl->_dvlOutput->data.bottomTrackVelocity[2] );
  m_dvlBotVel_e->setValue( m_dvl->_dvlOutput->data.bottomTrackVelocity[3] );
  m_dvlBotVelStat->setValue( (short) (m_dvl->_dvlOutput->data.bottomStatus) );

  m_dvlWatVel_x->setValue( m_dvl->_dvlOutput->data.waterMassVelocity[0] );
  m_dvlWatVel_y->setValue( m_dvl->_dvlOutput->data.waterMassVelocity[1] );
  m_dvlWatVel_z->setValue( m_dvl->_dvlOutput->data.waterMassVelocity[2] );
  m_dvlWatVel_e->setValue( m_dvl->_dvlOutput->data.waterMassVelocity[3] );
  m_dvlWatVelStat->setValue( (short) (m_dvl->_dvlOutput->data.waterStatus) );

  m_dvlTemp->   setValue( (m_dvl->_dvlOutput->data.temp) );
  m_dvlPitch->  setValue( (m_dvl->_scaledNavData.pitch) );
  m_dvlRoll->   setValue( (m_dvl->_scaledNavData.roll) );
  m_dvlHeading->setValue( (m_dvl->_scaledNavData.heading) );
  m_dvlBeam1->  setValue( (m_dvl->_dvlOutput->data.beam1) );
  m_dvlBeam2->  setValue( (m_dvl->_dvlOutput->data.beam2) );
  m_dvlBeam3->  setValue( (m_dvl->_dvlOutput->data.beam3) );
  m_dvlBeam4->  setValue( (m_dvl->_dvlOutput->data.beam4) );
  m_dvlRange->  setValue( (m_dvl->_scaledNavData.bheight) );
  m_dvlToping-> setValue( (m_dvl->_dvlOutput->data.toping) );
  m_dvlSpdSnd-> setValue( (m_dvl->_dvlOutput->data.spdsnd) );
}

