4G_module/custom/nmealib/inc/nmea/sentence.h

169 lines
6.0 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"
/**
* Thu Jun 3 09:26:01 CST 2021, add by SYAKYOU.
* The sentence is as follows
* GNGSA, GBGSV, GNVTG, GNRMC, GNGGA, GNGLL
*/
#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. */
GNGGA = 0x0020,
GNGSA = 0x0040,
GBGSV = 0x0080,
GNRMC = 0x0100,
GNVTG = 0x0200,
GNGLL = 0x0400,
GPGLL = 0x0800,
GPZDA = 0x1000,
GNZDA = 0x2000,
};
/**
* GGA packet information structure (Global Positioning System Fix Data)
*/
typedef struct _nmeaGGA
{
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 */
} nmeaGGA;
/**
* GSA packet information structure (Satellite status)
*/
typedef struct _nmeaGSA
{
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 */
} nmeaGSA;
/**
* GSV packet information structure (Satellites in view)
*/
typedef struct _nmeaGSV
{
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];
} nmeaGSV;
/**
* RMC packet information structure (Recommended Minimum sentence C)
*/
typedef struct _nmeaRMC
{
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) */
} nmeaRMC;
/**
* VTG packet information structure (Track made good and ground speed)
*/
typedef struct _nmeaVTG
{
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 */
} nmeaVTG;
void nmea_zero_GGA(nmeaGGA *pack);
void nmea_zero_GSA(nmeaGSA *pack);
void nmea_zero_GSV(nmeaGSV *pack);
void nmea_zero_RMC(nmeaRMC *pack);
void nmea_zero_VTG(nmeaVTG *pack);
/************************************************************************/
/* GLL packet information structure (Geographic position, latitude, longitude) */
/************************************************************************/
typedef struct _nmeaGLL
{
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 */
nmeaTIME utc; /**< UTC of position */
char status; /**< Status (A = active or V = void) */
char mode; /**< Mode indicator of fix type (A = autonomous, D = differential, E = estimated, N = not valid, S = simulator) */
} nmeaGLL;
void nmea_zero_GLL(nmeaGLL *pack);
typedef struct _nmeaZDA
{
nmeaTIME utc;
int local_time_hours;
int local_time_min;
} nmeaZDA;
void nmea_zero_ZDA(nmeaZDA *pack);
#ifdef __cplusplus
}
#endif
#endif /* __NMEA_SENTENCE_H__ */