Mbed library to handle GPS data reception and parsing

Dependents:   GPS_U-blox_NEO-6M_Code

Features

  • All positionning parameters are contained into a global data structure.
  • Automatic nema string parsing and data structure update.
    • GSA,GGA,VTG and RMC
  • Convert latitude and longitude to decimal value.
  • Converts latittude,longitude and altitude to ECEF coordinates.

Planed developement

  • Test library for RTOS use.
  • Complete the nema parsing decoders (couple of parameters are not parsed yet and not present in the data structure).
  • Add conversion tool to get ENU coordinates.
Committer:
chris215
Date:
Mon Feb 15 05:26:36 2016 +0000
Revision:
4:d911d7c4e09d
Parent:
3:20f8faf2ad18
Added gps message reception timeout.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris215 0:0c1aa5906cef 1 #include "mbed.h"
chris215 3:20f8faf2ad18 2 #include "DecodersUtils.h"
chris215 0:0c1aa5906cef 3 #include "mbedGPSDefs.h"
chris215 0:0c1aa5906cef 4
chris215 4:d911d7c4e09d 5 #include "USBSerial.h"
chris215 4:d911d7c4e09d 6 extern USBSerial pc; // Virtual serial port over USB
chris215 3:20f8faf2ad18 7
chris215 0:0c1aa5906cef 8 void DecodeGPVTG(char * tokenStr,GPSInfo& data)
chris215 0:0c1aa5906cef 9 {
chris215 3:20f8faf2ad18 10 //pc.printf("VTGDecoder debug: %s\n\r",tokenStr);
chris215 0:0c1aa5906cef 11 int parameterCount = 0;
chris215 0:0c1aa5906cef 12 char *rest; // to point to the rest of the string after token extraction.
chris215 0:0c1aa5906cef 13 char *token; // to point to the actual token returned.
chris215 0:0c1aa5906cef 14 char *ptr = tokenStr; // make q point to start of hello.
chris215 3:20f8faf2ad18 15 //token = strtok_single(ptr, ",");
chris215 3:20f8faf2ad18 16 token = strtok_single(ptr, ",");
chris215 0:0c1aa5906cef 17 while (token != NULL)
chris215 0:0c1aa5906cef 18 {
chris215 3:20f8faf2ad18 19 //pc.printf("%d:%s ",parameterCount,token);
chris215 0:0c1aa5906cef 20 if(parameterCount == 1)
chris215 0:0c1aa5906cef 21 data.TrueTrack = atof(token);
chris215 0:0c1aa5906cef 22
chris215 0:0c1aa5906cef 23 if(parameterCount == 3)
chris215 0:0c1aa5906cef 24 data.MagneticTrack = atof(token);
chris215 0:0c1aa5906cef 25
chris215 0:0c1aa5906cef 26 if(parameterCount == 5)
chris215 0:0c1aa5906cef 27 data.GroundSpeedN = atof(token);
chris215 0:0c1aa5906cef 28
chris215 0:0c1aa5906cef 29 if(parameterCount == 7)
chris215 0:0c1aa5906cef 30 data.GroundSpeedK = atof(token);
chris215 0:0c1aa5906cef 31
chris215 0:0c1aa5906cef 32 parameterCount++;
chris215 0:0c1aa5906cef 33 ptr = rest; // rest contains the left over part..assign it to ptr.
chris215 3:20f8faf2ad18 34 //token = strtok_r(ptr, ",",&rest);
chris215 3:20f8faf2ad18 35 token = strtok_single(NULL, ",");
chris215 0:0c1aa5906cef 36 }
chris215 3:20f8faf2ad18 37 //pc.printf("\n\r");
chris215 0:0c1aa5906cef 38 }