GPSProvider wrapper library for STMicroelectronics' X-NUCLEO-GNSS1A1 Expansion Board.

Dependents:   TeseoLocation

X_NUCLEO_GNSS1A1 Library

GPS_Provider wrapper library for STMicroelectronics' X-NUCLEO-GNSS1A1 component.

Overview

This library includes drivers for ST’s Teseo-LIV3F Global Navigation Satellite System (GNSS) device and middleware for the NMEA protocol support. This firmware package implements the port of the GPS_Provider to STMicroelectronics' X-NUCLEO-GNSS1A1 GNSS Expansion Board.

The key features of the library are:

  • Complete software to build applications using Teseo-LIV3F GNSS device
  • Middleware for the NMEA protocol support

Furthermore the library provides the following advanced features:

  • Geofencing - allows the Teseo-LIV3F receiver to raise a NMEA message when the resolved GNSS position is close to or entering or exiting from a specific circle
  • Odometer - provides information on the traveled distance using only the resolved GNSS position
  • Data Logging - allows the Teseo-LIV3F receiver to save locally on the flash the resolved GNSS position to be retrieved on demand from the Host

Hardware description

The X-NUCLEO-GNSS1A1 is a Global Navigation Satellite System Expansion Board usable with the STM32 Nucleo system and other Arduino compatible platforms. It is designed around the STMicroelectronics Teseo-LIV3F GNSS receiver IC working on multiple constellations (GPS/Galileo/Glonass/BeiDou/QZSS).

The Teseo-LIV3F module is designed for top performance in a minimal space. Within its 10x10mm compact size, Teseo-LIV3F offers superior accuracy thanks to the on board 26MHz Temperature Compensated Crystal Oscillator (TCXO) and a reduced Time To First Fix (TTFF) relying to its dedicated 32KHz Real Time Clock (RTC) oscillator.

The X-NUCLEO-GNSS1A1, hosting the Teseo-LIV3F, is compatible with Arduino UNO R3 connector layout and interfaces with the MCU via the UART channel. To connect by serial port the GNSS receiver and the host the following parameters must be used:

  • 8 data bits
  • No parity
  • 1 stop bit
  • 9600 bauds

A GPS/GLONASS/Beidou antenna, distributed along with the X-NUCLEO-GNSS1A1 Expansion Board, must be connected to the antenna connector present on the Expansion Board. For the X-NUCLEO-GNSS1A1 proper operations, the following jumper settings must be used:

  • J2 open
  • J3 closed
  • J4 closed
  • J5 open
  • J6 closed
  • J7 closed
  • J8 open
  • J9 closed
  • J10 open
  • J11 closed
  • J12 closed
  • J13 closed
  • J14 closed
  • J15 closed

Tested platforms

This firmware has been tested on STM32 NUCLEO-F401RE

Example Application

To run GNSS example applications using X-NUCLEO-GNSS1A1 Expansion Board based on mbed OS, please refer to TeseoLocation page.

