# Choosing your configuration
There are only a few configurations provided by examples. If your application needs something slightly different, here is a general configuration process.
## What number do you want?
First, decide which data members of `gps_fix` and `NMEAGPS` you need (see [Data Model](Data Model.md) for member descriptions). Those members **must** be enabled in `GPSfix_cfg.h`.
Next, figure out what messages can fill out those members, because those messages **must** be enabled in `NMEAGPS_cfg.h`. Here is a table of the NMEA messages parsed by NeoGPS, and which data members they affect:
Message Data Member |
GGA
|
GLL
|
GSA
|
GST
|
GSV
|
RMC
|
VTG
|
ZDA
|
PUBX 001
|
PUBX 041
|
class gps_fix |
status |
* |
* |
* |
|
|
* |
* |
|
* |
|
date2 |
|
|
|
|
|
* |
|
* |
|
* |
time2 |
* |
* |
|
* |
|
* |
|
* |
* |
* |
lat/lon |
* |
* |
|
|
|
* |
|
|
* |
|
altitude |
* |
|
|
|
|
|
|
|
* |
|
speed |
|
|
|
|
|
* |
* |
|
* |
|
heading |
|
|
|
|
|
* |
* |
|
* |
|
satellites 3 |
* |
|
* |
|
|
|
|
|
* |
|
HDOP |
* |
|
* |
|
|
|
|
|
* |
|
VDOP |
|
|
* |
|
|
|
|
|
* |
|
PDOP |
|
|
* |
|
|
|
|
|
|
|
TDOP |
|
|
|
|
|
|
|
|
* |
|
Velocity North,
East,
Down |
|
|
|
|
|
|
|
|
* 4 * 4 * |
|
lat, lon, alt error |
|
|
|
* |
|
|
|
|
* |
|
speed error,
heading error,
time error 5 |
|
|
|
|
|
|
|
|
|
|
class NMEAGPS |
satellite IDs 3 |
|
|
* |
|
* |
|
|
|
|
|
satellite azimuth, elevation and signal strength 3 |
|
|
|
|
* |
|
|
|
|
|
This table illustrates the poor design of the NMEA message set: it requires multiple messages to deliver a complete fix (i.e., all members of `gps_fix`). This also explains why many manufacturers provide proprietary messages that *are* more complete. Above, you can see that the `$PUBX,00`1 message contains all members except `date`.
While the manufacturer's specification will document all sentences supported for your device, you can also find general descriptions of many NMEA sentences [here](http://www.gpsinformation.org/dale/nmea.htm), [here](http://aprs.gids.nl/nmea/) or [here](http://www.catb.org/gpsd/NMEA.txt).
1 The NMEA proprietary messages "PUBX" are only availble in the `ubloxNMEA` class. See [ublox-specific instructions](ublox.md) for adding this class to your configuration.
2 Date and time are both stored in one member of `gps_fix`, called `dateTime`. The `fix.dateTime` member is a C++ class that has both date-oriented members (Date, Month and Year) and time-oriented members (Hours, Minutes and Seconds). See [NeoTime.h](/src/NeoTime.h) for the complete description and capabilities of the `dateTime` member, such as date/time arithmetic and conversion to/from seconds since the epoch. Hundredths of a second are stored in a separate member of `gps_fix`, called `dateTime_cs`, and can also be accessed with the functions `dateTime_ms()` and `dateTime_us()`.
3 The `fix.satellites` member identifies how many of these satellites were used to calculate a fix. The number of satellites' information available in the `gps.satellites[]` array is stored in `gps.sat_count`. This the total number of satellites that may or may not be used for calculating a fix.
4 Only Velocity Down is provided by the PUBX,00 message. A utility routine is provided to *calculate* Velocity North and East from Speed and Heading, if enabled. See `calculateNorthAndEastVelocityFromSpeedAndHeading` in gps_fix.h.
5 These fields are only available from UBX binary messages.