ce74e800b13f663216841ea01860b11fa16b9a98
[olsrd.git] / lib / pud / nmealib / include / nmea / info.h
1 /*
2  * This file is part of nmealib.
3  *
4  * Copyright (c) 2008 Timur Sinitsyn
5  * Copyright (c) 2011 Ferry Huberts
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 /*! \file */
22
23 #ifndef __NMEA_INFO_H__
24 #define __NMEA_INFO_H__
25
26 #include <nmea/time.h>
27 #include <stdbool.h>
28
29 #define NMEA_SIG_BAD   (0)
30 #define NMEA_SIG_LOW   (1)
31 #define NMEA_SIG_MID   (2)
32 #define NMEA_SIG_HIGH  (3)
33
34 #define NMEA_FIX_BAD   (1)
35 #define NMEA_FIX_2D    (2)
36 #define NMEA_FIX_3D    (3)
37
38 #define NMEA_MAXSAT    (12)
39 #define NMEA_SATINPACK (4)
40 #define NMEA_NSATPACKS (NMEA_MAXSAT / NMEA_SATINPACK)
41
42 #define NMEA_DEF_LAT   (5001.2621)
43 #define NMEA_DEF_LON   (3613.0595)
44
45 #ifdef  __cplusplus
46 extern "C" {
47 #endif
48
49 /**
50  * Position data in fractional degrees or radians
51  */
52 typedef struct _nmeaPOS {
53         double lat; /**< Latitude */
54         double lon; /**< Longitude */
55
56 } nmeaPOS;
57
58 /**
59  * Information about satellite
60  * @see nmeaSATINFO
61  * @see nmeaGPGSV
62  */
63 typedef struct _nmeaSATELLITE {
64         int id;      /**< Satellite PRN number */
65         int in_use;  /**< Used in position fix */
66         int elv;     /**< Elevation in degrees, 90 maximum */
67         int azimuth; /**< Azimuth, degrees from true north, 000 to 359 */
68         int sig;     /**< Signal, 00-99 dB */
69
70 } nmeaSATELLITE;
71
72 /**
73  * Information about all satellites in view
74  * @see nmeaINFO
75  * @see nmeaGPGSV
76  */
77 typedef struct _nmeaSATINFO {
78         int inuse;  /**< Number of satellites in use (not those in view) */
79         int inview; /**< Total number of satellites in view */
80         nmeaSATELLITE sat[NMEA_MAXSAT]; /**< Satellites information */
81
82 } nmeaSATINFO;
83
84 /**
85  * Summary GPS information from all parsed packets,
86  * used also for generating NMEA stream
87  * @see nmea_parse
88  * @see nmea_GPGGA2info,  nmea_...2info
89  */
90 typedef struct _nmeaINFO {
91         int smask;    /**< Mask specifying from which sentences data has been obtained */
92
93         nmeaTIME utc; /**< UTC of position */
94
95         int sig; /**< GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive) */
96         int fix; /**< Operating mode, used for navigation (1 = Fix not available; 2 = 2D; 3 = 3D) */
97
98         double PDOP;        /**< Position Dilution Of Precision */
99         double HDOP;        /**< Horizontal Dilution Of Precision */
100         double VDOP;        /**< Vertical Dilution Of Precision */
101
102         double lat;         /**< Latitude in NDEG - +/-[degree][min].[sec/60] */
103         double lon;         /**< Longitude in NDEG - +/-[degree][min].[sec/60] */
104         double elv;         /**< Antenna altitude above/below mean sea level (geoid) in meters */
105         double speed;       /**< Speed over the ground in kilometers/hour */
106         double direction;   /**< Track angle in degrees True */
107         double declination; /**< Magnetic variation degrees (Easterly var. subtracts from true course) */
108
109         nmeaSATINFO satinfo; /**< Satellites information */
110 } nmeaINFO;
111
112 /**
113  * Enumeration for the fields names of a nmeaINFO structure
114  */
115 typedef enum _nmeaINFO_FIELD {
116         SMASK, UTC, SIG, FIX, PDOP, HDOP, VDOP, LAT, LON, ELV, SPEED, DIRECTION,
117         DECLINATION, SATINFO
118 } nmeaINFO_FIELD;
119
120 void nmea_zero_INFO(nmeaINFO *info);
121
122 bool nmea_INFO_has_field(int smask, nmeaINFO_FIELD fieldName);
123
124 void nmea_INFO_sanitise(nmeaINFO *nmeaInfo);
125
126 void nmea_INFO_unit_conversion(nmeaINFO * nmeaInfo);
127
128 #ifdef  __cplusplus
129 }
130 #endif
131
132 #endif /* __NMEA_INFO_H__ */