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:
Thu Jan 14 09:29:14 2021 +0000
Revision:
5:1fe1ba1f0013
Parent:
0:a77f1f1f8318
Get GNSS library aligned with mbed-os-6.6.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
apalmieri 0:a77f1f1f8318 1 /**
apalmieri 0:a77f1f1f8318 2 ******************************************************************************
apalmieri 0:a77f1f1f8318 3 * @file createTeseoGNSS.cpp
apalmieri 0:a77f1f1f8318 4 * @author AST/CL
apalmieri 0:a77f1f1f8318 5 * @version V1.1.0
apalmieri 0:a77f1f1f8318 6 * @date May, 2017
apalmieri 0:a77f1f1f8318 7 * @brief .
apalmieri 0:a77f1f1f8318 8 ******************************************************************************
apalmieri 0:a77f1f1f8318 9 * @attention
apalmieri 0:a77f1f1f8318 10 *
apalmieri 0:a77f1f1f8318 11 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
apalmieri 0:a77f1f1f8318 12 *
apalmieri 0:a77f1f1f8318 13 * Redistribution and use in source and binary forms, with or without modification,
apalmieri 0:a77f1f1f8318 14 * are permitted provided that the following conditions are met:
apalmieri 0:a77f1f1f8318 15 * 1. Redistributions of source code must retain the above copyright notice,
apalmieri 0:a77f1f1f8318 16 * this list of conditions and the following disclaimer.
apalmieri 0:a77f1f1f8318 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
apalmieri 0:a77f1f1f8318 18 * this list of conditions and the following disclaimer in the documentation
apalmieri 0:a77f1f1f8318 19 * and/or other materials provided with the distribution.
apalmieri 0:a77f1f1f8318 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
apalmieri 0:a77f1f1f8318 21 * may be used to endorse or promote products derived from this software
apalmieri 0:a77f1f1f8318 22 * without specific prior written permission.
apalmieri 0:a77f1f1f8318 23 *
apalmieri 0:a77f1f1f8318 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
apalmieri 0:a77f1f1f8318 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
apalmieri 0:a77f1f1f8318 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
apalmieri 0:a77f1f1f8318 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
apalmieri 0:a77f1f1f8318 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
apalmieri 0:a77f1f1f8318 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
apalmieri 0:a77f1f1f8318 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
apalmieri 0:a77f1f1f8318 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
apalmieri 0:a77f1f1f8318 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
apalmieri 0:a77f1f1f8318 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
apalmieri 0:a77f1f1f8318 34 *
apalmieri 0:a77f1f1f8318 35 ******************************************************************************
apalmieri 0:a77f1f1f8318 36 */
apalmieri 0:a77f1f1f8318 37
apalmieri 0:a77f1f1f8318 38 #include "mbed.h"
apalmieri 0:a77f1f1f8318 39 #include "Teseo.h"
apalmieri 0:a77f1f1f8318 40 #include "GPSProviderImplBase.h"
apalmieri 0:a77f1f1f8318 41
apalmieri 0:a77f1f1f8318 42 #include "TeseoConfig.h"
apalmieri 0:a77f1f1f8318 43
apalmieri 0:a77f1f1f8318 44 static void _AppOutputCallback(uint32_t msgId, uint32_t msgType, tTeseoData *pData);
apalmieri 0:a77f1f1f8318 45 static void _AppEventCallback(eTeseoLocEventType event, uint32_t data);
apalmieri 0:a77f1f1f8318 46 static char msg[256];
apalmieri 0:a77f1f1f8318 47
apalmieri 5:1fe1ba1f0013 48 static const char *geofenceCirclePosition[] = {
apalmieri 0:a77f1f1f8318 49 "Unknown",
apalmieri 0:a77f1f1f8318 50 "Outside",
apalmieri 0:a77f1f1f8318 51 "Boundary",
apalmieri 0:a77f1f1f8318 52 "Inside"
apalmieri 0:a77f1f1f8318 53 };
apalmieri 0:a77f1f1f8318 54
apalmieri 5:1fe1ba1f0013 55 #define TESEO_GNSS_LOG(...) printf(__VA_ARGS__)
apalmieri 0:a77f1f1f8318 56
apalmieri 0:a77f1f1f8318 57 GPSProviderImplBase *
apalmieri 0:a77f1f1f8318 58 createGPSProviderInstance(void)
apalmieri 0:a77f1f1f8318 59 {
apalmieri 0:a77f1f1f8318 60 static Teseo gnss(TESEO_PIN_RESET,
apalmieri 0:a77f1f1f8318 61 TESEO_PIN_WAKEUP,
apalmieri 0:a77f1f1f8318 62 TESEO_PIN_PPS,
apalmieri 0:a77f1f1f8318 63 TESEO_PIN_TX,
apalmieri 5:1fe1ba1f0013 64 TESEO_PIN_RX);
apalmieri 0:a77f1f1f8318 65
apalmieri 0:a77f1f1f8318 66 /* Register output callback and event callback functions */
apalmieri 0:a77f1f1f8318 67 gnss.TeseoLocRegOutput(_AppOutputCallback, _AppEventCallback);
apalmieri 0:a77f1f1f8318 68
apalmieri 0:a77f1f1f8318 69 return &gnss;
apalmieri 0:a77f1f1f8318 70 }
apalmieri 0:a77f1f1f8318 71
apalmieri 0:a77f1f1f8318 72 /**
apalmieri 0:a77f1f1f8318 73 * @brief This function prints on the console the info about Fix data for single or combined satellite navigation system
apalmieri 0:a77f1f1f8318 74 * @param pData
apalmieri 0:a77f1f1f8318 75 * @retval None
apalmieri 0:a77f1f1f8318 76 */
apalmieri 0:a77f1f1f8318 77 static void
apalmieri 0:a77f1f1f8318 78 GetGNSMsgInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 79 {
apalmieri 0:a77f1f1f8318 80 // char msg[256];
apalmieri 0:a77f1f1f8318 81
apalmieri 5:1fe1ba1f0013 82 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 83
apalmieri 0:a77f1f1f8318 84 sprintf(msg, "Constellation:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 85 pData->gns_data.constellation);
apalmieri 5:1fe1ba1f0013 86 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 87
apalmieri 0:a77f1f1f8318 88 if (strcmp(pData->gns_data.constellation, "$GPGSV") == 0) {
apalmieri 5:1fe1ba1f0013 89 TESEO_GNSS_LOG("-- only GPS constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 90 }
apalmieri 0:a77f1f1f8318 91 else if (strcmp(pData->gns_data.constellation, "$GLGSV") == 0) {
apalmieri 5:1fe1ba1f0013 92 TESEO_GNSS_LOG("-- only GLONASS constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 93 }
apalmieri 0:a77f1f1f8318 94 else if (strcmp(pData->gns_data.constellation, "$GAGSV") == 0) {
apalmieri 5:1fe1ba1f0013 95 TESEO_GNSS_LOG("-- only GALILEO constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 96 }
apalmieri 0:a77f1f1f8318 97 else if (strcmp(pData->gns_data.constellation, "$BDGSV") == 0) {
apalmieri 5:1fe1ba1f0013 98 TESEO_GNSS_LOG("-- only BEIDOU constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 99 }
apalmieri 0:a77f1f1f8318 100 else if (strcmp(pData->gns_data.constellation, "$QZGSV") == 0) {
apalmieri 5:1fe1ba1f0013 101 TESEO_GNSS_LOG("-- only QZSS constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 102 }
apalmieri 0:a77f1f1f8318 103 else if (strcmp(pData->gns_data.constellation, "$GNGSV") == 0) {
apalmieri 5:1fe1ba1f0013 104 TESEO_GNSS_LOG("-- message to report all satellites for all enabled constellations\n\r");
apalmieri 0:a77f1f1f8318 105 }
apalmieri 0:a77f1f1f8318 106
apalmieri 0:a77f1f1f8318 107 sprintf(msg, "UTC:\t\t\t[ %02d:%02d:%02d ]\n\r",
apalmieri 0:a77f1f1f8318 108 pData->gns_data.utc.hh,
apalmieri 0:a77f1f1f8318 109 pData->gns_data.utc.mm,
apalmieri 0:a77f1f1f8318 110 pData->gns_data.utc.ss);
apalmieri 5:1fe1ba1f0013 111 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 112
apalmieri 0:a77f1f1f8318 113 sprintf(msg,"Latitude:\t\t[ %.0f' %d'' %c ]\n\r",
apalmieri 0:a77f1f1f8318 114 (pData->gns_data.xyz.lat - ((int)pData->gns_data.xyz.lat % 100)) / 100,
apalmieri 0:a77f1f1f8318 115 ((int)pData->gns_data.xyz.lat % 100),
apalmieri 0:a77f1f1f8318 116 pData->gns_data.xyz.ns);
apalmieri 5:1fe1ba1f0013 117 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 118
apalmieri 0:a77f1f1f8318 119 sprintf(msg,"Longitude:\t\t[ %.0f' %d'' %c ]\n\r",
apalmieri 0:a77f1f1f8318 120 (pData->gns_data.xyz.lon - ((int)pData->gns_data.xyz.lon % 100)) / 100,
apalmieri 0:a77f1f1f8318 121 ((int)pData->gns_data.xyz.lon % 100),
apalmieri 0:a77f1f1f8318 122 pData->gns_data.xyz.ew);
apalmieri 5:1fe1ba1f0013 123 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 124
apalmieri 0:a77f1f1f8318 125 sprintf(msg,"Satellites locked:\t[ %d ]\n\r",
apalmieri 0:a77f1f1f8318 126 pData->gns_data.sats);
apalmieri 5:1fe1ba1f0013 127 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 128
apalmieri 0:a77f1f1f8318 129 sprintf(msg,"HDOP:\t\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 130 pData->gns_data.hdop);
apalmieri 5:1fe1ba1f0013 131 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 132
apalmieri 0:a77f1f1f8318 133 sprintf(msg,"Altitude:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 134 pData->gns_data.xyz.alt);
apalmieri 5:1fe1ba1f0013 135 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 136
apalmieri 0:a77f1f1f8318 137 sprintf(msg,"Geoid infos:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 138 pData->gns_data.geo_sep);
apalmieri 5:1fe1ba1f0013 139 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 140
apalmieri 0:a77f1f1f8318 141 // sprintf(msg,"ID - Checksum:\t\t[ *%x ]\n\r",
apalmieri 0:a77f1f1f8318 142 // (pData->gns_data.checksum);
apalmieri 5:1fe1ba1f0013 143 // TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 144
apalmieri 5:1fe1ba1f0013 145 TESEO_GNSS_LOG("\n\n\r");
apalmieri 0:a77f1f1f8318 146
apalmieri 0:a77f1f1f8318 147 return;
apalmieri 0:a77f1f1f8318 148 }
apalmieri 0:a77f1f1f8318 149
apalmieri 0:a77f1f1f8318 150 /**
apalmieri 0:a77f1f1f8318 151 * @brief This function prints on the console the info about GPS Pseudorange Noise Statistics
apalmieri 0:a77f1f1f8318 152 * @param pData
apalmieri 0:a77f1f1f8318 153 * @retval None
apalmieri 0:a77f1f1f8318 154 */
apalmieri 0:a77f1f1f8318 155 static void
apalmieri 0:a77f1f1f8318 156 GetGPGSTInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 157 {
apalmieri 0:a77f1f1f8318 158 // char msg[256];
apalmieri 0:a77f1f1f8318 159
apalmieri 5:1fe1ba1f0013 160 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 161
apalmieri 0:a77f1f1f8318 162 sprintf(msg, "UTC:\t\t\t[ %02d:%02d:%02d ]\n\r",
apalmieri 0:a77f1f1f8318 163 pData->gpgst_data.utc.hh,
apalmieri 0:a77f1f1f8318 164 pData->gpgst_data.utc.mm,
apalmieri 0:a77f1f1f8318 165 pData->gpgst_data.utc.ss);
apalmieri 5:1fe1ba1f0013 166 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 167
apalmieri 0:a77f1f1f8318 168 sprintf(msg,"EHPE:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 169 pData->gpgst_data.EHPE);
apalmieri 5:1fe1ba1f0013 170 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 171
apalmieri 0:a77f1f1f8318 172 sprintf(msg,"Semi-major Dev:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 173 pData->gpgst_data.semi_major_dev);
apalmieri 5:1fe1ba1f0013 174 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 175
apalmieri 0:a77f1f1f8318 176 sprintf(msg,"Semi-minor Dev:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 177 pData->gpgst_data.semi_minor_dev);
apalmieri 5:1fe1ba1f0013 178 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 179
apalmieri 0:a77f1f1f8318 180 sprintf(msg,"Semi-maior Angle:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 181 pData->gpgst_data.semi_major_angle);
apalmieri 5:1fe1ba1f0013 182 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 183
apalmieri 0:a77f1f1f8318 184 sprintf(msg,"Lat Err Dev:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 185 pData->gpgst_data.lat_err_dev);
apalmieri 5:1fe1ba1f0013 186 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 187
apalmieri 0:a77f1f1f8318 188 sprintf(msg,"Lon Err Dev:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 189 pData->gpgst_data.lon_err_dev);
apalmieri 5:1fe1ba1f0013 190 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 191
apalmieri 0:a77f1f1f8318 192 sprintf(msg,"Alt Err Dev:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 193 pData->gpgst_data.alt_err_dev);
apalmieri 5:1fe1ba1f0013 194 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 195
apalmieri 0:a77f1f1f8318 196 // sprintf(msg,"ID - Checksum:\t\t[ *%x ]\n\r",
apalmieri 0:a77f1f1f8318 197 // pData->gpgst_data.checksum);
apalmieri 5:1fe1ba1f0013 198 // TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 199
apalmieri 5:1fe1ba1f0013 200 TESEO_GNSS_LOG("\n\n\r");
apalmieri 0:a77f1f1f8318 201
apalmieri 0:a77f1f1f8318 202 return;
apalmieri 0:a77f1f1f8318 203 }
apalmieri 0:a77f1f1f8318 204
apalmieri 0:a77f1f1f8318 205 /**
apalmieri 0:a77f1f1f8318 206 * @brief This function prints on the console the info about Recommended Minimum Specific GPS/Transit data got by the most recent reception process
apalmieri 0:a77f1f1f8318 207 * @param pData
apalmieri 0:a77f1f1f8318 208 * @retval None
apalmieri 0:a77f1f1f8318 209 */
apalmieri 0:a77f1f1f8318 210 static void
apalmieri 0:a77f1f1f8318 211 GetGPRMCInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 212 {
apalmieri 0:a77f1f1f8318 213 // char msg[256];
apalmieri 0:a77f1f1f8318 214
apalmieri 5:1fe1ba1f0013 215 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 216
apalmieri 0:a77f1f1f8318 217 sprintf(msg, "UTC:\t\t\t\t[ %02d:%02d:%02d ]\n\r",
apalmieri 0:a77f1f1f8318 218 pData->gprmc_data.utc.hh,
apalmieri 0:a77f1f1f8318 219 pData->gprmc_data.utc.mm,
apalmieri 0:a77f1f1f8318 220 pData->gprmc_data.utc.ss);
apalmieri 5:1fe1ba1f0013 221 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 222
apalmieri 0:a77f1f1f8318 223 sprintf(msg,"Status:\t\t\t\t[ %c ]\t\t",
apalmieri 0:a77f1f1f8318 224 pData->gprmc_data.status);
apalmieri 5:1fe1ba1f0013 225 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 226 if (pData->gprmc_data.status == 'A') {
apalmieri 5:1fe1ba1f0013 227 TESEO_GNSS_LOG("-- Valid (reported in 2D and 3D fix conditions)\n\r");
apalmieri 0:a77f1f1f8318 228 }
apalmieri 0:a77f1f1f8318 229 else if (pData->gprmc_data.status == 'V') {
apalmieri 5:1fe1ba1f0013 230 TESEO_GNSS_LOG("-- Warning (reported in NO FIX conditions)\n\r");
apalmieri 0:a77f1f1f8318 231 }
apalmieri 0:a77f1f1f8318 232 else {
apalmieri 5:1fe1ba1f0013 233 TESEO_GNSS_LOG("-- Unknown status\n\r");
apalmieri 0:a77f1f1f8318 234 }
apalmieri 0:a77f1f1f8318 235
apalmieri 0:a77f1f1f8318 236 sprintf(msg,"Latitude:\t\t\t[ %.0f' %02d'' %c ]\n\r",
apalmieri 0:a77f1f1f8318 237 ((pData->gprmc_data.xyz.lat - ((int)pData->gprmc_data.xyz.lat % 100))) / 100,
apalmieri 0:a77f1f1f8318 238 ((int)pData->gprmc_data.xyz.lat % 100),
apalmieri 0:a77f1f1f8318 239 pData->gprmc_data.xyz.ns);
apalmieri 5:1fe1ba1f0013 240 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 241
apalmieri 0:a77f1f1f8318 242 sprintf(msg,"Longitude:\t\t\t[ %.0f' %02d'' %c ]\n\r",
apalmieri 0:a77f1f1f8318 243 ((pData->gprmc_data.xyz.lon - ((int)pData->gprmc_data.xyz.lon % 100))) / 100,
apalmieri 0:a77f1f1f8318 244 ((int)pData->gprmc_data.xyz.lon % 100),
apalmieri 0:a77f1f1f8318 245 pData->gprmc_data.xyz.ew);
apalmieri 5:1fe1ba1f0013 246 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 247
apalmieri 0:a77f1f1f8318 248 sprintf(msg,"Speed over ground (knots):\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 249 pData->gprmc_data.speed);
apalmieri 5:1fe1ba1f0013 250 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 251
apalmieri 0:a77f1f1f8318 252 sprintf(msg,"Trackgood:\t\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 253 pData->gprmc_data.trackgood);
apalmieri 5:1fe1ba1f0013 254 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 255
apalmieri 0:a77f1f1f8318 256 sprintf(msg,"Date (ddmmyy):\t\t\t[ %d ]\n\r",
apalmieri 0:a77f1f1f8318 257 pData->gprmc_data.date);
apalmieri 5:1fe1ba1f0013 258 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 259
apalmieri 0:a77f1f1f8318 260 sprintf(msg,"Magnetic Variation:\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 261 pData->gprmc_data.mag_var);
apalmieri 5:1fe1ba1f0013 262 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 263
apalmieri 0:a77f1f1f8318 264 if (pData->gprmc_data.mag_var_dir != 'E' &&
apalmieri 0:a77f1f1f8318 265 pData->gprmc_data.mag_var_dir != 'W') {
apalmieri 0:a77f1f1f8318 266 sprintf(msg,"Magnetic Var. Direction:\t[ - ]\n\r");
apalmieri 0:a77f1f1f8318 267 }
apalmieri 0:a77f1f1f8318 268 else {
apalmieri 0:a77f1f1f8318 269 sprintf(msg,"Magnetic Var. Direction:\t[ %c ]\n\r",
apalmieri 0:a77f1f1f8318 270 pData->gprmc_data.mag_var_dir);
apalmieri 0:a77f1f1f8318 271 }
apalmieri 5:1fe1ba1f0013 272 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 273
apalmieri 0:a77f1f1f8318 274 // sprintf(msg,"Checksum:\t\t[ *%x ]\n\r",
apalmieri 0:a77f1f1f8318 275 // pData->gprmc_data.checksum);
apalmieri 5:1fe1ba1f0013 276 // TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 277
apalmieri 5:1fe1ba1f0013 278 TESEO_GNSS_LOG("\n\n\r");
apalmieri 0:a77f1f1f8318 279
apalmieri 0:a77f1f1f8318 280 return;
apalmieri 0:a77f1f1f8318 281 }
apalmieri 0:a77f1f1f8318 282
apalmieri 0:a77f1f1f8318 283 /**
apalmieri 0:a77f1f1f8318 284 * @brief This function prints on the console the info about GNSS satellites got by the most recent reception process
apalmieri 0:a77f1f1f8318 285 * @param pData
apalmieri 0:a77f1f1f8318 286 * @retval None
apalmieri 0:a77f1f1f8318 287 */
apalmieri 0:a77f1f1f8318 288 static void
apalmieri 0:a77f1f1f8318 289 GetGSAMsgInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 290 {
apalmieri 0:a77f1f1f8318 291 // char msg[256];
apalmieri 0:a77f1f1f8318 292
apalmieri 5:1fe1ba1f0013 293 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 294
apalmieri 0:a77f1f1f8318 295 sprintf(msg, "Constellation:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 296 pData->gsa_data.constellation);
apalmieri 5:1fe1ba1f0013 297 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 298
apalmieri 0:a77f1f1f8318 299 if (strcmp(pData->gsa_data.constellation, "$GPGSA") == 0) {
apalmieri 5:1fe1ba1f0013 300 TESEO_GNSS_LOG("-- only GPS constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 301 }
apalmieri 0:a77f1f1f8318 302 else if (strcmp(pData->gsa_data.constellation, "$GLGSA") == 0) {
apalmieri 5:1fe1ba1f0013 303 TESEO_GNSS_LOG("-- only GLONASS constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 304 }
apalmieri 0:a77f1f1f8318 305 else if (strcmp(pData->gsa_data.constellation, "$GAGSA") == 0) {
apalmieri 5:1fe1ba1f0013 306 TESEO_GNSS_LOG("-- only GALILEO constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 307 }
apalmieri 0:a77f1f1f8318 308 else if (strcmp(pData->gsa_data.constellation, "$BDGSA") == 0) {
apalmieri 5:1fe1ba1f0013 309 TESEO_GNSS_LOG("-- only BEIDOU constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 310 }
apalmieri 0:a77f1f1f8318 311 else if (strcmp(pData->gsa_data.constellation, "$GNGSA") == 0) {
apalmieri 5:1fe1ba1f0013 312 TESEO_GNSS_LOG("-- more than one constellation is enabled\n\r");
apalmieri 0:a77f1f1f8318 313 }
apalmieri 0:a77f1f1f8318 314
apalmieri 0:a77f1f1f8318 315 sprintf(msg, "Operating Mode:\t\t[ %c ]\t\t",
apalmieri 0:a77f1f1f8318 316 pData->gsa_data.operating_mode);
apalmieri 5:1fe1ba1f0013 317 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 318 if (pData->gsa_data.operating_mode == 'A') {
apalmieri 5:1fe1ba1f0013 319 TESEO_GNSS_LOG("-- Auto (2D/3D)\n\r");
apalmieri 0:a77f1f1f8318 320 }
apalmieri 0:a77f1f1f8318 321 else if (pData->gsa_data.operating_mode == 'M') {
apalmieri 5:1fe1ba1f0013 322 TESEO_GNSS_LOG("-- Manual\n\r");
apalmieri 0:a77f1f1f8318 323 }
apalmieri 0:a77f1f1f8318 324
apalmieri 0:a77f1f1f8318 325 sprintf(msg,"Current Mode:\t\t[ %d ]\t\t",
apalmieri 0:a77f1f1f8318 326 pData->gsa_data.current_mode);
apalmieri 5:1fe1ba1f0013 327 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 328 if (pData->gsa_data.current_mode == 1) {
apalmieri 5:1fe1ba1f0013 329 TESEO_GNSS_LOG("-- no fix available\n\r");
apalmieri 0:a77f1f1f8318 330 }
apalmieri 0:a77f1f1f8318 331 else if (pData->gsa_data.current_mode == 2) {
apalmieri 5:1fe1ba1f0013 332 TESEO_GNSS_LOG("-- 2D\n\r");
apalmieri 0:a77f1f1f8318 333 }
apalmieri 0:a77f1f1f8318 334 else if (pData->gsa_data.current_mode == 3) {
apalmieri 5:1fe1ba1f0013 335 TESEO_GNSS_LOG("-- 3D\n\r");
apalmieri 0:a77f1f1f8318 336 }
apalmieri 0:a77f1f1f8318 337
apalmieri 0:a77f1f1f8318 338 for (uint8_t i=0; i<12; i++) {
apalmieri 0:a77f1f1f8318 339 sprintf(msg,"SatPRN%02d:\t\t[ %d ]\n\r", i+1,
apalmieri 0:a77f1f1f8318 340 pData->gsa_data.sat_prn[i]);
apalmieri 5:1fe1ba1f0013 341 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 342 }
apalmieri 0:a77f1f1f8318 343
apalmieri 0:a77f1f1f8318 344 sprintf(msg,"PDOP:\t\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 345 pData->gsa_data.pdop);
apalmieri 5:1fe1ba1f0013 346 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 347
apalmieri 0:a77f1f1f8318 348 sprintf(msg,"HDOP:\t\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 349 pData->gsa_data.hdop);
apalmieri 5:1fe1ba1f0013 350 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 351
apalmieri 0:a77f1f1f8318 352 sprintf(msg,"VDOP:\t\t\t[ %.01f ]\n\r",
apalmieri 0:a77f1f1f8318 353 pData->gsa_data.vdop);
apalmieri 5:1fe1ba1f0013 354 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 355
apalmieri 0:a77f1f1f8318 356 // sprintf(msg,"ID - Checksum:\t\t[ *%x ]\n\r",
apalmieri 0:a77f1f1f8318 357 // pData->gsa_data.checksum);
apalmieri 5:1fe1ba1f0013 358 // TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 359
apalmieri 5:1fe1ba1f0013 360 TESEO_GNSS_LOG("\n\n\r");
apalmieri 0:a77f1f1f8318 361
apalmieri 0:a77f1f1f8318 362 }
apalmieri 0:a77f1f1f8318 363
apalmieri 0:a77f1f1f8318 364 /**
apalmieri 0:a77f1f1f8318 365 * @brief This function prints on the console the info about GNSS satellites got by the most recent reception process
apalmieri 0:a77f1f1f8318 366 * @param pData
apalmieri 0:a77f1f1f8318 367 * @retval None
apalmieri 0:a77f1f1f8318 368 */
apalmieri 0:a77f1f1f8318 369 static void
apalmieri 0:a77f1f1f8318 370 GetGSVMsgInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 371 {
apalmieri 0:a77f1f1f8318 372 uint8_t i;
apalmieri 0:a77f1f1f8318 373 uint8_t tot_sats = pData->gsv_data.tot_sats;
apalmieri 0:a77f1f1f8318 374 // char msg[256];
apalmieri 0:a77f1f1f8318 375
apalmieri 0:a77f1f1f8318 376 char degree_sym = 248;
apalmieri 0:a77f1f1f8318 377
apalmieri 5:1fe1ba1f0013 378 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 379
apalmieri 0:a77f1f1f8318 380 sprintf(msg, "Constellation:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 381 pData->gsv_data.constellation);
apalmieri 5:1fe1ba1f0013 382 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 383
apalmieri 0:a77f1f1f8318 384 if (strcmp(pData->gsv_data.constellation, "$GPGSV") == 0) {
apalmieri 5:1fe1ba1f0013 385 TESEO_GNSS_LOG("-- message to report all GPS satellites\n\r");
apalmieri 0:a77f1f1f8318 386 }
apalmieri 0:a77f1f1f8318 387 else if (strcmp(pData->gsv_data.constellation, "$GLGSV") == 0) {
apalmieri 5:1fe1ba1f0013 388 TESEO_GNSS_LOG("-- message to report all GLONASS satellites\n\r");
apalmieri 0:a77f1f1f8318 389 }
apalmieri 0:a77f1f1f8318 390 else if (strcmp(pData->gsv_data.constellation, "$GAGSV") == 0) {
apalmieri 5:1fe1ba1f0013 391 TESEO_GNSS_LOG("-- message to report all GALILEO satellites\n\r");
apalmieri 0:a77f1f1f8318 392 }
apalmieri 0:a77f1f1f8318 393 else if (strcmp(pData->gsv_data.constellation, "$BDGSV") == 0) {
apalmieri 5:1fe1ba1f0013 394 TESEO_GNSS_LOG("-- message to report all BEIDOU satellites\n\r");
apalmieri 0:a77f1f1f8318 395 }
apalmieri 0:a77f1f1f8318 396 else if (strcmp(pData->gsv_data.constellation, "$QZGSV") == 0) {
apalmieri 5:1fe1ba1f0013 397 TESEO_GNSS_LOG("-- message to report all QZSS satellites\n\r");
apalmieri 0:a77f1f1f8318 398 }
apalmieri 0:a77f1f1f8318 399 else if (strcmp(pData->gsv_data.constellation, "$GNGSV") == 0) {
apalmieri 5:1fe1ba1f0013 400 TESEO_GNSS_LOG("-- message to report all satellites for all enabled constellations\n\r");
apalmieri 0:a77f1f1f8318 401 }
apalmieri 0:a77f1f1f8318 402
apalmieri 0:a77f1f1f8318 403 /* debug */
apalmieri 0:a77f1f1f8318 404 // sprintf(msg,"Tot Messages:\t\t[ %d ]\n\r",
apalmieri 0:a77f1f1f8318 405 // ((tTeseoData *)(handle->pData))->gsv_data.amount);
apalmieri 5:1fe1ba1f0013 406 // TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 407 //
apalmieri 0:a77f1f1f8318 408 // sprintf(msg,"Message Num:\t\t[ %d ]\n\r",
apalmieri 0:a77f1f1f8318 409 // ((tTeseoData *)(handle->pData))->gsv_data.number);
apalmieri 5:1fe1ba1f0013 410 // TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 411
apalmieri 0:a77f1f1f8318 412 sprintf(msg,"Num of Satellites:\t[ %d ]\n\r", tot_sats);
apalmieri 5:1fe1ba1f0013 413 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 414
apalmieri 5:1fe1ba1f0013 415 TESEO_GNSS_LOG("\n\r");
apalmieri 0:a77f1f1f8318 416
apalmieri 0:a77f1f1f8318 417 for (i=0; i<tot_sats; i++) {
apalmieri 0:a77f1f1f8318 418 sprintf(msg,"Sat%02dPRN:\t\t[ %03d ]\n\r", i+1,
apalmieri 0:a77f1f1f8318 419 pData->gsv_data.gsv_sat_i[i].prn);
apalmieri 5:1fe1ba1f0013 420 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 421
apalmieri 0:a77f1f1f8318 422 sprintf(msg,"Sat%02dElev (%c):\t\t[ %03d ]\n\r", i+1, degree_sym,
apalmieri 0:a77f1f1f8318 423 pData->gsv_data.gsv_sat_i[i].elev);
apalmieri 5:1fe1ba1f0013 424 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 425
apalmieri 0:a77f1f1f8318 426 sprintf(msg,"Sat%02dAzim (%c):\t\t[ %03d ]\n\r", i+1, degree_sym,
apalmieri 0:a77f1f1f8318 427 pData->gsv_data.gsv_sat_i[i].azim);
apalmieri 5:1fe1ba1f0013 428 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 429
apalmieri 0:a77f1f1f8318 430 sprintf(msg,"Sat%02dCN0 (dB):\t\t[ %03d ]\n\r", i+1,
apalmieri 0:a77f1f1f8318 431 pData->gsv_data.gsv_sat_i[i].cn0);
apalmieri 5:1fe1ba1f0013 432 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 433
apalmieri 5:1fe1ba1f0013 434 TESEO_GNSS_LOG("\n\r");
apalmieri 0:a77f1f1f8318 435 }
apalmieri 0:a77f1f1f8318 436
apalmieri 5:1fe1ba1f0013 437 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 438
apalmieri 0:a77f1f1f8318 439 }
apalmieri 0:a77f1f1f8318 440
apalmieri 0:a77f1f1f8318 441 /**
apalmieri 0:a77f1f1f8318 442 * @brief This function prints on the console the info Geofence
apalmieri 0:a77f1f1f8318 443 * @param pData
apalmieri 0:a77f1f1f8318 444 * @retval None
apalmieri 0:a77f1f1f8318 445 */
apalmieri 0:a77f1f1f8318 446 static void
apalmieri 0:a77f1f1f8318 447 GetGeofenceInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 448 {
apalmieri 0:a77f1f1f8318 449 // char msg[256];
apalmieri 0:a77f1f1f8318 450
apalmieri 5:1fe1ba1f0013 451 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 452
apalmieri 0:a77f1f1f8318 453 if(pData->geofence_data.op == GNSS_FEATURE_EN_MSG) {
apalmieri 0:a77f1f1f8318 454 sprintf(msg, "Geofence Enabling:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 455 pData->geofence_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 456 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 457 }
apalmieri 0:a77f1f1f8318 458 if(pData->geofence_data.op == GNSS_GEOFENCE_CFG_MSG) {
apalmieri 0:a77f1f1f8318 459 sprintf(msg, "Geofence Configuration:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 460 pData->geofence_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 461 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 462 }
apalmieri 0:a77f1f1f8318 463 if(pData->geofence_data.op == GNSS_GEOFENCE_STATUS_MSG) {
apalmieri 0:a77f1f1f8318 464 sprintf(msg, "Geofence Status:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 465 pData->geofence_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 466 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 467 if(pData->geofence_data.result == 0) {
apalmieri 5:1fe1ba1f0013 468 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 469 sprintf(msg, "Time/Date:\t\t%02d:%02d:%02d %02d/%02d/%04d\n",
apalmieri 0:a77f1f1f8318 470 pData->geofence_data.timestamp.hh,
apalmieri 0:a77f1f1f8318 471 pData->geofence_data.timestamp.mm,
apalmieri 0:a77f1f1f8318 472 pData->geofence_data.timestamp.ss,
apalmieri 0:a77f1f1f8318 473 pData->geofence_data.timestamp.day,
apalmieri 0:a77f1f1f8318 474 pData->geofence_data.timestamp.month,
apalmieri 0:a77f1f1f8318 475 pData->geofence_data.timestamp.year);
apalmieri 5:1fe1ba1f0013 476 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 477
apalmieri 0:a77f1f1f8318 478 for(uint8_t i = 0; i<MAX_GEOFENCES_NUM; i++) {
apalmieri 0:a77f1f1f8318 479 sprintf(msg, "Position circle[%d]:\t%s\n",
apalmieri 0:a77f1f1f8318 480 i, geofenceCirclePosition[pData->geofence_data.status[i]]);
apalmieri 5:1fe1ba1f0013 481 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 482 }
apalmieri 0:a77f1f1f8318 483 }
apalmieri 0:a77f1f1f8318 484 }
apalmieri 0:a77f1f1f8318 485 if(pData->geofence_data.op == GNSS_GEOFENCE_ALARM_MSG) {
apalmieri 0:a77f1f1f8318 486 sprintf(msg, "Geofence Alarm:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 487 pData->geofence_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 488 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 489 if(pData->geofence_data.result == 0) {
apalmieri 5:1fe1ba1f0013 490 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 491 sprintf(msg, "Time:\t\t%02d:%02d:%02d\n",
apalmieri 0:a77f1f1f8318 492 pData->geofence_data.timestamp.hh,
apalmieri 0:a77f1f1f8318 493 pData->geofence_data.timestamp.mm,
apalmieri 0:a77f1f1f8318 494 pData->geofence_data.timestamp.ss);
apalmieri 5:1fe1ba1f0013 495 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 496 int i = pData->geofence_data.idAlarm;
apalmieri 0:a77f1f1f8318 497 sprintf(msg, "Position circle[%d]:\t%s\n",
apalmieri 0:a77f1f1f8318 498 i, geofenceCirclePosition[pData->geofence_data.status[i]]);
apalmieri 5:1fe1ba1f0013 499 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 500 }
apalmieri 0:a77f1f1f8318 501 }
apalmieri 5:1fe1ba1f0013 502 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 503
apalmieri 0:a77f1f1f8318 504 }
apalmieri 0:a77f1f1f8318 505
apalmieri 0:a77f1f1f8318 506 /**
apalmieri 0:a77f1f1f8318 507 * @brief This function prints on the console the info about Odometer
apalmieri 0:a77f1f1f8318 508 * @param pData
apalmieri 0:a77f1f1f8318 509 * @retval None
apalmieri 0:a77f1f1f8318 510 */
apalmieri 0:a77f1f1f8318 511 static void
apalmieri 0:a77f1f1f8318 512 GetOdometerInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 513 {
apalmieri 0:a77f1f1f8318 514 // char msg[256];
apalmieri 0:a77f1f1f8318 515
apalmieri 5:1fe1ba1f0013 516 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 517
apalmieri 0:a77f1f1f8318 518 if(pData->odo_data.op == GNSS_FEATURE_EN_MSG) {
apalmieri 0:a77f1f1f8318 519 sprintf(msg, "Odometer Enabling:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 520 pData->odo_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 521 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 522 }
apalmieri 0:a77f1f1f8318 523 if((pData->odo_data.op == GNSS_ODO_START_MSG) ||
apalmieri 0:a77f1f1f8318 524 (pData->odo_data.op == GNSS_ODO_STOP_MSG)) {
apalmieri 0:a77f1f1f8318 525 sprintf(msg, "Odometer Operation:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 526 pData->odo_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 527 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 528 }
apalmieri 5:1fe1ba1f0013 529 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 530
apalmieri 0:a77f1f1f8318 531 }
apalmieri 0:a77f1f1f8318 532
apalmieri 0:a77f1f1f8318 533 /**
apalmieri 0:a77f1f1f8318 534 * @brief This function prints on the console the info about Datalog
apalmieri 0:a77f1f1f8318 535 * @param pData
apalmieri 0:a77f1f1f8318 536 * @retval None
apalmieri 0:a77f1f1f8318 537 */
apalmieri 0:a77f1f1f8318 538 static void
apalmieri 0:a77f1f1f8318 539 GetDatalogInfos(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 540 {
apalmieri 0:a77f1f1f8318 541 // char msg[256];
apalmieri 0:a77f1f1f8318 542
apalmieri 5:1fe1ba1f0013 543 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 544
apalmieri 0:a77f1f1f8318 545 if(pData->datalog_data.op == GNSS_FEATURE_EN_MSG) {
apalmieri 0:a77f1f1f8318 546 sprintf(msg, "Datalog Enabling:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 547 pData->datalog_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 548 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 549 }
apalmieri 0:a77f1f1f8318 550 if(pData->datalog_data.op == GNSS_DATALOG_CFG_MSG) {
apalmieri 0:a77f1f1f8318 551 sprintf(msg, "Datalog Configuring:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 552 pData->datalog_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 553 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 554 }
apalmieri 0:a77f1f1f8318 555 if(pData->datalog_data.op == GNSS_DATALOG_START_MSG) {
apalmieri 0:a77f1f1f8318 556 sprintf(msg, "Datalog Start:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 557 pData->datalog_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 558 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 559 }
apalmieri 0:a77f1f1f8318 560 if(pData->datalog_data.op == GNSS_DATALOG_STOP_MSG) {
apalmieri 0:a77f1f1f8318 561 sprintf(msg, "Datalog Stop:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 562 pData->datalog_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 563 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 564 }
apalmieri 0:a77f1f1f8318 565 if(pData->datalog_data.op == GNSS_DATALOG_ERASE_MSG) {
apalmieri 0:a77f1f1f8318 566 sprintf(msg, "Datalog Erase:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 567 pData->datalog_data.result ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 568 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 569 }
apalmieri 5:1fe1ba1f0013 570 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 571
apalmieri 0:a77f1f1f8318 572 }
apalmieri 0:a77f1f1f8318 573
apalmieri 0:a77f1f1f8318 574 /**
apalmieri 0:a77f1f1f8318 575 * @brief This function prints on the console the ack about Message List cfg
apalmieri 0:a77f1f1f8318 576 * @param pData
apalmieri 0:a77f1f1f8318 577 * @retval None
apalmieri 0:a77f1f1f8318 578 */
apalmieri 0:a77f1f1f8318 579 static void
apalmieri 0:a77f1f1f8318 580 GetMsgListAck(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 581 {
apalmieri 0:a77f1f1f8318 582 // char msg[256];
apalmieri 0:a77f1f1f8318 583
apalmieri 5:1fe1ba1f0013 584 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 585
apalmieri 0:a77f1f1f8318 586 sprintf(msg, "Msg List config:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 587 pData->ack ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 588 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 589
apalmieri 5:1fe1ba1f0013 590 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 591 }
apalmieri 0:a77f1f1f8318 592
apalmieri 0:a77f1f1f8318 593 /**
apalmieri 0:a77f1f1f8318 594 * @brief This function prints on the console the ack about Message List cfg
apalmieri 0:a77f1f1f8318 595 * @param pData
apalmieri 0:a77f1f1f8318 596 * @retval None
apalmieri 0:a77f1f1f8318 597 */
apalmieri 0:a77f1f1f8318 598 static void
apalmieri 0:a77f1f1f8318 599 GetAck(tTeseoData *pData)
apalmieri 0:a77f1f1f8318 600 {
apalmieri 0:a77f1f1f8318 601 // char msg[256];
apalmieri 0:a77f1f1f8318 602
apalmieri 5:1fe1ba1f0013 603 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 604
apalmieri 0:a77f1f1f8318 605 sprintf(msg, "Params configuration:\t\t[ %s ]\t",
apalmieri 0:a77f1f1f8318 606 pData->ack ? "ERROR" : "OK");
apalmieri 5:1fe1ba1f0013 607 TESEO_GNSS_LOG("%s", msg);
apalmieri 0:a77f1f1f8318 608
apalmieri 5:1fe1ba1f0013 609 TESEO_GNSS_LOG("\r\n");
apalmieri 0:a77f1f1f8318 610 }
apalmieri 0:a77f1f1f8318 611
apalmieri 0:a77f1f1f8318 612 void
apalmieri 0:a77f1f1f8318 613 _AppOutputCallback(uint32_t msgId, uint32_t msgType, tTeseoData *pData)
apalmieri 0:a77f1f1f8318 614 {
apalmieri 0:a77f1f1f8318 615 switch (msgId) {
apalmieri 0:a77f1f1f8318 616 case LOC_OUTPUT_LOCATION: {
apalmieri 0:a77f1f1f8318 617 // Output last location
apalmieri 5:1fe1ba1f0013 618 TESEO_GNSS_LOG("Loc: lat=%lf, lon=%lf, alt=%f\r\n", pData->gpgga_data.xyz.lat, pData->gpgga_data.xyz.lon, pData->gpgga_data.xyz.alt);
apalmieri 0:a77f1f1f8318 619 break;
apalmieri 0:a77f1f1f8318 620 }
apalmieri 0:a77f1f1f8318 621 case LOC_OUTPUT_NMEA: {
apalmieri 0:a77f1f1f8318 622 //return;
apalmieri 0:a77f1f1f8318 623 Teseo::eMsg msg = (Teseo::eMsg)msgType;
apalmieri 0:a77f1f1f8318 624 switch(msg) {
apalmieri 0:a77f1f1f8318 625 case Teseo::GNS:
apalmieri 0:a77f1f1f8318 626 // GET Fix data for single or combined Satellite navigation system
apalmieri 0:a77f1f1f8318 627 GetGNSMsgInfos(pData);
apalmieri 0:a77f1f1f8318 628 break;
apalmieri 0:a77f1f1f8318 629
apalmieri 0:a77f1f1f8318 630 case Teseo::GPGST:
apalmieri 0:a77f1f1f8318 631 // GET GPS Pseudorange Noise Statistics
apalmieri 0:a77f1f1f8318 632 GetGPGSTInfos(pData);
apalmieri 0:a77f1f1f8318 633 break;
apalmieri 0:a77f1f1f8318 634
apalmieri 0:a77f1f1f8318 635 case Teseo::GPRMC:
apalmieri 0:a77f1f1f8318 636 // GET Recommended Minimum Specific GPS/Transit data
apalmieri 0:a77f1f1f8318 637 GetGPRMCInfos(pData);
apalmieri 0:a77f1f1f8318 638 break;
apalmieri 0:a77f1f1f8318 639
apalmieri 0:a77f1f1f8318 640 case Teseo::GSA:
apalmieri 0:a77f1f1f8318 641 // GET GPS DOP and Active Satellites
apalmieri 0:a77f1f1f8318 642 GetGSAMsgInfos(pData);
apalmieri 0:a77f1f1f8318 643 break;
apalmieri 0:a77f1f1f8318 644
apalmieri 0:a77f1f1f8318 645 case Teseo::GSV:
apalmieri 0:a77f1f1f8318 646 // GET GPS Satellites in View
apalmieri 0:a77f1f1f8318 647 GetGSVMsgInfos(pData);
apalmieri 0:a77f1f1f8318 648 break;
apalmieri 0:a77f1f1f8318 649
apalmieri 0:a77f1f1f8318 650 default:
apalmieri 0:a77f1f1f8318 651 break;
apalmieri 0:a77f1f1f8318 652 }
apalmieri 0:a77f1f1f8318 653 break;
apalmieri 0:a77f1f1f8318 654 }
apalmieri 0:a77f1f1f8318 655 case LOC_OUTPUT_PSTM: {
apalmieri 0:a77f1f1f8318 656 Teseo::ePSTMsg msg = (Teseo::ePSTMsg)msgType;
apalmieri 0:a77f1f1f8318 657 switch(msg) {
apalmieri 0:a77f1f1f8318 658 case Teseo::PSTMGEOFENCE:
apalmieri 0:a77f1f1f8318 659 // GET Geofence info
apalmieri 0:a77f1f1f8318 660 GetGeofenceInfos(pData);
apalmieri 0:a77f1f1f8318 661 break;
apalmieri 0:a77f1f1f8318 662 case Teseo::PSTMODO:
apalmieri 0:a77f1f1f8318 663 // GET Geofence info
apalmieri 0:a77f1f1f8318 664 GetOdometerInfos(pData);
apalmieri 0:a77f1f1f8318 665 break;
apalmieri 0:a77f1f1f8318 666 case Teseo::PSTMDATALOG:
apalmieri 0:a77f1f1f8318 667 // GET Datalog info
apalmieri 0:a77f1f1f8318 668 GetDatalogInfos(pData);
apalmieri 0:a77f1f1f8318 669 break;
apalmieri 0:a77f1f1f8318 670 case Teseo::PSTMSGL:
apalmieri 0:a77f1f1f8318 671 // GET Message List ack
apalmieri 0:a77f1f1f8318 672 GetMsgListAck(pData);
apalmieri 0:a77f1f1f8318 673 break;
apalmieri 0:a77f1f1f8318 674 case Teseo::PSTMSAVEPAR:
apalmieri 0:a77f1f1f8318 675 // GET SAVE PAR ack
apalmieri 0:a77f1f1f8318 676 GetAck(pData);
apalmieri 0:a77f1f1f8318 677 break;
apalmieri 0:a77f1f1f8318 678 default:
apalmieri 0:a77f1f1f8318 679 break;
apalmieri 0:a77f1f1f8318 680 }
apalmieri 0:a77f1f1f8318 681 break;
apalmieri 0:a77f1f1f8318 682 }
apalmieri 0:a77f1f1f8318 683
apalmieri 0:a77f1f1f8318 684 default:
apalmieri 0:a77f1f1f8318 685 break;
apalmieri 0:a77f1f1f8318 686 }
apalmieri 0:a77f1f1f8318 687 }
apalmieri 0:a77f1f1f8318 688
apalmieri 0:a77f1f1f8318 689
apalmieri 0:a77f1f1f8318 690 void
apalmieri 0:a77f1f1f8318 691 _AppEventCallback(eTeseoLocEventType event, uint32_t data)
apalmieri 0:a77f1f1f8318 692 {
apalmieri 0:a77f1f1f8318 693 switch (event) {
apalmieri 0:a77f1f1f8318 694 case TESEO_LOC_EVENT_START_RESULT:
apalmieri 0:a77f1f1f8318 695 if (data != 0) {
apalmieri 5:1fe1ba1f0013 696 TESEO_GNSS_LOG("start failed.\r\n");
apalmieri 0:a77f1f1f8318 697 } else {
apalmieri 5:1fe1ba1f0013 698 TESEO_GNSS_LOG("start OK.\r\n");
apalmieri 0:a77f1f1f8318 699 }
apalmieri 0:a77f1f1f8318 700 break;
apalmieri 0:a77f1f1f8318 701 case TESEO_LOC_EVENT_STOP_RESULT:
apalmieri 0:a77f1f1f8318 702 if (data != 0) {
apalmieri 5:1fe1ba1f0013 703 TESEO_GNSS_LOG("stop failed.\r\n");
apalmieri 0:a77f1f1f8318 704 } else {
apalmieri 5:1fe1ba1f0013 705 TESEO_GNSS_LOG("stop OK.\r\n");
apalmieri 0:a77f1f1f8318 706 }
apalmieri 0:a77f1f1f8318 707 break;
apalmieri 0:a77f1f1f8318 708 default:
apalmieri 0:a77f1f1f8318 709 break;
apalmieri 0:a77f1f1f8318 710 }
apalmieri 0:a77f1f1f8318 711 }