Mark Schwarzer / GPSINT
Committer:
markschwarzer
Date:
Tue Nov 17 20:28:54 2020 +0000
Revision:
0:549c4aa291d5
logs gps data to SD card

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markschwarzer 0:549c4aa291d5 1 /* GPSINT.cpp
markschwarzer 0:549c4aa291d5 2 * jbradshaw (20141101)
markschwarzer 0:549c4aa291d5 3 * GPS functions are work of Tyler Weavers mbed gps library page
markschwarzer 0:549c4aa291d5 4 * (http://mbed.org/users/tylerjw/code/GPS/file/39d75e44b214/GPS.cpp)
markschwarzer 0:549c4aa291d5 5 *
markschwarzer 0:549c4aa291d5 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
markschwarzer 0:549c4aa291d5 7 * of this software and associated documentation files (the "Software"), to deal
markschwarzer 0:549c4aa291d5 8 * in the Software without restriction, including without limitation the rights
markschwarzer 0:549c4aa291d5 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
markschwarzer 0:549c4aa291d5 10 * copies of the Software, and to permit persons to whom the Software is
markschwarzer 0:549c4aa291d5 11 * furnished to do so, subject to the following conditions:
markschwarzer 0:549c4aa291d5 12 *
markschwarzer 0:549c4aa291d5 13 * The above copyright notice and this permission notice shall be included in
markschwarzer 0:549c4aa291d5 14 * all copies or substantial portions of the Software.
markschwarzer 0:549c4aa291d5 15 *
markschwarzer 0:549c4aa291d5 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
markschwarzer 0:549c4aa291d5 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
markschwarzer 0:549c4aa291d5 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
markschwarzer 0:549c4aa291d5 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
markschwarzer 0:549c4aa291d5 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
markschwarzer 0:549c4aa291d5 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
markschwarzer 0:549c4aa291d5 22 * THE SOFTWARE.
markschwarzer 0:549c4aa291d5 23 */
markschwarzer 0:549c4aa291d5 24
markschwarzer 0:549c4aa291d5 25 /* This GPSINT library class retrieves, parses, and updates variables using
markschwarzer 0:549c4aa291d5 26 a serial receive interrupt. The library was written using the Trimble
markschwarzer 0:549c4aa291d5 27 Copernicus II moduls bus should work on any NMEA 4800 baud output device.
markschwarzer 0:549c4aa291d5 28 The relatively slow 4800 baud allows for plenty of processing time during
markschwarzer 0:549c4aa291d5 29 byte receptions in the interrupt. Using the mbed LPC 100MHz unit, it takes
markschwarzer 0:549c4aa291d5 30 about 340us to process, and parse the 2 default GPGGA and GPZTG strings.*/
markschwarzer 0:549c4aa291d5 31
markschwarzer 0:549c4aa291d5 32 #include "mbed.h"
markschwarzer 0:549c4aa291d5 33
markschwarzer 0:549c4aa291d5 34 #ifndef GPSINT_H
markschwarzer 0:549c4aa291d5 35 #define GPSINT_H
markschwarzer 0:549c4aa291d5 36
markschwarzer 0:549c4aa291d5 37 #define PI (3.14159265359)
markschwarzer 0:549c4aa291d5 38 #define GPSBUFSIZE 256 // GPS buffer size
markschwarzer 0:549c4aa291d5 39
markschwarzer 0:549c4aa291d5 40 /**
markschwarzer 0:549c4aa291d5 41 * GPSINT Class.
markschwarzer 0:549c4aa291d5 42 */
markschwarzer 0:549c4aa291d5 43
markschwarzer 0:549c4aa291d5 44 class GPSINT{
markschwarzer 0:549c4aa291d5 45 public:
markschwarzer 0:549c4aa291d5 46 /**
markschwarzer 0:549c4aa291d5 47 * Constructor.
markschwarzer 0:549c4aa291d5 48 * @param gps - Serial port pins attached to the gps
markschwarzer 0:549c4aa291d5 49 */
markschwarzer 0:549c4aa291d5 50 GPSINT(PinName tx, PinName rx);
markschwarzer 0:549c4aa291d5 51 int nmea_validate(char *nmeastr); //runs the checksum calculation on the GPS NMEA string
markschwarzer 0:549c4aa291d5 52 void parseGPSString(char *GPSstrParse); //uses scanf to parse NMEA string into variables
markschwarzer 0:549c4aa291d5 53 void GPSSerialRecvInterrupt(void); //fills temprpary buffer for processing
markschwarzer 0:549c4aa291d5 54 float nmea_to_dec(float deg_coord, char nsew); //convert nmea format to decimal format
markschwarzer 0:549c4aa291d5 55 float calc_course_to(float pointLat, float pontLong);
markschwarzer 0:549c4aa291d5 56 double calc_dist_to_mi(float pointLat, float pontLong);
markschwarzer 0:549c4aa291d5 57 double calc_dist_to_ft(float pointLat, float pontLong);
markschwarzer 0:549c4aa291d5 58 double calc_dist_to_km(float pointLat, float pontLong);
markschwarzer 0:549c4aa291d5 59 double calc_dist_to_m(float pointLat, float pontLong);
markschwarzer 0:549c4aa291d5 60
markschwarzer 0:549c4aa291d5 61 // GPSINT variables
markschwarzer 0:549c4aa291d5 62 char GPSbuf[GPSBUFSIZE]; // Receive buffer.
markschwarzer 0:549c4aa291d5 63 char Temp_GPSbuf[GPSBUFSIZE];// Receive buffer.
markschwarzer 0:549c4aa291d5 64 char GPSidx; // Read by background, written by Int Handler.
markschwarzer 0:549c4aa291d5 65 int GPSstate; //set when successful GPS string is received
markschwarzer 0:549c4aa291d5 66
markschwarzer 0:549c4aa291d5 67 // calculated values
markschwarzer 0:549c4aa291d5 68 float dec_longitude;
markschwarzer 0:549c4aa291d5 69 float dec_latitude;
markschwarzer 0:549c4aa291d5 70 float altitude_ft;
markschwarzer 0:549c4aa291d5 71
markschwarzer 0:549c4aa291d5 72 // GGA - Global Positioning System Fixed Data
markschwarzer 0:549c4aa291d5 73 float nmea_longitude;
markschwarzer 0:549c4aa291d5 74 float nmea_latitude;
markschwarzer 0:549c4aa291d5 75 float utc_time;
markschwarzer 0:549c4aa291d5 76 char ns, ew;
markschwarzer 0:549c4aa291d5 77 int lock;
markschwarzer 0:549c4aa291d5 78 char status;
markschwarzer 0:549c4aa291d5 79 int satelites;
markschwarzer 0:549c4aa291d5 80 float hdop;
markschwarzer 0:549c4aa291d5 81 float msl_altitude;
markschwarzer 0:549c4aa291d5 82 char msl_units;
markschwarzer 0:549c4aa291d5 83
markschwarzer 0:549c4aa291d5 84 // RMC - Recommended Minimmum Specific GNS Data
markschwarzer 0:549c4aa291d5 85 char rmc_status;
markschwarzer 0:549c4aa291d5 86 float speed_k;
markschwarzer 0:549c4aa291d5 87 float course_d;
markschwarzer 0:549c4aa291d5 88 int date;
markschwarzer 0:549c4aa291d5 89
markschwarzer 0:549c4aa291d5 90 // GLL
markschwarzer 0:549c4aa291d5 91 char gll_status;
markschwarzer 0:549c4aa291d5 92
markschwarzer 0:549c4aa291d5 93 // VTG - Course over ground, ground speed
markschwarzer 0:549c4aa291d5 94 float course_t; // ground speed true
markschwarzer 0:549c4aa291d5 95 char course_t_unit;
markschwarzer 0:549c4aa291d5 96 float course_m; // magnetic
markschwarzer 0:549c4aa291d5 97 char course_m_unit;
markschwarzer 0:549c4aa291d5 98 char speed_k_unit;
markschwarzer 0:549c4aa291d5 99 float speed_km; // speek km/hr
markschwarzer 0:549c4aa291d5 100 char speed_km_unit;
markschwarzer 0:549c4aa291d5 101 private:
markschwarzer 0:549c4aa291d5 102 Serial _gps;
markschwarzer 0:549c4aa291d5 103 };
markschwarzer 0:549c4aa291d5 104
markschwarzer 0:549c4aa291d5 105 #endif /* GPSINT_H */