/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : KearfottGpsLog.cc                                             */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 2004/01/23                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include "DataLogWriter.h"
#include "GpsLog.h"
#include "TimeP.h"
#include "Syslog.h"
#include "Kearfott.h"
#include "KearfottGpsLog.h"

KearfottGpsLog::KearfottGpsLog(Kearfott *kearfott, 
			       DataLog::FileFormat fileFormat)
  : DataLogWriter(GpsLogName, fileFormat, AutoTimeStamp)
{

  _kearfott = kearfott;

  setMnemonic("gps");
  //
  //addField((_sampleTime = new IntegerData("GPSTime")));
  addField((_gpsHours = new ShortData("hours")));
  addField((_gpsMinutes = new ShortData("minutes")));
  addField((_gpsSeconds = new ShortData("seconds")));
  addField((_gpsCentiSeconds = new ShortData("centiSeconds")));
  addField((_latitude = new AngleData("latitude")));
  addField((_longitude = new AngleData("longitude")));

  _latitude->setAsciiFormat("%8.8e");
  _longitude->setAsciiFormat("%8.8e");

  //addField((_NSHem = new CharData("NSHemisphere")));
  //addField((_EWHem = new CharData("EWHemisphere")));
  addField((_quality = new ShortData("quality")));
  addField((_nSatellites = new ShortData("numberOfSatellites")));
  addField((_hdop = new DoubleData("hdop")));
  addField((_altitude = new DoubleData("antennaHeight")));
  addField((_geoidHeight = new DoubleData("geoHeight")));
  addField((_dgpsDataAge = new ShortData("dgpsDataAge")));
  addField((_dgpsStationID = new ShortData("dgpsRSID")));

  //_sampleTime->setUnits("Seconds since 01-01-1970");
  _gpsHours->setUnits("Hours");
  _gpsMinutes->setUnits("Minutes");
  _gpsSeconds->setUnits("Seconds");
  _gpsCentiSeconds->setUnits("CentiSeconds");
  _latitude->setUnits("Degrees");
  _longitude->setUnits("Degrees");
  _quality->setUnits("Unitless");
  _nSatellites->setUnits("Unitless");
  _hdop->setUnits("Unitless");
  _altitude->setUnits("meters");
  _geoidHeight->setUnits("meters");
  _dgpsDataAge->setUnits("seconds");
  _dgpsStationID->setUnits("Unitless");

  //_sampleTime->setLongName("GPS Time");
  _gpsHours->setLongName("Hours");
  _gpsMinutes->setLongName("Minutes");
  _gpsSeconds->setLongName("Seconds");
  _gpsCentiSeconds->setLongName("CentiSeconds");
  _latitude->setLongName("Vehicle latitude");
  _longitude->setLongName("Vehicle longitude");
  _quality->setLongName("GPS quality code");
  _nSatellites->setLongName("Number of satellites visible");
  _hdop->setLongName("Horizontal dilution of precision");
  _altitude->setLongName("Altitude of GPS antenna above mean sea level");
  _geoidHeight->setLongName("Geoidal separation");
  _dgpsDataAge->setLongName("Age of differential GPS correction");
  _dgpsStationID->setLongName("Differential reference station ID");

  addField((_gsaMode = new ShortData("gsaMode")));
  _gsaMode->setUnits("Unitless");
  _gsaMode->setLongName("ManualAuto");
  addField((_gsaFixMode = new ShortData("gsaFixMode")));
  _gsaFixMode->setUnits("Unitless");
  _gsaFixMode->setLongName("PositionMode");
  addField((_gsaSatID1 = new ShortData("gsaSatID1")));
  _gsaSatID1->setUnits("Unitless");
  _gsaSatID1->setLongName("Channel 1");
  addField((_gsaSatID2 = new ShortData("gsaSatID2")));
  _gsaSatID2->setUnits("Unitless");
  _gsaSatID2->setLongName("Channel 2");
  addField((_gsaSatID3 = new ShortData("gsaSatID3")));
  _gsaSatID3->setUnits("Unitless");
  _gsaSatID3->setLongName("Channel 3");
  addField((_gsaSatID4 = new ShortData("gsaSatID4")));
  _gsaSatID4->setUnits("Unitless");
  _gsaSatID4->setLongName("Channel 4");
  addField((_gsaSatID5 = new ShortData("gsaSatID5")));
  _gsaSatID5->setUnits("Unitless");
  _gsaSatID5->setLongName("Channel 5");
  addField((_gsaSatID6 = new ShortData("gsaSatID6")));
  _gsaSatID6->setUnits("Unitless");
  _gsaSatID6->setLongName("Channel 6");
  addField((_gsaSatID7 = new ShortData("gsaSatID7")));
  _gsaSatID7->setUnits("Unitless");
  _gsaSatID7->setLongName("Channel 7");
  addField((_gsaSatID8 = new ShortData("gsaSatID8")));
  _gsaSatID8->setUnits("Unitless");
  _gsaSatID8->setLongName("Channel 8");
  addField((_gsaSatID9 = new ShortData("gsaSatID9")));
  _gsaSatID9->setUnits("Unitless");
  _gsaSatID9->setLongName("Channel 9");
  addField((_gsaSatID10 = new ShortData("gsaSatID10")));
  _gsaSatID10->setUnits("Unitless");
  _gsaSatID10->setLongName("Channel 10");
  addField((_gsaSatID11 = new ShortData("gsaSatID11")));
  _gsaSatID11->setUnits("Unitless");
  _gsaSatID11->setLongName("Channel 11");
  addField((_gsaSatID12 = new ShortData("gsaSatID12")));
  _gsaSatID12->setUnits("Unitless");
  _gsaSatID12->setLongName("Channel 12");
  addField((_gsaSatID13 = new ShortData("gsaSatID13")));
  _gsaSatID13->setUnits("Unitless");
  _gsaSatID13->setLongName("Channel 13");
  addField((_gsaSatID14 = new ShortData("gsaSatID14")));
  _gsaSatID14->setUnits("Unitless");
  _gsaSatID14->setLongName("Channel 14");
  addField((_gsaPdop = new FloatData("gsaPdop")));
  _gsaPdop->setUnits("Unitless");
  _gsaPdop->setLongName("Pdop");
  addField((_gsaHorizDop = new FloatData("gsaHorizDop")));
  _gsaHorizDop->setUnits("Unitless");
  _gsaHorizDop->setLongName("HorizDop");
  addField((_gsaVertiDop = new FloatData("gsaVertiDop")));
  _gsaVertiDop->setUnits("Unitless");
  _gsaVertiDop->setLongName("VertiDop");

}


