This version is the one to be submitted as a part the Hackster.io contest, Unleash Invisible Intelligence

Committer:
gov1
Date:
Tue Jul 31 16:30:32 2018 +0000
Revision:
0:a761fba7f8a8
complete version with emer. batt low check

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gov1 0:a761fba7f8a8 1 /***********************************
gov1 0:a761fba7f8a8 2 This is the Adafruit GPS library - the ultimate GPS library
gov1 0:a761fba7f8a8 3 for the ultimate GPS module!
gov1 0:a761fba7f8a8 4
gov1 0:a761fba7f8a8 5 Tested and works great with the Adafruit Ultimate GPS module
gov1 0:a761fba7f8a8 6 using MTK33x9 chipset
gov1 0:a761fba7f8a8 7 ------> http://www.adafruit.com/products/746
gov1 0:a761fba7f8a8 8 Pick one up today at the Adafruit electronics shop
gov1 0:a761fba7f8a8 9 and help support open source hardware & software! -ada
gov1 0:a761fba7f8a8 10
gov1 0:a761fba7f8a8 11 Adafruit invests time and resources providing this open source code,
gov1 0:a761fba7f8a8 12 please support Adafruit and open-source hardware by purchasing
gov1 0:a761fba7f8a8 13 products from Adafruit!
gov1 0:a761fba7f8a8 14
gov1 0:a761fba7f8a8 15 Written by Limor Fried/Ladyada for Adafruit Industries.
gov1 0:a761fba7f8a8 16 BSD license, check license.txt for more information
gov1 0:a761fba7f8a8 17 All text above must be included in any redistribution
gov1 0:a761fba7f8a8 18 ****************************************/
gov1 0:a761fba7f8a8 19 #include "mbed.h"
gov1 0:a761fba7f8a8 20 #include <stdint.h>
gov1 0:a761fba7f8a8 21 #include <math.h>
gov1 0:a761fba7f8a8 22 #include <ctype.h>
gov1 0:a761fba7f8a8 23
gov1 0:a761fba7f8a8 24 #ifndef _MBED_ADAFRUIT_GPS_H
gov1 0:a761fba7f8a8 25 #define _MBED_ADAFRUIT_GPS_H
gov1 0:a761fba7f8a8 26
gov1 0:a761fba7f8a8 27
gov1 0:a761fba7f8a8 28 // different commands to set the update rate from once a second (1 Hz) to 10 times a second (10Hz)
gov1 0:a761fba7f8a8 29 #define PMTK_SET_NMEA_UPDATE_1HZ "$PMTK220,1000*1F"
gov1 0:a761fba7f8a8 30 #define PMTK_SET_NMEA_UPDATE_5HZ "$PMTK220,200*2C"
gov1 0:a761fba7f8a8 31 #define PMTK_SET_NMEA_UPDATE_10HZ "$PMTK220,100*2F"
gov1 0:a761fba7f8a8 32
gov1 0:a761fba7f8a8 33
gov1 0:a761fba7f8a8 34 #define PMTK_SET_BAUD_57600 "$PMTK251,57600*2C"
gov1 0:a761fba7f8a8 35 #define PMTK_SET_BAUD_9600 "$PMTK251,9600*17"
gov1 0:a761fba7f8a8 36
gov1 0:a761fba7f8a8 37 // turn on only the second sentence (GPRMC)
gov1 0:a761fba7f8a8 38 #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"
gov1 0:a761fba7f8a8 39 // turn on GPRMC and GGA
gov1 0:a761fba7f8a8 40 #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"
gov1 0:a761fba7f8a8 41 // turn on ALL THE DATA
gov1 0:a761fba7f8a8 42 #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"
gov1 0:a761fba7f8a8 43 // turn off output
gov1 0:a761fba7f8a8 44 #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"
gov1 0:a761fba7f8a8 45
gov1 0:a761fba7f8a8 46 // to generate your own sentences, check out the MTK command datasheet and use a checksum calculator
gov1 0:a761fba7f8a8 47 // such as the awesome http://www.hhhh.org/wiml/proj/nmeaxor.html
gov1 0:a761fba7f8a8 48
gov1 0:a761fba7f8a8 49 #define PMTK_LOCUS_STARTLOG "$PMTK185,0*22"
gov1 0:a761fba7f8a8 50 #define PMTK_LOCUS_LOGSTARTED "$PMTK001,185,3*3C"
gov1 0:a761fba7f8a8 51 #define PMTK_LOCUS_QUERY_STATUS "$PMTK183*38"
gov1 0:a761fba7f8a8 52 #define PMTK_LOCUS_ERASE_FLASH "$PMTK184,1*22"
gov1 0:a761fba7f8a8 53 #define LOCUS_OVERLAP 0
gov1 0:a761fba7f8a8 54 #define LOCUS_FULLSTOP 1
gov1 0:a761fba7f8a8 55
gov1 0:a761fba7f8a8 56 // standby command & boot successful message
gov1 0:a761fba7f8a8 57 #define PMTK_STANDBY "$PMTK161,0*28"
gov1 0:a761fba7f8a8 58 #define PMTK_STANDBY_SUCCESS "$PMTK001,161,3*36" // Not needed currently
gov1 0:a761fba7f8a8 59 #define PMTK_AWAKE "$PMTK010,002*2D"
gov1 0:a761fba7f8a8 60
gov1 0:a761fba7f8a8 61 // ask for the release and version
gov1 0:a761fba7f8a8 62 #define PMTK_Q_RELEASE "$PMTK605*31"
gov1 0:a761fba7f8a8 63
gov1 0:a761fba7f8a8 64 // request for updates on antenna status
gov1 0:a761fba7f8a8 65 #define PGCMD_ANTENNA "$PGCMD,33,1*6C"
gov1 0:a761fba7f8a8 66 #define PGCMD_NOANTENNA "$PGCMD,33,0*6D"
gov1 0:a761fba7f8a8 67
gov1 0:a761fba7f8a8 68 // how long to wait when we're looking for a response
gov1 0:a761fba7f8a8 69 #define MAXWAITSENTENCE 5
gov1 0:a761fba7f8a8 70
gov1 0:a761fba7f8a8 71
gov1 0:a761fba7f8a8 72
gov1 0:a761fba7f8a8 73 class Adafruit_GPS {
gov1 0:a761fba7f8a8 74 public:
gov1 0:a761fba7f8a8 75 void begin(int baud);
gov1 0:a761fba7f8a8 76
gov1 0:a761fba7f8a8 77 Adafruit_GPS(Serial * ser);
gov1 0:a761fba7f8a8 78
gov1 0:a761fba7f8a8 79 char *lastNMEA(void);
gov1 0:a761fba7f8a8 80 bool newNMEAreceived();
gov1 0:a761fba7f8a8 81 void common_init(void);
gov1 0:a761fba7f8a8 82 void sendCommand(char *);
gov1 0:a761fba7f8a8 83 void pause(bool b);
gov1 0:a761fba7f8a8 84
gov1 0:a761fba7f8a8 85 bool parseNMEA(char *response);
gov1 0:a761fba7f8a8 86 uint8_t parseHex(char c);
gov1 0:a761fba7f8a8 87
gov1 0:a761fba7f8a8 88 char read(void);
gov1 0:a761fba7f8a8 89 bool parse(char * nmea);
gov1 0:a761fba7f8a8 90 void interruptReads(bool r);
gov1 0:a761fba7f8a8 91
gov1 0:a761fba7f8a8 92 bool wakeup(void);
gov1 0:a761fba7f8a8 93 bool standby(void);
gov1 0:a761fba7f8a8 94
gov1 0:a761fba7f8a8 95 uint8_t hour, minute, seconds, year, month, day;
gov1 0:a761fba7f8a8 96 uint16_t milliseconds;
gov1 0:a761fba7f8a8 97 float latitude, longitude, geoidheight, altitude;
gov1 0:a761fba7f8a8 98 float speed, angle, magvariation, HDOP;
gov1 0:a761fba7f8a8 99 char lat, lon, mag;
gov1 0:a761fba7f8a8 100 bool fix;
gov1 0:a761fba7f8a8 101 uint8_t fixquality, satellites;
gov1 0:a761fba7f8a8 102
gov1 0:a761fba7f8a8 103 bool waitForSentence(char *wait, uint8_t max = MAXWAITSENTENCE);
gov1 0:a761fba7f8a8 104 bool LOCUS_StartLogger(void);
gov1 0:a761fba7f8a8 105 bool LOCUS_ReadStatus(void);
gov1 0:a761fba7f8a8 106
gov1 0:a761fba7f8a8 107 uint16_t LOCUS_serial, LOCUS_records;
gov1 0:a761fba7f8a8 108 uint8_t LOCUS_type, LOCUS_mode, LOCUS_config, LOCUS_interval, LOCUS_distance, LOCUS_speed, LOCUS_status, LOCUS_percent;
gov1 0:a761fba7f8a8 109 private:
gov1 0:a761fba7f8a8 110 bool paused;
gov1 0:a761fba7f8a8 111
gov1 0:a761fba7f8a8 112 Serial * gpsSerial;
gov1 0:a761fba7f8a8 113 };
gov1 0:a761fba7f8a8 114
gov1 0:a761fba7f8a8 115 #endif