mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-22 00:06:12 -05:00
* Add signal_id; //!< NMEA v4.1 - ID of the ranging signal NMEA RMC - Set qualitydescription only for status: A or V in processRmcSentence NMEA GSV - Add Signal averaging processGsvSentence Update for Status not A, V - for UM982 Status = D - Differential when it becomes RTKfix
181 lines
6.7 KiB
C
181 lines
6.7 KiB
C
/*
|
|
*
|
|
* 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 */
|