nmea gps library - without any serial

Dependents:   HARP2 HARP3 20180621_FT813

Fork of GPS_parser by Tyler Weaver

NMEA GPS Serial Output parser.

Routine taken from NMEA Software Standard (NMEA 0183) http://www.winsystems.com/software/nmea.pdf

Only handles GGA and RMC Messages

Committer:
tylerjw
Date:
Wed Dec 12 17:32:31 2012 +0000
Revision:
5:94daced1e61a
Child:
6:4ed12067a314
bug fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tylerjw 5:94daced1e61a 1 #include "mbed.h"
tylerjw 5:94daced1e61a 2
tylerjw 5:94daced1e61a 3 #ifndef MBED_GPS_PARSER_H
tylerjw 5:94daced1e61a 4 #define MBED_GPS_PARSER_H
tylerjw 5:94daced1e61a 5
tylerjw 5:94daced1e61a 6 #define NO_LOCK 1
tylerjw 5:94daced1e61a 7 #define NOT_PARSED 2
tylerjw 5:94daced1e61a 8 #define GGA 3
tylerjw 5:94daced1e61a 9 #define GLL 4
tylerjw 5:94daced1e61a 10 #define RMC 5
tylerjw 5:94daced1e61a 11 #define VTG 6
tylerjw 5:94daced1e61a 12
tylerjw 5:94daced1e61a 13 #define PI (3.141592653589793)
tylerjw 5:94daced1e61a 14
tylerjw 5:94daced1e61a 15 /** A GPS_parser interface for reading from a Globalsat EM-406 GPS Module */
tylerjw 5:94daced1e61a 16 class GPS_Parser {
tylerjw 5:94daced1e61a 17 public:
tylerjw 5:94daced1e61a 18
tylerjw 5:94daced1e61a 19 GPS_Parser();
tylerjw 5:94daced1e61a 20
tylerjw 5:94daced1e61a 21 /** Sample the incoming GPS data, returning whether there is a lock
tylerjw 5:94daced1e61a 22 *
tylerjw 5:94daced1e61a 23 * @return 1 if there was a lock when the sample was taken (and therefore .longitude and .latitude are valid), else 0
tylerjw 5:94daced1e61a 24 */
tylerjw 5:94daced1e61a 25 int sample(char *);
tylerjw 5:94daced1e61a 26 float get_nmea_longitude();
tylerjw 5:94daced1e61a 27 float get_nmea_latitude();
tylerjw 5:94daced1e61a 28 float get_dec_longitude();
tylerjw 5:94daced1e61a 29 float get_dec_latitude();
tylerjw 5:94daced1e61a 30 float get_msl_altitude();
tylerjw 5:94daced1e61a 31 float get_course_t();
tylerjw 5:94daced1e61a 32 float get_course_m();
tylerjw 5:94daced1e61a 33 float get_speed_k();
tylerjw 5:94daced1e61a 34 float get_speed_km();
tylerjw 5:94daced1e61a 35 int get_satelites();
tylerjw 5:94daced1e61a 36 float get_altitude_ft();
tylerjw 5:94daced1e61a 37
tylerjw 5:94daced1e61a 38 // navigational functions
tylerjw 5:94daced1e61a 39 float calc_course_to(float, float);
tylerjw 5:94daced1e61a 40 double calc_dist_to_mi(float, float);
tylerjw 5:94daced1e61a 41 double calc_dist_to_ft(float, float);
tylerjw 5:94daced1e61a 42 double calc_dist_to_km(float, float);
tylerjw 5:94daced1e61a 43 double calc_dist_to_m(float, float);
tylerjw 5:94daced1e61a 44
tylerjw 5:94daced1e61a 45 private:
tylerjw 5:94daced1e61a 46 float nmea_to_dec(float, char);
tylerjw 5:94daced1e61a 47 float trunc(float v);
tylerjw 5:94daced1e61a 48
tylerjw 5:94daced1e61a 49 // calculated values
tylerjw 5:94daced1e61a 50 volatile float dec_longitude;
tylerjw 5:94daced1e61a 51 volatile float dec_latitude;
tylerjw 5:94daced1e61a 52 volatile float altitude_ft;
tylerjw 5:94daced1e61a 53
tylerjw 5:94daced1e61a 54 // GGA - Global Positioning System Fixed Data
tylerjw 5:94daced1e61a 55 volatile float nmea_longitude;
tylerjw 5:94daced1e61a 56 volatile float nmea_latitude;
tylerjw 5:94daced1e61a 57 volatile float utc_time;
tylerjw 5:94daced1e61a 58 volatile char ns, ew;
tylerjw 5:94daced1e61a 59 volatile int lock;
tylerjw 5:94daced1e61a 60 volatile int satelites;
tylerjw 5:94daced1e61a 61 volatile float hdop;
tylerjw 5:94daced1e61a 62 volatile float msl_altitude;
tylerjw 5:94daced1e61a 63 volatile char msl_units;
tylerjw 5:94daced1e61a 64
tylerjw 5:94daced1e61a 65 // RMC - Recommended Minimmum Specific GNS Data
tylerjw 5:94daced1e61a 66 volatile char rmc_status;
tylerjw 5:94daced1e61a 67 volatile float speed_k;
tylerjw 5:94daced1e61a 68 volatile float course_d;
tylerjw 5:94daced1e61a 69 volatile int date;
tylerjw 5:94daced1e61a 70
tylerjw 5:94daced1e61a 71 // GLL
tylerjw 5:94daced1e61a 72 volatile char gll_status;
tylerjw 5:94daced1e61a 73
tylerjw 5:94daced1e61a 74 // VTG - Course over ground, ground speed
tylerjw 5:94daced1e61a 75 volatile float course_t; // ground speed true
tylerjw 5:94daced1e61a 76 volatile char course_t_unit;
tylerjw 5:94daced1e61a 77 volatile float course_m; // magnetic
tylerjw 5:94daced1e61a 78 volatile char course_m_unit;
tylerjw 5:94daced1e61a 79 volatile char speed_k_unit;
tylerjw 5:94daced1e61a 80 volatile float speed_km; // speek km/hr
tylerjw 5:94daced1e61a 81 volatile char speed_km_unit;
tylerjw 5:94daced1e61a 82 };
tylerjw 5:94daced1e61a 83
tylerjw 5:94daced1e61a 84 #endif