Committer:
apalmieri
Date:
Fri Nov 09 17:06:11 2018 +0000
Revision:
0:a77f1f1f8318
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
apalmieri 0:a77f1f1f8318 1 /**
apalmieri 0:a77f1f1f8318 2 *******************************************************************************
apalmieri 0:a77f1f1f8318 3 * @file NMEAParser.h
apalmieri 0:a77f1f1f8318 4 * @author AST / Central Lab
apalmieri 0:a77f1f1f8318 5 * @version V1.0.0
apalmieri 0:a77f1f1f8318 6 * @date 18-May-2017
apalmieri 0:a77f1f1f8318 7 * @brief NMEA sentence parser
apalmieri 0:a77f1f1f8318 8 *
apalmieri 0:a77f1f1f8318 9 *******************************************************************************
apalmieri 0:a77f1f1f8318 10 * @attention
apalmieri 0:a77f1f1f8318 11 *
apalmieri 0:a77f1f1f8318 12 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
apalmieri 0:a77f1f1f8318 13 *
apalmieri 0:a77f1f1f8318 14 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
apalmieri 0:a77f1f1f8318 15 * You may not use this file except in compliance with the License.
apalmieri 0:a77f1f1f8318 16 * You may obtain a copy of the License at:
apalmieri 0:a77f1f1f8318 17 *
apalmieri 0:a77f1f1f8318 18 * http://www.st.com/software_license_agreement_liberty_v2
apalmieri 0:a77f1f1f8318 19 *
apalmieri 0:a77f1f1f8318 20 * Redistribution and use in source and binary forms, with or without modification,
apalmieri 0:a77f1f1f8318 21 * are permitted provided that the following conditions are met:
apalmieri 0:a77f1f1f8318 22 * 1. Redistributions of source code must retain the above copyright notice,
apalmieri 0:a77f1f1f8318 23 * this list of conditions and the following disclaimer.
apalmieri 0:a77f1f1f8318 24 * 2. Redistributions in binary form must reproduce the above copyright notice,
apalmieri 0:a77f1f1f8318 25 * this list of conditions and the following disclaimer in the documentation
apalmieri 0:a77f1f1f8318 26 * and/or other materials provided with the distribution.
apalmieri 0:a77f1f1f8318 27 * 3. Neither the name of STMicroelectronics nor the names of its contributors
apalmieri 0:a77f1f1f8318 28 * may be used to endorse or promote products derived from this software
apalmieri 0:a77f1f1f8318 29 * without specific prior written permission.
apalmieri 0:a77f1f1f8318 30 *
apalmieri 0:a77f1f1f8318 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
apalmieri 0:a77f1f1f8318 32 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
apalmieri 0:a77f1f1f8318 33 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
apalmieri 0:a77f1f1f8318 34 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
apalmieri 0:a77f1f1f8318 35 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
apalmieri 0:a77f1f1f8318 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
apalmieri 0:a77f1f1f8318 37 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
apalmieri 0:a77f1f1f8318 38 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
apalmieri 0:a77f1f1f8318 39 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
apalmieri 0:a77f1f1f8318 40 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
apalmieri 0:a77f1f1f8318 41 *
apalmieri 0:a77f1f1f8318 42 ********************************************************************************
apalmieri 0:a77f1f1f8318 43 */
apalmieri 0:a77f1f1f8318 44
apalmieri 0:a77f1f1f8318 45 /* Define to prevent recursive inclusion -------------------------------------*/
apalmieri 0:a77f1f1f8318 46 #ifndef __NMEA_PARSER_H
apalmieri 0:a77f1f1f8318 47 #define __NMEA_PARSER_H
apalmieri 0:a77f1f1f8318 48
apalmieri 0:a77f1f1f8318 49 #ifdef __cplusplus
apalmieri 0:a77f1f1f8318 50 extern "C" {
apalmieri 0:a77f1f1f8318 51 #endif
apalmieri 0:a77f1f1f8318 52
apalmieri 0:a77f1f1f8318 53 #include <stdio.h>
apalmieri 0:a77f1f1f8318 54 #include <stdint.h>
apalmieri 0:a77f1f1f8318 55
apalmieri 0:a77f1f1f8318 56 /** @defgroup Middlewares
apalmieri 0:a77f1f1f8318 57 * @brief Contains all platform independent modules (eg. NMEA Sentence Parser, ...).
apalmieri 0:a77f1f1f8318 58 * @{
apalmieri 0:a77f1f1f8318 59 */
apalmieri 0:a77f1f1f8318 60
apalmieri 0:a77f1f1f8318 61 /** @defgroup ST
apalmieri 0:a77f1f1f8318 62 * @{
apalmieri 0:a77f1f1f8318 63 */
apalmieri 0:a77f1f1f8318 64
apalmieri 0:a77f1f1f8318 65 /** @defgroup LIB_NMEA
apalmieri 0:a77f1f1f8318 66 * @{
apalmieri 0:a77f1f1f8318 67 */
apalmieri 0:a77f1f1f8318 68
apalmieri 0:a77f1f1f8318 69 /** @defgroup NMEA_PARSER
apalmieri 0:a77f1f1f8318 70 * @{
apalmieri 0:a77f1f1f8318 71 */
apalmieri 0:a77f1f1f8318 72
apalmieri 0:a77f1f1f8318 73 /** @addtogroup NMEA_PARSER_CONSTANTS_DEFINITIONS
apalmieri 0:a77f1f1f8318 74 * @{
apalmieri 0:a77f1f1f8318 75 */
apalmieri 0:a77f1f1f8318 76 /**
apalmieri 0:a77f1f1f8318 77 * @brief Constant that indicates the maximum lenght of an NMEA sentence
apalmieri 0:a77f1f1f8318 78 */
apalmieri 0:a77f1f1f8318 79 #define MAX_NMEA_SENTENCE_LEN 80
apalmieri 0:a77f1f1f8318 80
apalmieri 0:a77f1f1f8318 81 /**
apalmieri 0:a77f1f1f8318 82 * @brief Constant that indicates the maximum number of satellites.
apalmieri 0:a77f1f1f8318 83 */
apalmieri 0:a77f1f1f8318 84 #define MAX_SAT_NUM 12
apalmieri 0:a77f1f1f8318 85
apalmieri 0:a77f1f1f8318 86 /**
apalmieri 0:a77f1f1f8318 87 * @brief Constant that indicates the maximum lenght of a string.
apalmieri 0:a77f1f1f8318 88 */
apalmieri 0:a77f1f1f8318 89 #define MAX_STR_LEN 32
apalmieri 0:a77f1f1f8318 90
apalmieri 0:a77f1f1f8318 91 /**
apalmieri 0:a77f1f1f8318 92 * @brief Constant that indicates the maximum lenght of NMEA message field.
apalmieri 0:a77f1f1f8318 93 */
apalmieri 0:a77f1f1f8318 94 #define MAX_MSG_LEN 32//19
apalmieri 0:a77f1f1f8318 95 /**
apalmieri 0:a77f1f1f8318 96 * @}
apalmieri 0:a77f1f1f8318 97 */
apalmieri 0:a77f1f1f8318 98
apalmieri 0:a77f1f1f8318 99 #define MAX_GEOFENCES_NUM 8
apalmieri 0:a77f1f1f8318 100
apalmieri 0:a77f1f1f8318 101 /** @addtogroup NMEA_PARSER_TYPES_DEFINITIONS
apalmieri 0:a77f1f1f8318 102 * @{
apalmieri 0:a77f1f1f8318 103 */
apalmieri 0:a77f1f1f8318 104 /**
apalmieri 0:a77f1f1f8318 105 * @brief Enumeration structure that containes the types of feature messages
apalmieri 0:a77f1f1f8318 106 */
apalmieri 0:a77f1f1f8318 107 typedef enum {
apalmieri 0:a77f1f1f8318 108 GNSS_FEATURE_EN_MSG = 0,
apalmieri 0:a77f1f1f8318 109 GNSS_GEOFENCE_CFG_MSG,
apalmieri 0:a77f1f1f8318 110 GNSS_GEOFENCE_STATUS_MSG,
apalmieri 0:a77f1f1f8318 111 GNSS_GEOFENCE_ALARM_MSG,
apalmieri 0:a77f1f1f8318 112 GNSS_ODO_START_MSG,
apalmieri 0:a77f1f1f8318 113 GNSS_ODO_STOP_MSG,
apalmieri 0:a77f1f1f8318 114 GNSS_DATALOG_CFG_MSG,
apalmieri 0:a77f1f1f8318 115 GNSS_DATALOG_START_MSG,
apalmieri 0:a77f1f1f8318 116 GNSS_DATALOG_STOP_MSG,
apalmieri 0:a77f1f1f8318 117 GNSS_DATALOG_ERASE_MSG
apalmieri 0:a77f1f1f8318 118 } ParseFeatureMsg_Typedef;
apalmieri 0:a77f1f1f8318 119
apalmieri 0:a77f1f1f8318 120 /**
apalmieri 0:a77f1f1f8318 121 * @brief Enumeration structure that containes the two success states of a parsing process
apalmieri 0:a77f1f1f8318 122 */
apalmieri 0:a77f1f1f8318 123 typedef enum {
apalmieri 0:a77f1f1f8318 124 PARSE_SUCC = 0, /**< Success status */
apalmieri 0:a77f1f1f8318 125 PARSE_FAIL = 1 /**< Fail status */
apalmieri 0:a77f1f1f8318 126 } ParseStatus_Typedef;
apalmieri 0:a77f1f1f8318 127
apalmieri 0:a77f1f1f8318 128 /**
apalmieri 0:a77f1f1f8318 129 * @brief Enumeration structure that containes the tipologies of Gps fixing process got from a NMEA string
apalmieri 0:a77f1f1f8318 130 */
apalmieri 0:a77f1f1f8318 131 typedef enum {
apalmieri 0:a77f1f1f8318 132 INVALID = 0, /**< Invalid Fix status */
apalmieri 0:a77f1f1f8318 133 VALID = 1, /**< Valid Fix status */
apalmieri 0:a77f1f1f8318 134 DGPS_FIX = 2, /**< DGPS Fix status */
apalmieri 0:a77f1f1f8318 135 PPS_FIX = 3, /**< PPS Fix status */
apalmieri 0:a77f1f1f8318 136 REAL_TIME = 4, /**< Real Time Fix status */
apalmieri 0:a77f1f1f8318 137 FLOAT_REAL_TIME = 5, /**< Float Real Time Fix status */
apalmieri 0:a77f1f1f8318 138 ESTIMATED = 6, /**< Estimated Fix status */
apalmieri 0:a77f1f1f8318 139 MANUAL_MODE = 7, /**< Manual Mode Fix status */
apalmieri 0:a77f1f1f8318 140 SIMULATION_MODE = 8 /**< Simulation Mode Fix status */
apalmieri 0:a77f1f1f8318 141 } GPS_ValidTypedef;
apalmieri 0:a77f1f1f8318 142
apalmieri 0:a77f1f1f8318 143 /**
apalmieri 0:a77f1f1f8318 144 * @brief Data structure that contains the coordinates informations
apalmieri 0:a77f1f1f8318 145 */
apalmieri 0:a77f1f1f8318 146 typedef struct Coords {
apalmieri 0:a77f1f1f8318 147 double lat; /**< Latitude */
apalmieri 0:a77f1f1f8318 148 double lon; /**< Longitude */
apalmieri 0:a77f1f1f8318 149 float alt; /**< Altitude */
apalmieri 0:a77f1f1f8318 150 uint8_t ns; /**< Nord / Sud latitude type */
apalmieri 0:a77f1f1f8318 151 uint8_t ew; /**< East / West longitude type */
apalmieri 0:a77f1f1f8318 152 uint8_t mis; /**< Altitude unit misure */
apalmieri 0:a77f1f1f8318 153 } Coords;
apalmieri 0:a77f1f1f8318 154
apalmieri 0:a77f1f1f8318 155 /**
apalmieri 0:a77f1f1f8318 156 * @brief Data structure that contains the Gps geoids informations
apalmieri 0:a77f1f1f8318 157 */
apalmieri 0:a77f1f1f8318 158 typedef struct Geoid_Info {
apalmieri 0:a77f1f1f8318 159 int height; /**< Geoid height */
apalmieri 0:a77f1f1f8318 160 uint8_t mis; /**< Geoid height misure unit */
apalmieri 0:a77f1f1f8318 161 } Geoid_Info;
apalmieri 0:a77f1f1f8318 162
apalmieri 0:a77f1f1f8318 163 /**
apalmieri 0:a77f1f1f8318 164 * @brief Data structure that contains the UTC informations
apalmieri 0:a77f1f1f8318 165 */
apalmieri 0:a77f1f1f8318 166 typedef struct UTC_Info {
apalmieri 0:a77f1f1f8318 167 int utc; /**< UTC Info */
apalmieri 0:a77f1f1f8318 168 int hh; /**< Hours */
apalmieri 0:a77f1f1f8318 169 int mm; /**< Minutes */
apalmieri 0:a77f1f1f8318 170 int ss; /**< Seconds */
apalmieri 0:a77f1f1f8318 171 } UTC_Info;
apalmieri 0:a77f1f1f8318 172
apalmieri 0:a77f1f1f8318 173 /**
apalmieri 0:a77f1f1f8318 174 * @brief Data structure that contains the UTC informations
apalmieri 0:a77f1f1f8318 175 */
apalmieri 0:a77f1f1f8318 176 typedef struct GSV_SAT_Info {
apalmieri 0:a77f1f1f8318 177 int prn; /**< PRN */
apalmieri 0:a77f1f1f8318 178 int elev; /**< Elevation of satellite in degree, 0 ... 90 */
apalmieri 0:a77f1f1f8318 179 int azim; /**< Azimuth of satellite in degree, ref. "North, " 0 ... 359 */
apalmieri 0:a77f1f1f8318 180 int cn0; /**< Carrier to noise ratio for satellite in dB, 0 ... 99 */
apalmieri 0:a77f1f1f8318 181 } GSV_SAT_Info;
apalmieri 0:a77f1f1f8318 182
apalmieri 0:a77f1f1f8318 183 /**
apalmieri 0:a77f1f1f8318 184 * @brief Data structure that contains all of the informations about the GPS position
apalmieri 0:a77f1f1f8318 185 */
apalmieri 0:a77f1f1f8318 186 typedef struct GPGGA_Infos {
apalmieri 0:a77f1f1f8318 187 UTC_Info utc; /**< UTC Time */
apalmieri 0:a77f1f1f8318 188 Coords xyz; /**< Coords data member */
apalmieri 0:a77f1f1f8318 189 float acc; /**< GPS Accuracy */
apalmieri 0:a77f1f1f8318 190 int sats; /**< Number of satellities acquired */
apalmieri 0:a77f1f1f8318 191 GPS_ValidTypedef valid; /**< GPS Signal fix quality */
apalmieri 0:a77f1f1f8318 192 Geoid_Info geoid; /**< Geoids data info member */
apalmieri 0:a77f1f1f8318 193 int update; /**< Update time from the last acquired GPS Info */
apalmieri 0:a77f1f1f8318 194 int checksum; /**< Checksum of the message bytes */
apalmieri 0:a77f1f1f8318 195 } GPGGA_Infos;
apalmieri 0:a77f1f1f8318 196
apalmieri 0:a77f1f1f8318 197 /**
apalmieri 0:a77f1f1f8318 198 * @brief Data structure that contains all of the informations about the fix data for single or
apalmieri 0:a77f1f1f8318 199 * combined satellite navigation system.
apalmieri 0:a77f1f1f8318 200 */
apalmieri 0:a77f1f1f8318 201 typedef struct GNS_Infos {
apalmieri 0:a77f1f1f8318 202 char constellation[MAX_STR_LEN]; /**< Constellation enabled: GPGNS (GPS), GLGNS (GLONASS), GAGNS (GALILEO), BDGNS (BEIDOU), QZGNS (QZSS), GNGNS (more than one) */
apalmieri 0:a77f1f1f8318 203 UTC_Info utc; /**< UTC Time */
apalmieri 0:a77f1f1f8318 204 Coords xyz; /**< Coords data member */
apalmieri 0:a77f1f1f8318 205 char gps_mode; /**< N = NO Fix, A = Autonomous, D = Differential GPS, E = Estimated (dead reckoning mode) */
apalmieri 0:a77f1f1f8318 206 char glonass_mode; /**< N = NO Fix, A = Autonomous, D = Differential Glonass, E = Estimated (dead reckoning mode) */
apalmieri 0:a77f1f1f8318 207 int sats; /**< Number of satellities acquired */
apalmieri 0:a77f1f1f8318 208 float hdop; /**< Horizontal Dilution of Precision, max: 99.0 */
apalmieri 0:a77f1f1f8318 209 float geo_sep; /**< Geoidal separation, meter */
apalmieri 0:a77f1f1f8318 210 char dgnss_age; /**< Not supported */
apalmieri 0:a77f1f1f8318 211 char dgnss_ref; /**< Not supported */
apalmieri 0:a77f1f1f8318 212 int checksum; /**< Checksum of the message bytes */
apalmieri 0:a77f1f1f8318 213 } GNS_Infos;
apalmieri 0:a77f1f1f8318 214
apalmieri 0:a77f1f1f8318 215 /**
apalmieri 0:a77f1f1f8318 216 * @brief Data structure that contains all of the GPS Pseudorange Noise Statistics.
apalmieri 0:a77f1f1f8318 217 */
apalmieri 0:a77f1f1f8318 218 typedef struct GPGST_Infos {
apalmieri 0:a77f1f1f8318 219 UTC_Info utc; /**< UTC Time */
apalmieri 0:a77f1f1f8318 220 float EHPE; /**< Equivalent Horizontal Position Error */
apalmieri 0:a77f1f1f8318 221 float semi_major_dev; /**< Standard deviation (meters) of semi-major axis of error ellipse */
apalmieri 0:a77f1f1f8318 222 float semi_minor_dev; /**< Standard deviation (meters) of semi-minor axis of error ellipse */
apalmieri 0:a77f1f1f8318 223 float semi_major_angle; /**< Orientation of semi-major axis of error ellipse (true north degrees) */
apalmieri 0:a77f1f1f8318 224 float lat_err_dev; /**< Standard deviation (meters) of latitude error */
apalmieri 0:a77f1f1f8318 225 float lon_err_dev; /**< Standard deviation (meters) of longitude error */
apalmieri 0:a77f1f1f8318 226 float alt_err_dev; /**< Standard deviation (meters) of altitude error */
apalmieri 0:a77f1f1f8318 227 int checksum; /**< Checksum of the message bytes */
apalmieri 0:a77f1f1f8318 228 } GPGST_Infos;
apalmieri 0:a77f1f1f8318 229
apalmieri 0:a77f1f1f8318 230 /**
apalmieri 0:a77f1f1f8318 231 * @brief Data structure that contains all the Recommended Minimum Specific GPS/Transit data.
apalmieri 0:a77f1f1f8318 232 */
apalmieri 0:a77f1f1f8318 233 typedef struct GPRMC_Infos {
apalmieri 0:a77f1f1f8318 234 UTC_Info utc; /**< UTC Time */
apalmieri 0:a77f1f1f8318 235 char status; /**< “A” = valid, “V” = Warning */
apalmieri 0:a77f1f1f8318 236 Coords xyz; /**< Coords data member */
apalmieri 0:a77f1f1f8318 237 float speed; /**< Speed over ground in knots */
apalmieri 0:a77f1f1f8318 238 float trackgood; /**< Course made good */
apalmieri 0:a77f1f1f8318 239 int date; /**< Date of Fix */
apalmieri 0:a77f1f1f8318 240 float mag_var; /**< Magnetic Variation */
apalmieri 0:a77f1f1f8318 241 char mag_var_dir; /**< Magnetic Variation Direction */
apalmieri 0:a77f1f1f8318 242 int checksum; /**< Checksum of the message bytes */
apalmieri 0:a77f1f1f8318 243 } GPRMC_Infos;
apalmieri 0:a77f1f1f8318 244
apalmieri 0:a77f1f1f8318 245 /**
apalmieri 0:a77f1f1f8318 246 * @brief Data structure that contains all of the informations about the GSA satellites
apalmieri 0:a77f1f1f8318 247 */
apalmieri 0:a77f1f1f8318 248 typedef struct GSA_Infos {
apalmieri 0:a77f1f1f8318 249 char constellation[MAX_STR_LEN]; /**< Constellation enabled: GPGSA (GPS), GLGSA (GLONASS), GAGSA (GALILEO), BDGSA (BEIDOU), GNGSA (more than one) */
apalmieri 0:a77f1f1f8318 250 char operating_mode; /**< Operating Mode: 'M' = Manual, 'A' = Auto (2D/3D) */
apalmieri 0:a77f1f1f8318 251 int current_mode; /**< Current Mode: 1. no fix available, 2. 2D, 3. 3D */
apalmieri 0:a77f1f1f8318 252 int sat_prn[MAX_SAT_NUM]; /**< Satellites list used in position fix (max N 12) */
apalmieri 0:a77f1f1f8318 253 float pdop; /**< Position Dilution of Precision, max: 99.0 */
apalmieri 0:a77f1f1f8318 254 float hdop; /**< Horizontal Dilution of Precision, max: 99.0 */
apalmieri 0:a77f1f1f8318 255 float vdop; /**< Vertical Dilution of Precision, max: 99.0 */
apalmieri 0:a77f1f1f8318 256 int checksum; /**< Checksum of the message bytes */
apalmieri 0:a77f1f1f8318 257 } GSA_Infos;
apalmieri 0:a77f1f1f8318 258
apalmieri 0:a77f1f1f8318 259 /**
apalmieri 0:a77f1f1f8318 260 * @brief Data structure that contains all of the informations about the GSV satellites
apalmieri 0:a77f1f1f8318 261 */
apalmieri 0:a77f1f1f8318 262 typedef struct GSV_Infos {
apalmieri 0:a77f1f1f8318 263 char constellation[MAX_STR_LEN]; /**< Constellation enabled: GPGSV (GPS), GLGSV (GLONASS), GAGSV (GALILEO), BDGSV (BEIDOU), QZGSV (QZSS), GNGSV (more than one) */
apalmieri 0:a77f1f1f8318 264 int amount; /**< Total amount of GSV messages, max. 3 */
apalmieri 0:a77f1f1f8318 265 int number; /**< Continued GSV number of this message */
apalmieri 0:a77f1f1f8318 266 int tot_sats; /**< Total Number of Satellites in view, max. 12 */
apalmieri 0:a77f1f1f8318 267 GSV_SAT_Info gsv_sat_i[MAX_SAT_NUM]; /**< Satellite info */
apalmieri 0:a77f1f1f8318 268 int checksum; /**< Checksum of the message bytes */
apalmieri 0:a77f1f1f8318 269 } GSV_Infos;
apalmieri 0:a77f1f1f8318 270
apalmieri 0:a77f1f1f8318 271 /**
apalmieri 0:a77f1f1f8318 272 * @brief Data structure that contains timestamp
apalmieri 0:a77f1f1f8318 273 */
apalmieri 0:a77f1f1f8318 274 typedef struct Timestamp_Info {
apalmieri 0:a77f1f1f8318 275 int hh; /**< Hours */
apalmieri 0:a77f1f1f8318 276 int mm; /**< Minutes */
apalmieri 0:a77f1f1f8318 277 int ss; /**< Seconds */
apalmieri 0:a77f1f1f8318 278 int year; /**< Year */
apalmieri 0:a77f1f1f8318 279 int month; /**< Month */
apalmieri 0:a77f1f1f8318 280 int day; /**< Day */
apalmieri 0:a77f1f1f8318 281 } Timestamp_Info;
apalmieri 0:a77f1f1f8318 282
apalmieri 0:a77f1f1f8318 283 /**
apalmieri 0:a77f1f1f8318 284 * @brief Data structure that contains all of the information about Geofence
apalmieri 0:a77f1f1f8318 285 */
apalmieri 0:a77f1f1f8318 286 typedef struct Geofence_Infos {
apalmieri 0:a77f1f1f8318 287 uint8_t op; /**< Geofence type message (configuration/status) */
apalmieri 0:a77f1f1f8318 288 uint8_t result; /**< Geofence cfg/request result (OK/ERROR) */
apalmieri 0:a77f1f1f8318 289 int idAlarm; /**< Id of the circle raising the alarm */
apalmieri 0:a77f1f1f8318 290 Timestamp_Info timestamp;
apalmieri 0:a77f1f1f8318 291 int status[MAX_GEOFENCES_NUM];
apalmieri 0:a77f1f1f8318 292 } Geofence_Infos;
apalmieri 0:a77f1f1f8318 293
apalmieri 0:a77f1f1f8318 294 /**
apalmieri 0:a77f1f1f8318 295 * @brief Data structure that contains all of the information about Ododmeter
apalmieri 0:a77f1f1f8318 296 */
apalmieri 0:a77f1f1f8318 297 typedef struct Odometer_Infos {
apalmieri 0:a77f1f1f8318 298 uint8_t op; /**< Odometer type message (configuration/status) */
apalmieri 0:a77f1f1f8318 299 uint8_t result; /**< Odometer cfg/request result (OK/ERROR) */
apalmieri 0:a77f1f1f8318 300 } Odometer_Infos;
apalmieri 0:a77f1f1f8318 301
apalmieri 0:a77f1f1f8318 302 /**
apalmieri 0:a77f1f1f8318 303 * @brief Data structure that contains all of the information about Datalog
apalmieri 0:a77f1f1f8318 304 */
apalmieri 0:a77f1f1f8318 305 typedef struct Datalog_Infos {
apalmieri 0:a77f1f1f8318 306 uint8_t op; /**< Datalog type message (configuration/status) */
apalmieri 0:a77f1f1f8318 307 uint8_t result; /**< Datalog cfg/request result (OK/ERROR) */
apalmieri 0:a77f1f1f8318 308 } Datalog_Infos;
apalmieri 0:a77f1f1f8318 309
apalmieri 0:a77f1f1f8318 310 /**
apalmieri 0:a77f1f1f8318 311 * @brief Ack from Teseo
apalmieri 0:a77f1f1f8318 312 */
apalmieri 0:a77f1f1f8318 313 typedef uint8_t Ack_Info;
apalmieri 0:a77f1f1f8318 314
apalmieri 0:a77f1f1f8318 315 /**
apalmieri 0:a77f1f1f8318 316 * @}
apalmieri 0:a77f1f1f8318 317 */
apalmieri 0:a77f1f1f8318 318
apalmieri 0:a77f1f1f8318 319 /** @addtogroup NMEA_PARSER_PUBLIC_FUNCTIONS
apalmieri 0:a77f1f1f8318 320 * @{
apalmieri 0:a77f1f1f8318 321 */
apalmieri 0:a77f1f1f8318 322 ParseStatus_Typedef parse_gpgga (GPGGA_Infos *gpgga_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 323 ParseStatus_Typedef parse_gnsmsg (GNS_Infos *gns_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 324 ParseStatus_Typedef parse_gpgst (GPGST_Infos *gpgst_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 325 ParseStatus_Typedef parse_gprmc (GPRMC_Infos *gprmc_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 326 ParseStatus_Typedef parse_gsamsg (GSA_Infos *gsa_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 327 ParseStatus_Typedef parse_gsvmsg (GSV_Infos *gsv_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 328 void copy_data (GPGGA_Infos *, GPGGA_Infos);
apalmieri 0:a77f1f1f8318 329
apalmieri 0:a77f1f1f8318 330 ParseStatus_Typedef parse_pstmgeofence(Geofence_Infos *geofence_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 331 ParseStatus_Typedef parse_pstmodo(Odometer_Infos *odo_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 332 ParseStatus_Typedef parse_pstmdatalog(Datalog_Infos *datalog_data, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 333 ParseStatus_Typedef parse_pstmsgl(Ack_Info *ack, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 334 ParseStatus_Typedef parse_pstmsavepar(Ack_Info *ack, uint8_t *NMEA);
apalmieri 0:a77f1f1f8318 335 /**
apalmieri 0:a77f1f1f8318 336 * @}
apalmieri 0:a77f1f1f8318 337 */
apalmieri 0:a77f1f1f8318 338
apalmieri 0:a77f1f1f8318 339 /**
apalmieri 0:a77f1f1f8318 340 * @}
apalmieri 0:a77f1f1f8318 341 */
apalmieri 0:a77f1f1f8318 342
apalmieri 0:a77f1f1f8318 343 /**
apalmieri 0:a77f1f1f8318 344 * @}
apalmieri 0:a77f1f1f8318 345 */
apalmieri 0:a77f1f1f8318 346
apalmieri 0:a77f1f1f8318 347 /**
apalmieri 0:a77f1f1f8318 348 * @}
apalmieri 0:a77f1f1f8318 349 */
apalmieri 0:a77f1f1f8318 350
apalmieri 0:a77f1f1f8318 351 /**
apalmieri 0:a77f1f1f8318 352 * @}
apalmieri 0:a77f1f1f8318 353 */
apalmieri 0:a77f1f1f8318 354
apalmieri 0:a77f1f1f8318 355 #ifdef __cplusplus
apalmieri 0:a77f1f1f8318 356 }
apalmieri 0:a77f1f1f8318 357 #endif
apalmieri 0:a77f1f1f8318 358
apalmieri 0:a77f1f1f8318 359 #endif