94 lines
2.0 KiB
C++
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
|