#include <unistd.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include <fcntl.h>
#include <errno.h>
#include <iostream.h>

#include "MissionClock.h"
#include "GPSOutput.h"
#include "SharedData.h"
#include "PeriodicTask.h"
#include "SerialDevice.h"
#include "time.h"
#include "GPSLog.h"

/*
CLASS 
GPS

DESCRIPTION
Device Driver for GPS 

AUTHOR
John O'Rieffely
*/

//#define BAUD 4800
//#define PARITY "NONE"
//#define STOP_BITS 1
//#define DATA_BITS 8
//#define READ_TIMEOUT 1000
//#define GPS_MAX_REPLY 82

class GPS : public PeriodicTask{

  friend class GPSLog;

 public:
  
///////////////////////////////////////////////////////////////////////
// constructor, not used
  GPS();

///////////////////////////////////////////////////////////////////////
// constructor
  GPS(SerialDevice *interface);

///////////////////////////////////////////////////////////////////////
// destructor
  ~GPS();

///////////////////////////////////////////////////////////////////////
// Periodic Callback function
  virtual void runGPS();

 protected:

  GPSLog *_log;

  unsigned int UTCTime;
  double latitude;
  char NSHemisphere;
  char EWHemisphere;
  double longitude;
  int quality;
  int numSatellites;
  float HDOP;
  float antennaHeight;
  float geoidalHeight;
  int DGPSdataAge;
  int DGPSReferenceStationID;
  timespec readtime;

  GPSOutput *_output;
  GPSOutput::Data _outputData;
  MissionClock *clock;
  SerialDevice *_device;
  
  int getGPS(void);
  int getData(void);
  int init();
  int read(char *,int, int);
  int write(char *, int);


};