KearfottGpsLog::~KearfottGpsLog()
{
  //delete _sampleTime;
  delete _gpsHours;
  delete _gpsMinutes;
  delete _gpsSeconds;
  delete _gpsCentiSeconds;
  delete _latitude;
  delete _longitude;
  //delete _NSHem;
  //delete _EWHem;
  delete _quality;
  delete _nSatellites;
  delete _hdop;
  delete _altitude;
  delete _geoidHeight;
  delete _dgpsDataAge;
  delete _dgpsStationID;

  delete _gsaMode;  
  delete _gsaFixMode;
  delete _gsaSatID1;
  delete _gsaSatID2;
  delete _gsaSatID3;
  delete _gsaSatID4;
  delete _gsaSatID5;
  delete _gsaSatID6;
  delete _gsaSatID7;
  delete _gsaSatID8;
  delete _gsaSatID9;
  delete _gsaSatID10;
  delete _gsaSatID11;
  delete _gsaSatID12;
  delete _gsaSatID13;
  delete _gsaSatID14;
  delete _gsaPdop;
  delete _gsaHorizDop;
  delete _gsaVertiDop;
}

void KearfottGpsLog::setFields()
{

  //_sampleTime->setValue(_gps->sampleTime());
  _gpsHours->setValue(_kearfott->hours());
  _gpsMinutes->setValue(_kearfott->minutes());
  _gpsSeconds->setValue(_kearfott->seconds());
  _gpsCentiSeconds->setValue(_kearfott->centiSeconds());
  _latitude->setValue(_kearfott->latitude());
  _longitude->setValue(_kearfott->longitude());
  //_NSHem->setValue(_kearfott->nsHemisphere());
  //_EWHem->setValue(_kearfott->ewHemisphere());
  _quality->setValue(_kearfott->quality());
  _nSatellites->setValue(_kearfott->nSatellites());
  _hdop->setValue(_kearfott->hdop());
  _altitude->setValue(_kearfott->altitude());
  _geoidHeight->setValue(_kearfott->geoidHeight());
  _dgpsDataAge->setValue(_kearfott->dgpsDataAge());
  _dgpsStationID->setValue(_kearfott->dgpsStationId());


  _gsaMode->setValue(_kearfott->_gsa.mode);
  _gsaFixMode->setValue(_kearfott->_gsa.fixMode);

  _gsaSatID1->setValue(_kearfott->_gsa.satID1);
  _gsaSatID1->setValue(_kearfott->_gsa.satID2);
  _gsaSatID1->setValue(_kearfott->_gsa.satID3);
  _gsaSatID1->setValue(_kearfott->_gsa.satID4);
  _gsaSatID1->setValue(_kearfott->_gsa.satID5);
  _gsaSatID1->setValue(_kearfott->_gsa.satID6);
  _gsaSatID1->setValue(_kearfott->_gsa.satID7);
  _gsaSatID1->setValue(_kearfott->_gsa.satID8);
  _gsaSatID1->setValue(_kearfott->_gsa.satID9);
  _gsaSatID1->setValue(_kearfott->_gsa.satID10);
  _gsaSatID1->setValue(_kearfott->_gsa.satID11);
  _gsaSatID1->setValue(_kearfott->_gsa.satID12);
  _gsaSatID1->setValue(_kearfott->_gsa.satID13);
  _gsaSatID1->setValue(_kearfott->_gsa.satID14);

  _gsaPdop->setValue(_kearfott->_gsa.pdop);
  _gsaHorizDop->setValue(_kearfott->_gsa.horizDop);
  _gsaVertiDop->setValue(_kearfott->_gsa.vertiDop);

}



