Adafruit GPS Library
Adafruit_GNSS.h
Go to the documentation of this file.
1 /**************************************************************************/
8 /**************************************************************************/
9 
10 #ifndef ADAFRUIT_GNSS_H
11 #define ADAFRUIT_GNSS_H
12 
13 #include "Adafruit_NMEA.h"
14 
16 #define GNSS_COORDINATE_TEXT_SIZE 17
17 
22 typedef struct {
24  int32_t degreesE7;
25  uint16_t degrees;
26  uint8_t minutes;
27  uint32_t fractionalMinutes;
28  char hemisphere;
30 
32 typedef struct {
34  uint8_t hour;
35  uint8_t minute;
36  uint8_t second;
37  uint16_t millisecond;
38 } gnss_time_t;
39 
41 typedef struct {
43  uint8_t day;
44  uint8_t month;
45  uint8_t year;
46 } gnss_date_t;
47 
49 typedef enum : uint8_t {
56 
58 typedef struct {
60  uint8_t field;
62 
67 typedef struct {
74  bool fix;
76  uint8_t fixQuality;
78 
84 class Adafruit_GNSS : public Adafruit_NMEA {
85 public:
86  Adafruit_GNSS(volatile char *firstBuffer = NULL,
87  volatile char *secondBuffer = NULL, size_t capacity = 0);
90  nmea_span_t hemisphere);
91  static size_t formatCoordinate(char *output, size_t capacity,
92  const gnss_coordinate_t &coordinate);
94  static gnss_position_t parsePosition(const nmea_sentence_t &sentence);
95  static gnss_time_t parseTime(nmea_span_t field);
96  static gnss_date_t parseDate(nmea_span_t field);
98  nmea_span_t fields);
99 
100 private:
101  static uint8_t sentenceType(nmea_span_t type);
102  static gnss_validation_t decodeNavigation(uint8_t sentence,
103  nmea_span_t fields,
104  gnss_position_t *position);
106  enum {
107  UNSUPPORTED,
108  GGA,
109  RMC,
110  GLL,
111  GSA
112  };
113 };
114 
115 #endif // ADAFRUIT_GNSS_H
static gnss_coordinate_t parseCoordinate(nmea_span_t coordinate, nmea_span_t hemisphere)
Decode a latitude or longitude field and its hemisphere.
Definition: Adafruit_GNSS.cpp:101
gnss_sentence_status_t
Result of validating fields used by a standard navigation decoder.
Definition: Adafruit_GNSS.h:49
Definition: Adafruit_NMEA.h:70
This validator does not handle the type.
Definition: Adafruit_GNSS.h:51
nmea_number_status_t status
Result of decoding the field.
Definition: Adafruit_GNSS.h:42
nmea_number_status_t fixQualityStatus
Quality field status.
Definition: Adafruit_GNSS.h:75
A required field position is absent.
Definition: Adafruit_GNSS.h:52
uint8_t day
Day of month, 1 through 31.
Definition: Adafruit_GNSS.h:43
uint8_t minute
Minute, 0 through 59.
Definition: Adafruit_GNSS.h:35
Definition: Adafruit_GNSS.h:22
Definition: Adafruit_GNSS.h:67
static gnss_position_t parsePosition(nmea_span_t type, nmea_span_t fields)
Decode a GGA, RMC, or GLL position without retaining receiver state.
Definition: Adafruit_GNSS.cpp:546
char hemisphere
Exactly N, S, E, or W on success.
Definition: Adafruit_GNSS.h:28
gnss_time_t time
UTC time, or EMPTY for a blank time field.
Definition: Adafruit_GNSS.h:71
uint8_t fixQuality
GGA quality, including RTK values; check its status.
Definition: Adafruit_GNSS.h:76
nmea_number_status_t fixStatus
Fix field status.
Definition: Adafruit_GNSS.h:73
gnss_date_t date
RMC date; MISSING in GGA/GLL, possibly EMPTY.
Definition: Adafruit_GNSS.h:72
Decoded NMEA date; no century is inferred. Components are zero on failure.
Definition: Adafruit_GNSS.h:41
Definition: Adafruit_GNSS.h:84
Definition: Adafruit_NMEA.h:41
A populated field has invalid content.
Definition: Adafruit_GNSS.h:53
gnss_sentence_status_t status
Result of navigation field validation.
Definition: Adafruit_GNSS.h:59
uint8_t hour
UTC hour, 0 through 23.
Definition: Adafruit_GNSS.h:34
nmea_number_status_t status
Result of decoding the field.
Definition: Adafruit_GNSS.h:33
gnss_validation_t validation
Sentence status and first failing field.
Definition: Adafruit_GNSS.h:68
uint8_t second
Second, 0 through 60 for a leap second.
Definition: Adafruit_GNSS.h:36
nmea_number_status_t status
Result of decoding the coordinate pair.
Definition: Adafruit_GNSS.h:23
Supported fields are valid or empty.
Definition: Adafruit_GNSS.h:50
static size_t formatCoordinate(char *output, size_t capacity, const gnss_coordinate_t &coordinate)
Format exact coordinate components as signed decimal degrees.
Definition: Adafruit_GNSS.cpp:195
Adafruit_GNSS(volatile char *firstBuffer=NULL, volatile char *secondBuffer=NULL, size_t capacity=0)
Create a GNSS receiver using the shared bounded NMEA framer.
Definition: Adafruit_GNSS.cpp:28
uint8_t month
Month, 1 through 12.
Definition: Adafruit_GNSS.h:44
uint8_t field
One-based error field, or zero without a field error.
Definition: Adafruit_GNSS.h:60
int32_t degreesE7
Decimal degrees times 10000000, truncated toward zero.
Definition: Adafruit_GNSS.h:24
gnss_coordinate_t latitude
Exact latitude components.
Definition: Adafruit_GNSS.h:69
uint32_t fractionalMinutes
Fraction of a minute times 1000000000.
Definition: Adafruit_GNSS.h:27
Decoded UTC time; all components are zero on failure.
Definition: Adafruit_GNSS.h:32
gnss_position_t lastPosition() const
Decode the latest complete line into an independent position result.
Definition: Adafruit_GNSS.cpp:47
Definition: Adafruit_NMEA.h:33
uint8_t minutes
Whole minutes, 0 through 59.
Definition: Adafruit_GNSS.h:26
uint16_t degrees
Whole unsigned degrees, 0 through 180.
Definition: Adafruit_GNSS.h:25
No complete frame with valid checksum.
Definition: Adafruit_GNSS.h:54
uint16_t millisecond
Fraction truncated to milliseconds, 0 to 999.
Definition: Adafruit_GNSS.h:37
uint8_t year
Two-digit year, 0 through 99.
Definition: Adafruit_GNSS.h:45
static gnss_validation_t validateNavigation(nmea_span_t type, nmea_span_t fields)
Validate standard fields before updating navigation data.
Definition: Adafruit_GNSS.cpp:372
bool fix
Valid fix; check fixStatus first.
Definition: Adafruit_GNSS.h:74
Validation result; coordinate-pair errors identify the coordinate field.
Definition: Adafruit_GNSS.h:58
nmea_number_status_t
Result of converting one complete field to a decimal number.
Definition: Adafruit_NMEA.h:49
static gnss_time_t parseTime(nmea_span_t field)
Decode a complete UTC hhmmss[.fraction] field.
Definition: Adafruit_GNSS.cpp:260
Hardware-independent NMEA sentence and field utilities.
gnss_coordinate_t longitude
Exact longitude components.
Definition: Adafruit_GNSS.h:70
static gnss_date_t parseDate(nmea_span_t field)
Decode a complete ddmmyy date field.
Definition: Adafruit_GNSS.cpp:311