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

GpsLog::GpsLog(LoggableGps *gps, DataLog::FileFormat fileFormat,
               char *logName) 
  : DataLogWriter(logName, fileFormat, AutoTimeStamp) 
{
  setMnemonic("gps");

  //addField((_sampleTime = new IntegerData("GPSTime")));
  addField((_gpsHours = new IntegerData("hours")));
  addField((_gpsMinutes = new IntegerData("minutes")));
  addField((_gpsSeconds = new IntegerData("seconds")));
  addField((_gpsCentiSeconds = new IntegerData("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");

  _gps = gps;
}


GpsLog::~GpsLog()
{
  //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;
  
}

void GpsLog::setFields()
{

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



