Ok

Dependencies:   mbed_rtos_types Mutex mbed_rtos_storage mbed Semaphore

Committer:
daniwestside
Date:
Wed Nov 27 11:12:33 2019 +0000
Branch:
Sinthreads
Revision:
0:85df64b421a8
OK

Who changed what in which revision?

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