A porting of a GPS decoding and presenting program within the mbos RTOS. It is not a definitive application but a study program to test NMEA full decoding library and a first approach to an RTOS. Many thanks to Andrew Levido for his support and his patience on teaching me the RTOS principles from the other side of the Earth. It uses NMEA library by Tim (xtimor@gmail.com) ported by Ken Todotani (http://mbed.org/users/todotani/) on public mbed library (http://mbed.org/users/todotani/programs/GPS_nmeaLib/5yo4h) also available, as original universal C library, on http://nmea.sourceforge.net
Dependencies: mbos Watchdog TextLCD mbed ConfigFile
nmea/sentence.h
- Committer:
- guiott
- Date:
- 2012-02-03
- Revision:
- 3:a2f9eb3b8a16
- Parent:
- 0:d177c0087d1f
File content as of revision 3:a2f9eb3b8a16:
/* * * NMEA library * URL: http://nmea.sourceforge.net * Author: Tim (xtimor@gmail.com) * Licence: http://www.gnu.org/licenses/lgpl.html * $Id: sentence.h 17 2008-03-11 11:56:11Z xtimor $ * */ /*! \file */ #ifndef __NMEA_SENTENCE_H__ #define __NMEA_SENTENCE_H__ #include "info.h" #ifdef __cplusplus extern "C" { #endif /** * NMEA packets type which parsed and generated by library */ enum nmeaPACKTYPE { GPNON = 0x0000, /**< Unknown packet type. */ GPGGA = 0x0001, /**< GGA - Essential fix data which provide 3D location and accuracy data. */ GPGSA = 0x0002, /**< GSA - GPS receiver operating mode, SVs used for navigation, and DOP values. */ GPGSV = 0x0004, /**< GSV - Number of SVs in view, PRN numbers, elevation, azimuth & SNR values. */ GPRMC = 0x0008, /**< RMC - Recommended Minimum Specific GPS/TRANSIT Data. */ GPVTG = 0x0010 /**< VTG - Actual track made good and speed over ground. */ }; /** * GGA packet information structure (Global Positioning System Fix Data) */ typedef struct _nmeaGPGGA { nmeaTIME utc; /**< UTC of position (just time) */ double lat; /**< Latitude in NDEG - [degree][min].[sec/60] */ char ns; /**< [N]orth or [S]outh */ double lon; /**< Longitude in NDEG - [degree][min].[sec/60] */ char ew; /**< [E]ast or [W]est */ int sig; /**< GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive) */ int satinuse; /**< Number of satellites in use (not those in view) */ double HDOP; /**< Horizontal dilution of precision */ double elv; /**< Antenna altitude above/below mean sea level (geoid) */ char elv_units; /**< [M]eters (Antenna height unit) */ double diff; /**< Geoidal separation (Diff. between WGS-84 earth ellipsoid and mean sea level. '-' = geoid is below WGS-84 ellipsoid) */ char diff_units; /**< [M]eters (Units of geoidal separation) */ double dgps_age; /**< Time in seconds since last DGPS update */ int dgps_sid; /**< DGPS station ID number */ } nmeaGPGGA; /** * GSA packet information structure (Satellite status) */ typedef struct _nmeaGPGSA { char fix_mode; /**< Mode (M = Manual, forced to operate in 2D or 3D; A = Automatic, 3D/2D) */ int fix_type; /**< Type, used for navigation (1 = Fix not available; 2 = 2D; 3 = 3D) */ int sat_prn[NMEA_MAXSAT]; /**< PRNs of satellites used in position fix (null for unused fields) */ double PDOP; /**< Dilution of precision */ double HDOP; /**< Horizontal dilution of precision */ double VDOP; /**< Vertical dilution of precision */ } nmeaGPGSA; /** * GSV packet information structure (Satellites in view) */ typedef struct _nmeaGPGSV { int pack_count; /**< Total number of messages of this type in this cycle */ int pack_index; /**< Message number */ int sat_count; /**< Total number of satellites in view */ nmeaSATELLITE sat_data[NMEA_SATINPACK]; } nmeaGPGSV; /** * RMC packet information structure (Recommended Minimum sentence C) */ typedef struct _nmeaGPRMC { nmeaTIME utc; /**< UTC of position */ char status; /**< Status (A = active or V = void) */ double lat; /**< Latitude in NDEG - [degree][min].[sec/60] */ char ns; /**< [N]orth or [S]outh */ double lon; /**< Longitude in NDEG - [degree][min].[sec/60] */ char ew; /**< [E]ast or [W]est */ double speed; /**< Speed over the ground in knots */ double direction; /**< Track angle in degrees True */ double declination; /**< Magnetic variation degrees (Easterly var. subtracts from true course) */ char declin_ew; /**< [E]ast or [W]est */ char mode; /**< Mode indicator of fix type (A = autonomous, D = differential, E = estimated, N = not valid, S = simulator) */ } nmeaGPRMC; /** * VTG packet information structure (Track made good and ground speed) */ typedef struct _nmeaGPVTG { double dir; /**< True track made good (degrees) */ char dir_t; /**< Fixed text 'T' indicates that track made good is relative to true north */ double dec; /**< Magnetic track made good */ char dec_m; /**< Fixed text 'M' */ double spn; /**< Ground speed, knots */ char spn_n; /**< Fixed text 'N' indicates that speed over ground is in knots */ double spk; /**< Ground speed, kilometers per hour */ char spk_k; /**< Fixed text 'K' indicates that speed over ground is in kilometers/hour */ } nmeaGPVTG; void nmea_zero_GPGGA(nmeaGPGGA *pack); void nmea_zero_GPGSA(nmeaGPGSA *pack); void nmea_zero_GPGSV(nmeaGPGSV *pack); void nmea_zero_GPRMC(nmeaGPRMC *pack); void nmea_zero_GPVTG(nmeaGPVTG *pack); #ifdef __cplusplus } #endif #endif /* __NMEA_SENTENCE_H__ */