QRSS Rx Network receiver. A receiver to sample a segment of RF spectrum and send this data to a server for further processing and display. NXP mbed Design Challenge entry (Honorable Mention). Published in Circuit Cellar, Feb 2012
Dependencies: NetServices mbed DNSResolver
Diff: gps.h
- Revision:
- 0:82ff15078322
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gps.h Wed Jan 25 20:32:53 2012 +0000 @@ -0,0 +1,171 @@ +/*--------------------------------------------------------------------------- + + QRSS Receiver Application + + by Clayton ZL3TKA/VK1TKA + clayton@isnotcrazy.com + + Header File for GPS Module + +---------------------------------------------------------------------------*/ +#ifndef _GPS_H +#define _GPS_H + +#include "mbed.h" + +// Definitions + +#define GPS_FIELDLEN 20 +#define GPS_LINELENGTH 200 +#define GPS_MSGTIMEOUT 3000 // GPS message timeout (mSecs) +#define GPS_PULSETIMEOUT 1500 // GPS pulse timeout (mSecs) + +// comments + +// Macros + +// +// Classes +// + +//--------------------------------------------------------------------------- +// +// GPS Module Class +// +class TGPSController +{ + // create/destroy + public: + TGPSController(); + ~TGPSController() {} + + // public type - GPS data + public: + typedef struct _gpsdata + { + int32_t iGPSQuality; + int32_t iGPSSatellites; + int32_t iGPSTimeSeconds; + int32_t iGPSLatMicroDegrees; + int32_t iGPSLongMicroDegrees; + int32_t iGPSAltitudeMeters; + } TGPSData; + + // local type - for parsing message numbers + private: + typedef struct _parsenumber + { + uint32_t uiNumber; + int iNumberLen; + int iNumberSign; + int iNumberDecimals; + } TParsedNum; + + // API + public: + // Initi8alise routine + void Init(); + + // Processing routine + void Poll(); + + // Return the last line from the GPS + const char * LastLine() + { return szLastLine; } + + // indicate a new last line has been received from the GPS unit + // Self resetting + bool NewLine() + { + bool bRet = bNewLine; + bNewLine = false; + return bRet; + } + + // Get GPS Data + // Returns status value (0=offline) + int GPSData( TGPSData &GPSDat ) + { GPSDat = GPSRecord; + return GPSDat.iGPSQuality; } + + // Private methods + private: + // callback on 1PPS rising edge + void PPSPulse(); + + // Parse a number + bool ParseNumber( char cChr ); + void ResetNumber(); + + // Parse data from the GPS + // Return true if a completed valid sentence is received + bool ParseData( char cChr ); + + // Process the data from the GPS message + // Returns 0 if all data is good, or an error code + // Call after a valid ParseData has occurred + int ProcessGPSData(); + + // data + private: + // 1PPS pin + DigitalIn PPSInput; + + // GPS Serial Port + Serial GPSPort; + + // GPS Status LED + DigitalOut GPSUpLED; + + // Interrupt on 1PPS pulse + InterruptIn PPSEvent; + + // 1PPS flag and captured timer registers + bool bPulsed; + uint32_t uiPPSCapture; + uint32_t uiLOscCapture; + + // GPS data timeout timer + Timer GPSMsgTimeout; + Timer GPSPulseTimeout; + + // Parsing data and resulting values + int iParseState; + TParsedNum ParseNum; + char cCharacter; + + // last line variables + char szCurrentLine[GPS_LINELENGTH+1]; + char szLastLine[GPS_LINELENGTH+1]; + bool bNewLine; + + // GPS message data - raw data from message + TParsedNum GPSTime; + TParsedNum GPSLatitude; + char GPSLatNS; + TParsedNum GPSLongitude; + char GPSLongEW; + TParsedNum GPSQuality; + TParsedNum GPSSatellites; + TParsedNum GPSDOP; + TParsedNum GPSAltitude; + char GPSAltType; + TParsedNum GPSHeight; + char GPSHeightType; + uint8_t ucMsgChecksum; + uint8_t ucFinalChecksum; + uint8_t ucChecksum; + + // Final GPS info (validated) + TGPSData GPSRecord; +}; + +// declare the GPS module +extern TGPSController GPSModule; + +#endif + +//--------------------------------------------------------------------------- +// END +//--------------------------------------------------------------------------- +