Files
Cnomicon/include/libgps++/GpsParser.h
2021-01-22 10:16:20 -05:00

94 lines
2.0 KiB
C++

//
// Linux GPS
//
//
/* prevent multiple inclusions */
#ifndef __GpsParser__
#define __GpsParser__
/* includes *****************************************************************/
#include <vector>
#include "netlib.h"
#include "GpsListener.h"
#include "NmeaProtocol.h"
/* defines ******************************************************************/
/* macros *******************************************************************/
/* structs & typedefs *******************************************************/
/* c class definitions ******************************************************/
//
class GpsParser : public NmeaProtocol {
// public data
public:
char Vendor[32];
char Product[32];
// Position Data
GpsPoint PosData;
// Accuracy, Dilution, Error
ErrorInfo ErrInfo;
// Satellite info
SatelliteInfo SatInfo;
protected:
// protected data
std::vector<GpsListener *> GpsListeners;
// incoming data buffer
u_char data[2048];
u_char lastc;
u_short numbytes; // current byte count
u_short totbytes; // expect byte count
u_short checksum;
u_long counter; // # parsed
// private data
private:
// private methods
// static data
// public methods
public:
// constructors
GpsParser();
// destructor
virtual ~GpsParser();
// virtual functions
virtual void GpsInit( void ) {};
virtual int GpsDecode( const char *buf, int max );
virtual int GpsParse( const char *buf, int max );
// public methods
// subscribe/unsubscribe
void Subscribe( GpsListener *ear ) {
GpsInit();
if (ear)
GpsListeners.push_back(ear);
};
int GetNumParsed(void) {return counter;};
// misc
int GpsTime( struct timespec *tv ) {*tv=PosData.TimeStamp;return PosData.Fix;};
int GpsFix(void) {return PosData.Fix;};
int Gps2Vii( char *buf, int max );
// static functions
};
#endif