// // Linux GPS // // /* prevent multiple inclusions */ #ifndef __GpsParser__ #define __GpsParser__ /* includes *****************************************************************/ #include #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 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