Quick & dirty port of the Adafruit library for their GPS Featherwing board. It is designed to be used with the MAX32630FTHR board.
gps.h@0:8fc18502886a, 2017-06-11 (annotated)
- 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?
User | Revision | Line number | New 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 |