/CosaGPS

NMEA and ublox GPS parser for Arduino Cosa, configurable to use as few as 10 bytes of RAM

Primary LanguageC++

CosaGPS

This fully-configurable Cosa library uses minimal RAM, PROGMEM and CPU time, requiring as few as 10 bytes of RAM, 866 bytes of PROGMEM, and less than 1mS of CPU time per sentence.

It supports the following protocols and messages:

####NMEA 0183

  • GPGGA - GPS system fix data
  • GPGLL - Geographic Latitude and Longitude
  • GPGSA - GPS/GNSS DOP and active satellites
  • GPGST - GNSS Pseudo Range Error Statistics
  • GPGSV - GPS/GNSS Satellites in View
  • GPRMC - Recommended Minimum specific GPS/Transit data
  • GPVTG - Course over ground and Ground speed
  • GPZDA - UTC Time and Date

####u-blox NEO-6 #####NMEA 0183 Protocol Messages

  • UBX,00 - Lat/Long Position Data
  • UBX,04 - Time of Day and Clock Information

#####UBX Protocol Messages

  • NAV_STATUS - Receiver Navigation Status
  • NAV_TIMEGPS - GPS Time Solution
  • NAV_TIMEUTC - UTC Time Solution
  • NAV_POSLLH - Geodetic Position Solution
  • NAV_VELNED - Velocity Solution in NED (North/East/Down)
  • NAV_SVINFO - Space Vehicle Information

(The plain Arduino implementation is available here.)

Goals

In an attempt to be reusable in a variety of different programming styles, this library supports:

  • resource-constrained environments (e.g., ATTINY targets)
  • sync or async operation (main loop() vs interrupt processing)
  • event or polling (Event::Handler vs. fix() call)
  • single, fused or coherent fixes (multiple reports into one)
  • optional buffering of fixes
  • optional floating point
  • configurable message sets, including hooks for implementing proprietary NMEA messages
  • configurable message fields
  • multiple protocols from same device
  • any kind of input stream (Serial, SoftwareSerial, PROGMEM arrays, etc.)

Inconceivable!

Don't believe it? Check out these detailed sections:

Section Description
[Data Model](doc/Data Model.md) Aggregating pieces into a fix
Configurations Tailoring NeoGPS to your needs
Performance 33% faster! Really!
RAM requirements Doing it without buffers!
Program Space requirements Making it fit
Extending NeoGPS Using specific devices
Tradeoffs Comparing to other libraries
Examples Programming styles
Acknowledgements Thanks!