Quick & dirty port of the Adafruit library for their GPS Featherwing board. It is designed to be used with the MAX32630FTHR board.

Committer:
danjulio
Date:
Sun Jun 11 04:06:22 2017 +0000
Revision:
0:8fc18502886a
Initial commit of ported gps library for mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
danjulio 0:8fc18502886a 1 /***********************************
danjulio 0:8fc18502886a 2 This is the Adafruit GPS library - the ultimate GPS library
danjulio 0:8fc18502886a 3 for the ultimate GPS module!
danjulio 0:8fc18502886a 4
danjulio 0:8fc18502886a 5 Tested and works great with the Adafruit Ultimate GPS module
danjulio 0:8fc18502886a 6 using MTK33x9 chipset
danjulio 0:8fc18502886a 7 ------> http://www.adafruit.com/products/746
danjulio 0:8fc18502886a 8 Pick one up today at the Adafruit electronics shop
danjulio 0:8fc18502886a 9 and help support open source hardware & software! -ada
danjulio 0:8fc18502886a 10
danjulio 0:8fc18502886a 11 Adafruit invests time and resources providing this open source code,
danjulio 0:8fc18502886a 12 please support Adafruit and open-source hardware by purchasing
danjulio 0:8fc18502886a 13 products from Adafruit!
danjulio 0:8fc18502886a 14
danjulio 0:8fc18502886a 15 Written by Limor Fried/Ladyada for Adafruit Industries.
danjulio 0:8fc18502886a 16 BSD license, check license.txt for more information
danjulio 0:8fc18502886a 17 All text above must be included in any redistribution
danjulio 0:8fc18502886a 18 ****************************************/
danjulio 0:8fc18502886a 19 // Fllybob added lines 34,35 and 40,41 to add 100mHz logging capability
danjulio 0:8fc18502886a 20 //
danjulio 0:8fc18502886a 21 // Ported to mbed by Dan Julio - 5/2017
danjulio 0:8fc18502886a 22
danjulio 0:8fc18502886a 23 #ifndef _ADAFRUIT_GPS_H
danjulio 0:8fc18502886a 24 #define _ADAFRUIT_GPS_H
danjulio 0:8fc18502886a 25
danjulio 0:8fc18502886a 26 #include "mbed.h"
danjulio 0:8fc18502886a 27
danjulio 0:8fc18502886a 28 // different commands to set the update rate from once a second (1 Hz) to 10 times a second (10Hz)
danjulio 0:8fc18502886a 29 // Note that these only control the rate at which the position is echoed, to actually speed up the
danjulio 0:8fc18502886a 30 // position fix you must also send one of the position fix rate commands below too.
danjulio 0:8fc18502886a 31 #define PMTK_SET_NMEA_UPDATE_100_MILLIHERTZ "$PMTK220,10000*2F" // Once every 10 seconds, 100 millihertz.
danjulio 0:8fc18502886a 32 #define PMTK_SET_NMEA_UPDATE_200_MILLIHERTZ "$PMTK220,5000*1B" // Once every 5 seconds, 200 millihertz.
danjulio 0:8fc18502886a 33 #define PMTK_SET_NMEA_UPDATE_1HZ "$PMTK220,1000*1F"
danjulio 0:8fc18502886a 34 #define PMTK_SET_NMEA_UPDATE_5HZ "$PMTK220,200*2C"
danjulio 0:8fc18502886a 35 #define PMTK_SET_NMEA_UPDATE_10HZ "$PMTK220,100*2F"
danjulio 0:8fc18502886a 36 // Position fix update rate commands.
danjulio 0:8fc18502886a 37 #define PMTK_API_SET_FIX_CTL_100_MILLIHERTZ "$PMTK300,10000,0,0,0,0*2C" // Once every 10 seconds, 100 millihertz.
danjulio 0:8fc18502886a 38 #define PMTK_API_SET_FIX_CTL_200_MILLIHERTZ "$PMTK300,5000,0,0,0,0*18" // Once every 5 seconds, 200 millihertz.
danjulio 0:8fc18502886a 39 #define PMTK_API_SET_FIX_CTL_1HZ "$PMTK300,1000,0,0,0,0*1C"
danjulio 0:8fc18502886a 40 #define PMTK_API_SET_FIX_CTL_5HZ "$PMTK300,200,0,0,0,0*2F"
danjulio 0:8fc18502886a 41 // Can't fix position faster than 5 times a second!
danjulio 0:8fc18502886a 42
danjulio 0:8fc18502886a 43
danjulio 0:8fc18502886a 44 #define PMTK_SET_BAUD_57600 "$PMTK251,57600*2C"
danjulio 0:8fc18502886a 45 #define PMTK_SET_BAUD_9600 "$PMTK251,9600*17"
danjulio 0:8fc18502886a 46
danjulio 0:8fc18502886a 47 // turn on only the second sentence (GPRMC)
danjulio 0:8fc18502886a 48 #define PMTK_SET_NMEA_OUTPUT_RMCONLY "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29"
danjulio 0:8fc18502886a 49 // turn on GPRMC and GGA
danjulio 0:8fc18502886a 50 #define PMTK_SET_NMEA_OUTPUT_RMCGGA "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
danjulio 0:8fc18502886a 51 // turn on ALL THE DATA
danjulio 0:8fc18502886a 52 #define PMTK_SET_NMEA_OUTPUT_ALLDATA "$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
danjulio 0:8fc18502886a 53 // turn off output
danjulio 0:8fc18502886a 54 #define PMTK_SET_NMEA_OUTPUT_OFF "$PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
danjulio 0:8fc18502886a 55
danjulio 0:8fc18502886a 56 // to generate your own sentences, check out the MTK command datasheet and use a checksum calculator
danjulio 0:8fc18502886a 57 // such as the awesome http://www.hhhh.org/wiml/proj/nmeaxor.html
danjulio 0:8fc18502886a 58
danjulio 0:8fc18502886a 59 #define PMTK_LOCUS_STARTLOG "$PMTK185,0*22"
danjulio 0:8fc18502886a 60 #define PMTK_LOCUS_STOPLOG "$PMTK185,1*23"
danjulio 0:8fc18502886a 61 #define PMTK_LOCUS_STARTSTOPACK "$PMTK001,185,3*3C"
danjulio 0:8fc18502886a 62 #define PMTK_LOCUS_QUERY_STATUS "$PMTK183*38"
danjulio 0:8fc18502886a 63 #define PMTK_LOCUS_ERASE_FLASH "$PMTK184,1*22"
danjulio 0:8fc18502886a 64 #define LOCUS_OVERLAP 0
danjulio 0:8fc18502886a 65 #define LOCUS_FULLSTOP 1
danjulio 0:8fc18502886a 66
danjulio 0:8fc18502886a 67 #define PMTK_ENABLE_SBAS "$PMTK313,1*2E"
danjulio 0:8fc18502886a 68 #define PMTK_ENABLE_WAAS "$PMTK301,2*2E"
danjulio 0:8fc18502886a 69
danjulio 0:8fc18502886a 70 // standby command & boot successful message
danjulio 0:8fc18502886a 71 #define PMTK_STANDBY "$PMTK161,0*28"
danjulio 0:8fc18502886a 72 #define PMTK_STANDBY_SUCCESS "$PMTK001,161,3*36" // Not needed currently
danjulio 0:8fc18502886a 73 #define PMTK_AWAKE "$PMTK010,002*2D"
danjulio 0:8fc18502886a 74
danjulio 0:8fc18502886a 75 // ask for the release and version
danjulio 0:8fc18502886a 76 #define PMTK_Q_RELEASE "$PMTK605*31"
danjulio 0:8fc18502886a 77
danjulio 0:8fc18502886a 78 // request for updates on antenna status
danjulio 0:8fc18502886a 79 #define PGCMD_ANTENNA "$PGCMD,33,1*6C"
danjulio 0:8fc18502886a 80 #define PGCMD_NOANTENNA "$PGCMD,33,0*6D"
danjulio 0:8fc18502886a 81
danjulio 0:8fc18502886a 82 // how long to wait when we're looking for a response
danjulio 0:8fc18502886a 83 #define MAXWAITSENTENCE 5
danjulio 0:8fc18502886a 84
danjulio 0:8fc18502886a 85
danjulio 0:8fc18502886a 86 class Adafruit_GPS {
danjulio 0:8fc18502886a 87 public:
danjulio 0:8fc18502886a 88 void begin(uint32_t baud);
danjulio 0:8fc18502886a 89
danjulio 0:8fc18502886a 90 Adafruit_GPS(Serial *ser); // Constructor when using HardwareSerial
danjulio 0:8fc18502886a 91
danjulio 0:8fc18502886a 92 char *lastNMEA(void);
danjulio 0:8fc18502886a 93 bool newNMEAreceived();
danjulio 0:8fc18502886a 94 void common_init(void);
danjulio 0:8fc18502886a 95
danjulio 0:8fc18502886a 96 void sendCommand(const char *);
danjulio 0:8fc18502886a 97
danjulio 0:8fc18502886a 98 void pause(bool b);
danjulio 0:8fc18502886a 99
danjulio 0:8fc18502886a 100 bool parseNMEA(char *response);
danjulio 0:8fc18502886a 101 uint8_t parseHex(char c);
danjulio 0:8fc18502886a 102
danjulio 0:8fc18502886a 103 char read(void);
danjulio 0:8fc18502886a 104 void readNMEA(void);
danjulio 0:8fc18502886a 105 bool parse(char *);
danjulio 0:8fc18502886a 106
danjulio 0:8fc18502886a 107 bool wakeup(void);
danjulio 0:8fc18502886a 108 bool standby(void);
danjulio 0:8fc18502886a 109
danjulio 0:8fc18502886a 110 uint8_t hour, minute, seconds, year, month, day;
danjulio 0:8fc18502886a 111 uint16_t milliseconds;
danjulio 0:8fc18502886a 112 // Floating point latitude and longitude value in degrees.
danjulio 0:8fc18502886a 113 float latitude, longitude;
danjulio 0:8fc18502886a 114 // Fixed point latitude and longitude value with degrees stored in units of 1/100000 degrees,
danjulio 0:8fc18502886a 115 // and minutes stored in units of 1/100000 degrees. See pull #13 for more details:
danjulio 0:8fc18502886a 116 // https://github.com/adafruit/Adafruit-GPS-Library/pull/13
danjulio 0:8fc18502886a 117 int32_t latitude_fixed, longitude_fixed;
danjulio 0:8fc18502886a 118 float latitudeDegrees, longitudeDegrees;
danjulio 0:8fc18502886a 119 float geoidheight, altitude;
danjulio 0:8fc18502886a 120 float speed, angle, magvariation, HDOP;
danjulio 0:8fc18502886a 121 char lat, lon, mag;
danjulio 0:8fc18502886a 122 bool fix;
danjulio 0:8fc18502886a 123 uint8_t fixquality, satellites;
danjulio 0:8fc18502886a 124
danjulio 0:8fc18502886a 125 bool waitForSentence(const char *wait, uint8_t max = MAXWAITSENTENCE);
danjulio 0:8fc18502886a 126 bool LOCUS_StartLogger(void);
danjulio 0:8fc18502886a 127 bool LOCUS_StopLogger(void);
danjulio 0:8fc18502886a 128 bool LOCUS_ReadStatus(void);
danjulio 0:8fc18502886a 129
danjulio 0:8fc18502886a 130 uint16_t LOCUS_serial, LOCUS_records;
danjulio 0:8fc18502886a 131 uint8_t LOCUS_type, LOCUS_mode, LOCUS_config, LOCUS_interval, LOCUS_distance, LOCUS_speed, LOCUS_status, LOCUS_percent;
danjulio 0:8fc18502886a 132 private:
danjulio 0:8fc18502886a 133 bool paused;
danjulio 0:8fc18502886a 134
danjulio 0:8fc18502886a 135 uint8_t parseResponse(char *response);
danjulio 0:8fc18502886a 136
danjulio 0:8fc18502886a 137 Serial *gpsHwSerial;
danjulio 0:8fc18502886a 138 };
danjulio 0:8fc18502886a 139
danjulio 0:8fc18502886a 140
danjulio 0:8fc18502886a 141 #endif