/****************************************************************************/
/* Copyright (c) 2003 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : MtiLog.cc                                                     */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 09/01/2006                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include "DataLogWriter.h"
#include "MtiLog.h"
#include "MtiOutput.h"
#include "MtiDriver.h"
#include "TimeP.h"
#include "Syslog.h"

MtiLog::MtiLog(MtiDriver *mti, DataLog::FileFormat fileFormat)
  : DataLogWriter("Mti", fileFormat, AutoTimeStamp) 
{
  Syslog::write("MtiLog.cc -- beginning constructor...\n");
  setMnemonic(name());

  addField((_accX = new DoubleData("Acceleration_X")));
  addField((_accY = new DoubleData("Acceleration_Y")));
  addField((_accZ = new DoubleData("Acceleration_Z")));

  addField((_gyrX = new DoubleData("Turn_Rate_X")));
  addField((_gyrY = new DoubleData("Turn_Rate_Y")));
  addField((_gyrZ = new DoubleData("Turn_Rate_Z")));

  addField((_magX = new DoubleData("Magnetic_Field_X")));
  addField((_magY = new DoubleData("Magnetic_Field_Y")));
  addField((_magZ = new DoubleData("Magnetic_Field_Z")));

  addField((_q0 = new DoubleData("Quaternion_0")));
  addField((_q1 = new DoubleData("Quaternion_1")));
  addField((_q2 = new DoubleData("Quaternion_2")));
  addField((_q3 = new DoubleData("Quaternion_3")));

  // Set preferred format for ascii printing
  //
  _accX->setAsciiFormat("%8.8e");
  _accY->setAsciiFormat("%8.8e");
  _accZ->setAsciiFormat("%8.8e");

  _gyrX->setAsciiFormat("%8.8e");
  _gyrY->setAsciiFormat("%8.8e");
  _gyrZ->setAsciiFormat("%8.8e");

  _magX->setAsciiFormat("%8.8e");
  _magY->setAsciiFormat("%8.8e");
  _magZ->setAsciiFormat("%8.8e");

  _q0->setAsciiFormat("%8.8e");
  _q1->setAsciiFormat("%8.8e");
  _q2->setAsciiFormat("%8.8e");
  _q3->setAsciiFormat("%8.8e");

  _mti = mti;

  Syslog::write("MtiLog.cc -- constructor succeeded\n");
}


MtiLog::~MtiLog()
{
  delete _accX;
  delete _accY;
  delete _accZ;
  
  delete _gyrX;
  delete _gyrY;
  delete _gyrZ;
  
  delete _magX;
  delete _magY;
  delete _magZ;
  
  delete _q0;
  delete _q1;
  delete _q2;
  delete _q3;
}


void MtiLog::setFields()
{

  // Set range value
  //
  _accX->setValue(_mti->_mtiOutput->data.accX);
  _accY->setValue(_mti->_mtiOutput->data.accY);
  _accZ->setValue(_mti->_mtiOutput->data.accZ);
  
  _gyrX->setValue(_mti->_mtiOutput->data.gyrX);
  _gyrY->setValue(_mti->_mtiOutput->data.gyrY);
  _gyrZ->setValue(_mti->_mtiOutput->data.gyrZ);
  
  _magX->setValue(_mti->_mtiOutput->data.magX);
  _magY->setValue(_mti->_mtiOutput->data.magY);
  _magZ->setValue(_mti->_mtiOutput->data.magZ);
  
  _q0->setValue(_mti->_mtiOutput->data.quat0);
  _q1->setValue(_mti->_mtiOutput->data.quat1);
  _q2->setValue(_mti->_mtiOutput->data.quat2);
  _q3->setValue(_mti->_mtiOutput->data.quat3);
}
