/* * * 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. GPGST = 0x0012, //!< GST - GPS Pseudorange Noise Statistics HCHDG = 0x0020, //!< HDG - Heading, Deviation and Variation HCHDT = 0x0100, //!< HDT - Heading reference to true north }; /** * GGA packet information structure (Global Positioning System Fix Data) */ typedef struct _nmeaGPGGA { char talkerId[2]; //!< Talker ID 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; /** * GST packet information structure (GPS Pseudorange Noise Statistics) */ typedef struct _nmeaGPGST { char talkerId[2]; //!< Talker ID nmeaTIME utc; //!< UTC of position fix double rms_pr; //!< RMS value of the pseudorange residuals; Includes carrier phase residuals during periods of RTK (float) and RTK (fixed) processing double err_major; //!< Error ellipse semi-major axis 1 sigma error, in meters double err_minor; //!< Error ellipse semi-minor axis 1 sigma error, in meters double err_ori; //!< Error ellipse orientation, degrees from true north double sig_lat; //!< Latitude 1 sigma error, in meters double sig_lon; //!< Longitude 1 sigma error, in meters double sig_alt; //!< Height 1 sigma error, in meters } nmeaGPGST; /** * GSA packet information structure (Satellite status) */ typedef struct _nmeaGPGSA { char talkerId[2]; //!< Talker ID 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 { char talkerId[2]; //!< Talker ID 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]; char signal_id; //!< NMEA v4.1 - ID of the ranging signal } nmeaGPGSV; /** * RMC packet information structure (Recommended Minimum sentence C) */ typedef struct _nmeaGPRMC { char talkerId[2]; //!< Talker ID 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) char navstatus; //!< NMEA v4.1 - Navigation Status type (S = Safe, C = Caution, U = Unsafe, V = Navigational status not valid) } nmeaGPRMC; /** * VTG packet information structure (Track made good and ground speed) */ typedef struct _nmeaGPVTG { char talkerId[2]; //!< Talker ID 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; /** * HDT packet information structure (Heading from True North) */ typedef struct _nmeaGPHDT { char talkerId[2]; //!< Talker ID double heading; //!< Heading in degrees char t_flag; //!< Fixed text 'T' indicates that heading is relative to true north } nmeaGPHDT; /** * HCHDG packet information structure (magnetic heading) */ typedef struct _nmeaHCHDG { char talkerId[2]; //!< Talker ID double mag_heading; //!< Magnetic sensor heading (degrees) double mag_deviation; //!< Magnetic deviation (degrees) char ew_deviation; //!< [E]ast or [W]est double mag_variation; //!< Magnetic variation (degrees) char ew_variation; //!< [E]ast or [W]est } nmeaHCHDG; void nmea_zero_GPGGA( nmeaGPGGA *pack ); void nmea_zero_GPGST( nmeaGPGST *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 */