From 8127c8f927b79ef29a43ebd9c9dc1b13ae5dccae Mon Sep 17 00:00:00 2001
From: "Gary E. Miller" <gem@rellim.com>
Date: Mon, 19 Nov 2018 17:12:51 -0800
Subject: www: change .txt to .adoc.

To make it clear these are asciidoc files, not plain text.
---
 www/NMEA.adoc | 2622 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 2622 insertions(+)
 create mode 100644 www/NMEA.adoc

(limited to 'www/NMEA.adoc')

diff --git a/www/NMEA.adoc b/www/NMEA.adoc
new file mode 100644
index 00000000..d8280075
--- /dev/null
+++ b/www/NMEA.adoc
@@ -0,0 +1,2622 @@
+= NMEA Revealed =
+:description: A programmer's guide to NMEA0183, the GPS protocol reporting standard
+:keywords: NMEA0183, GPS, standard, protocol
+Eric S. Raymond <esr@thyrsus.com>
+v2.22, Nov 2018
+
+NMEA 0183 is a proprietary protocol issued by the National Marine
+Electronics Association for use in boat navigation and control
+systems.  Because early GPS sensors were designed for compatibility
+with these systems, GPS reporting protocols are often a small
+subset of NMEA 0183 or mutated from such as subset.  AIS, the
+Marine Automatic Identification system, also uses NMEA0183-like
+packet formats.
+
+This document is a list of NMEA 0183 sentences with field descriptions.
+It is primarily intended to help people understand GPS reports, but
+also exists because the author finds life-critical protocols with
+only closed/proprietary documentation deeply offensive.
+
+The master of this document is in asciidoc format at the GPSD project
+website; you are probably seeing it as a web page.  You may encounter
+versions of it, in plain ASCII, that do not have a revision number and
+do not list an editor. These are older and should be considered
+obsolescent.
+
+== Sources and Applicable Standards ==
+
+This collection may originally have been redacted from the document
+cited as <<BETKE>>; see the list of sources at the end of this
+document.  The official NMEA 0183 standard was not consulted at any
+point, thus this document is not a derivative work of that standard
+and is not controlled by the rapacious lawyers of NMEA.
+
+It appears there is an international standard, IEC 61162-1, published
+in 2000, that is essentially NMEA 0183.  <<IEC61162-1>> says it "is closely
+aligned with NMEA 0183 version 2.30".  Unfortunately, it costs money
+and is not redistributable.
+
+This collection of sentences is originally from the gpsdrive
+distribution, but adds more information on the following topics:
+
+* Old and new forms of VTG
+* Units used in GGA
+* Vendor extensions PRWIZCH and PMGNST
+* FAA Mode Indicator field for RMC, RMB, VTG, GLL, BWC, XTE.
+* New documentation on BWC, DTM, GBS, GNS, GRS, GST, MSK, and MSS sentences.
+* Sentence examples merged from <<GIDS>>
+* Sentence explanations from <<GIDS>> and elsewhere
+* Corrected badly mangled ZDA description.
+* Corrected DPT titling
+* Common talker IDs
+* Sentences HFB, ITS, TPC, TDS, TFI, TPC, TPR, TPT from [GLOBALSAT].
+* Sentence PASHR from <<PASHR>>.
+* Satellite IDs: PRN vs NMEA-ID.
+* Error status indications.
+
+== Relationship to NMEA 2000 ==
+
+Recently the National Marine Electronics Association has attempted to
+replace NMEA 0183 with a very differently structured protocol named
+NMEA 2000.  It is binary rather than textual, a profile or
+interpretation of the Controller Area Network (CAN) protocol used in
+automotive networking. Unlike NMEA 0183 it is frame-based and cannot
+be transmitted over serial links.
+
+While newer marine electronics uses this protocol, general-purpose
+GPSes have not adopted it.  Thus we do not attempt to document NMEA
+2000 here; see <<CANBUS>>, <<NMEA2000>>, and <<KEVERSOFT>> instead.
+
+== NMEA version timeline ==
+
+|========================================================================
+|NMEA 2.00 | January 1992
+|NMEA 2.01 | August 1994
+|NMEA 2.10 | October 1995
+|NMEA 2.20 | January 1997
+|NMEA 2.30 | March 1998
+|NMEA 3.00 | July 2000
+|NMEA 3.01 | January 2002
+|NMEA 4.00 | November 2008
+|NMEA 4.10 | July 2012
+|========================================================================
+
+No version earlier than 2.00 is listed or archived on the NMEA website.
+
+The NMEA 4.00 standard states, provocatively, that it is "in theory"
+backwards compatible to 2.00, and that versions before 2.00 are not
+forward-compatible <<ANON>>.
+
+== NMEA 0183 physical protocol layer ==
+
+The NMEA specification requires a physical-level protocol compatible
+with RS422 at 4800bps, 8N1 or 7N2.  It is RS422 rather than RS232
+because NMEA expects many navigational devices to feed a common serial
+bus.  The data encoding is ASCII with the high data bit not used and
+zeroed.
+
+Consumer-grade GPS sensors normally report over an RS232 port or a USB
+port emulating an RS232 serial device; some use Bluetooth. Baud rate
+is variable, with 9600 probably the most common.  Most devices use
+8N1; there are rare exceptions that use 7N2 (San Jose Navigation) or
+even 8O1 (Trimble).
+
+== Sentence Mixes and NMEA Variations ==
+
+Most GPS sensors emit only RMC, GSA, GSV, GLL, VTG, and (rarely) ZDA.
+Newer ones conforming to NMEA 3.x may emit GBS as well. Other NMEA
+sentences are usually only emitted by high-end maritime navigation
+systems.
+
+The form of VTG is incompatibly variable with NMEA version. See
+the detailed description of that sentence for details.
+
+In NMEA 2.3, several sentences (APB, BWC, BWR, GLL, RMA, RMB, RMC,
+VTG, WCV, and XTE) got a new last field carrying the signal integrity
+information needed by the FAA.  (The values in the GGA mode field were
+extended to carry this information as well.) Here are the values:
+
+FAA Mode Indicator
+     A = Autonomous mode
+     D = Differential Mode
+     E = Estimated (dead-reckoning) mode
+     M = Manual Input Mode
+     S = Simulated Mode
+     N = Data Not Valid
+     P = Precise (4.00 and later)
+
+This field may be empty.  In pre-2.3 versions it is omitted. <<NTUM>> says
+that according to the NMEA specification, it dominates the Status field --
+the Status field will be set to "A" (data valid) for Mode Indicators A
+and D, and to "V" (data invalid) for all other values of the Mode
+Indicator.  This is confirmed by <<IEC>>.
+
+In NMEA 3.0, the GBS sentence reports a complete set of error estimates. Note
+however that many receivers claiming to emit "3.0" or "3.01" don't
+actually ship this sentence.
+
+== NMEA Encoding Conventions ==
+
+Data is transmitted in serial async, 1 start-bit, 8 data-bits,
+1 stop-bit, no parity.  Data-bits are in least-significant-bit
+order.  The standard specifies 4800 as the speed, but this is no
+longer common. The most-signifacant-bit is always zero.
+
+An NMEA sentence consists of a start delimiter, followed by a
+comma-separated sequence of fields, followed by the character '*'
+(ASCII 42), the checksum and an end-of-line marker.
+
+The start delimiter is normally '$' (ASCII 36). Packets of AIVDM/AIVDO
+data, which are otherwise formatted like NMEA, use '!'.  Up to 4.00
+these are the only permitted start characters <<ANON>>.
+
+The first field of a sentence is called the "tag" and normally
+consists of a two-letter talker ID followed by a three-letter
+type code.
+
+Where a numeric latitude or longitude is given, the two digits
+immediately to the left of the decimal point are whole minutes, to the
+right are decimals of minutes, and the remaining digits to the left of
+the whole minutes are whole degrees.
+
+Eg. 4533.35 is 45 degrees and 33.35 minutes. ".35" of a minute is
+exactly 21 seconds.
+
+Eg. 16708.033 is 167 degrees and 8.033 minutes. ".033" of a minute is
+about 2 seconds.
+
+In NMEA 3.01 (and possibly some earlier versions), the character "^"
+(HEX 5E) is reserved as an introducer for two-character hex escapes
+using 0-9 and A-F, expressing an ISO 8859-1 (Latin-1) character <<ANON>>.
+
+The Checksum is mandatory, and the last field in a sentance.  It is
+the 8-bit XOR of all characters in the sentance, excluding the "$", "I",
+or "*" characters; but including all "," and "^".  It is encoded as
+two hexadecimal characters (0-9, A-F), the most-significant-nibble
+being sent first.
+
+Sentences are terminated by a <CR><LF> sequence.
+
+Maximum sentence length, including the $ and <CR><LF> is 82 bytes.
+
+According to <<UNMEA>>, the NMEA standard requires that a field (such as
+altitude, latitude, or longitude) must be left empty when the GPS has
+no valid data for it.  However, many receivers violate this.  It's
+common, for example, to see latitude/longitude/altitude figures filled
+with zeros when the GPS has no valid data.
+
+== Dates and times ==
+
+NMEA devices report date and time in UTC, aka GMT, aka Zulu time (as
+opposed to local time).  But the way this report is computed results
+in some odd bugs and inaccuracies.
+
+Date and time in GPS is represented as number of weeks from the start
+of zero second of 6 January 1980, plus number of seconds into the
+week.  GPS time is not leap-second corrected, though satellites also
+broadcast a current leap-second correction which may be updated on
+three-month boundaries according to rotational bulletins issued by the
+International Earth Rotation and Reference Systems Service (IERS).
+
+The leap-second correction is only included in the multiplexed satellite
+subframe broadcast, once every 12.5 minutes.  While the satellites do
+notify GPSes of upcoming leap-seconds, this notification is not
+necessarily processed correctly on consumer-grade devices, and may not
+be available at all when a GPS receiver has just cold-booted. Thus,
+reported UTC time may be slightly inaccurate between a cold boot or leap
+second and the following subframe broadcast.
+
+GPS date and time are subject to a rollover problem in the 10-bit week
+number counter, which will re-zero every 1024 weeks (roughly every 19.6
+years). The last rollover (and the first since GPS went live in 1980)
+was in Aug-1999; the next will fall in Apr-2019.  The new "CNAV" data
+format extends the week number to 13 bits, with the first rollover
+occurring in Jan-2137, but this is only used with some newly added GPS
+signals, and is unlikely to be usable in most consumer-grade receivers
+prior to the 2019 rollover.
+
+For accurate time reporting, therefore, a GPS requires a supplemental
+time references sufficient to identify the current rollover period,
+e.g. accurate to within 512 weeks.  Many NMEA GPSes have a wired-in
+assumption about the UTC time of the last rollover and will thus report
+incorrect times outside the rollover period they were designed in.
+
+For these reasons, NMEA GPSes should not be considered high-quality
+references for absolute time.  Some do, however, emit pulse-per-second
+RS232 signals which can be used to improve the precision of an
+external clock. See <<PPS>> for discussion.
+
+== Error status indications
+
+The NMEA sentences in the normal GPS inventory return four kinds of
+validity flags: Mode, Status, the Active/Void bit, and in later
+versions the FAA indicator mode.  The FAA mode field is legally
+required and orthogonal to the others. Here's how the first three used
+in various sentences:
+
+[frame="topbot",options="header"]
+|========================================================
+|               | GPRMC  |   GPGLL  |   GPGGA  |   GPGSA
+|Returns A/V    |  Yes   |    Yes   |    No    |     No
+|Returns mode   |  No    |    No    |    No    |     Yes
+|Returns status |  No    |    Yes   |    Yes   |     No
+|========================================================
+
+The "Navigation receiver warning" is 'A' for Active and 'V' for Void.
+(or warning).  You will see it when either there is no satellite lock,
+or to indicate a valid fix that has a DOP too high, or which fails an
+elevation test. In the latter case the visible sats are below some
+fixed elevation of the horizon (usually 15%, but some GPSes make this
+adjustable) making position unreliable due to poor geometry and more
+variable signal lag induced by lengthened atmosphere transit.
+
+Mode is associated with the GSA sentence associated with the last fix.
+It reports whether the fix was no good, sufficient for 2D, or
+sufficient for 3D (values 1, 2, and 3).
+
+Status will be 0 when the sample from from which the reporting
+sentence was generated does not have a valid fix, 1 when it has
+a valid (normal-precision) fix, and 2 when the fig is DGPS corrected
+(reducing the base error).
+
+In addition, some sentences may use empty fields to signify invalid
+data. It is not clear whether NMEA 0183 allows this, but real-world
+software must cope.
+
+== Talker IDs ==
+
+NMEA sentences do not identify the individual device that issued
+them; the format was originally designed for shipboard multidrop
+networks on which it's possible only to broadcast to all devices, not
+address a specific one.
+
+NMEA sentences do, however, include a "talker ID" a two-character
+prefix that identifies the type of the transmitting unit.  By far the
+most common talker ID is "GP", identifying a generic GPS, but all of
+the following are well known:
+
+.Common talker IDs
+|================================================================
+|BD    |  BeiDou (China)
+|CD    |  Digital Selective Calling (DSC)
+|EC    |  Electronic Chart Display & Information System (ECDIS)
+|GA    |  Galileo Positioning System
+|GB    |  BeiDou (China)
+|GL    |  GLONASS, according to IEIC 61162-1
+|GN    |  Mixed GPS and GLONASS data, according to IEIC 61162-1
+|GP    |  Global Positioning System receiver
+|II    |  Integrated Instrumentation
+|IN    |  Integrated Navigation
+|LC    |  Loran-C receiver
+|QZ    |  QZSS regional GPS augmentation system (Japan)
+|================================================================
+
+EC -- ECDIS is a specialized geographical information system intended
+to support professional maritime navigation.  NMEA talker units
+meeting the ECDIS standard use this prefix.  Some of these emit GLL.
+
+II - II is emitted by the NMEA interfaces of several widely-used lines
+of marine-navigation electronics. One is the AutoHelm system by
+Raymarine; see also <<SEATALK>> for the native protocol of these
+devices.
+
+IN -- Some Garmin GPS units use an IN talker ID.
+
+CD -- Modern marine VHF radios use conventions collectively known as
+Digital Selective Calling (DSC).  These radios typically take data
+from a local position indicating device.  This data is used in
+conjunction with a unique (FCC assigned) ID to cause your radio to
+broadcast your position data to others.  Conversely, these radios are
+capable of recieving position data of other stations and emitting
+sentences indicating other station positions.  This lets you plot the
+position of other vessels on a chart, for instance.  There has been at
+least one instance of a DSC enabled radio overloading (mis-using) the
+LC talker prefix for this purpose.  Otherwise they use the CD prefix.
+A vessel's nav system is likely to have both CD and some other
+position indicating talker on its bus(es).
+
+LC - Loran-C is a marine navigation system run by the U.S. government,
+which is planning to shut it down in favor of GPS.  Some non-Loran
+devices emit GLL but use this talker ID for backward-compatibility
+reasons, so it may outlast the actual Loran system.
+
+Until the U.S. Coast Guard terminated the Omega Navigation System in
+1997, another common talker prefix was "OM" for an Omega Navigation
+System receiver.
+
+Here is a more complete list of talker ID prefixes.  Most are not
+relevant to GPS systems.
+
+Note that talker IDs made obsolete by newer revisions of the
+standards may still be emitted by older devices.  Support
+for them may be present in the GPSD project.
+
+.Big list of talker IDs
+|================================================================
+|AB	| Independent AIS Base Station
+|AD	| Dependent AIS Base Station
+|AG	| Autopilot - General
+|AP	| Autopilot - Magnetic
+|BN	| Bridge navigational watch alarm system
+|CC	| Computer - Programmed Calculator (obsolete)
+|CD	| Communications - Digital Selective Calling (DSC)
+|CM	| Computer - Memory Data (obsolete)
+|CS	| Communications - Satellite
+|CT	| Communications - Radio-Telephone (MF/HF)
+|CV	| Communications - Radio-Telephone (VHF)
+|CX	| Communications - Scanning Receiver
+|DE	| DECCA Navigation (obsolete)
+|DF	| Direction Finder
+|DM	| Velocity Sensor, Speed Log, Water, Magnetic
+|DU	| Duplex repeater station
+|EC	| Electronic Chart Display & Information System (ECDIS)
+|EP	| Emergency Position Indicating Beacon (EPIRB)
+|ER	| Engine Room Monitoring Systems
+|GP	| Global Positioning System (GPS)
+|HC	| Heading - Magnetic Compass
+|HE	| Heading - North Seeking Gyro
+|HN	| Heading - Non North Seeking Gyro
+|II	| Integrated Instrumentation
+|IN	| Integrated Navigation
+|LA	| Loran A (obsolete)
+|LC	| Loran C (obsolete)
+|MP	| Microwave Positioning System (obsolete)
+|NL	| Navigation light controller
+|OM	| OMEGA Navigation System (obsolete)
+|OS	| Distress Alarm System (obsolete)
+|RA	| RADAR and/or ARPA
+|SD	| Sounder, Depth
+|SN	| Electronic Positioning System, other/general
+|SS	| Sounder, Scanning
+|TI	| Turn Rate Indicator
+|TR	| TRANSIT Navigation System
+|U#	| '#' is a digit 0 ... 9; User Configured
+|UP	| Microprocessor controller
+|VD	| Velocity Sensor, Doppler, other/general
+|VW	| Velocity Sensor, Speed Log, Water, Mechanical
+|WI	| Weather Instruments
+|YC	| Transducer - Temperature (obsolete)
+|YD	| Transducer - Displacement, Angular or Linear (obsolete)
+|YF	| Transducer - Frequency (obsolete)
+|YL	| Transducer - Level (obsolete)
+|YP	| Transducer - Pressure (obsolete)
+|YR	| Transducer - Flow Rate (obsolete)
+|YT	| Transducer - Tachometer (obsolete)
+|YV	| Transducer - Volume (obsolete)
+|YX	| Transducer
+|ZA	| Timekeeper - Atomic Clock
+|ZC	| Timekeeper - Chronometer
+|ZQ	| Timekeeper - Quartz
+|ZV	| Timekeeper - Radio Update, WWV or WWVH
+|================================================================
+
+== Satellite IDs ==
+
+Satellites may be identified by one of two different numbers in
+sentences such as GSV: a PRN number associated with their radio code,
+or an NMEA-ID.
+
+For satellites 1-32, the GPS constellation, these numbers are the
+same. For satellites associated with WAAS (Wide Area Augmentation
+System), EGNOS (European Geostationary Navigation Overlay Service),
+and MSAS (Multi-functional Satellite Augmentation System), they are
+different.
+
+Here is a table of NMEA-ID allocations above 32 as of March 2010:
+
+[frame="topbot",options="header"]
+|====================================================
+|System     |Satellite       |PRN            |NMEA-ID
+|EGNOS      |AOR-E           |120            |33
+|EGNOS      |Artemis         |124            |37
+|EGNOS      |IOR-W           |126            |39
+|MSAS       |MTSAT-1         |129            |42
+|EGNOS      |IOR-E           |131            |44
+|WAAS       |AMR             |133            |46
+|WAAS       |PanAm           |135            |48
+|MSAS       |MTSAT-2         |137            |50
+|WAAS       |Anik            |138            |51
+|====================================================
+
+In general, NMEA-ID = PRN - 87. Theoretically, all NMEA-emitting
+devices should emit NMEA-IDs. In practice, some pass through PRNs.
+
+Documentation on IDs for GLONASS satellites is scanty.
+The manual for one GLONASS-capable receiver has this to say:
+
+To avoid possible confusion caused by repetition of satellite ID
+numbers when using multiple satellite systems, the following
+convention has been adopted:
+
+a. GPS satellites are identified by their PRN numbers, which range from 1 to 32.
+
+b. The numbers 33-64 are reserved for WAAS satellites. The WAAS system
+PRN numbers are 120-138. The offset from NMEA WAAS SV ID to WAAS PRN
+number is 87. A WAAS PRN number of 120 minus 87 yields the SV ID of 33.
+The addition of 87 to the SV ID yields the WAAS PRN number.
+
+c. The numbers 65-96 are reserved for GLONASS satellites. GLONASS
+satellites are identified by 64+satellite slot number. The slot
+numbers are 1 through 24 for the full constellation of 24 satellites,
+this gives a range of 65 through 88. The numbers 89 through 96 are
+available if slot numbers above 24 are allocated to on-orbit spares.
+
+Other sources such as <<SATSTAT>> confirm that the NMEA standard
+assigns NMEA IDs 65-96 to GLONASS.  The following
+table is our best guess of NMEA usage in 2018:
+
+[frame="topbot",options="header"]
+|====================================================
+| 1 - 32    | GPS
+| 33 - 54   | Various SBAS systems (EGNOS, WAAS, SDCM, GAGAN, MSAS)
+| 55 - 64   | not used (might be assigned to further SBAS systems)
+| 65 - 88   | GLONASS
+| 89 - 96   | GLONASS (future extensions?)
+| 97 - 119  | not used
+| 120 - 151 | not used (SBAS PRNs occupy this range)
+| 152 - 158 | Various SBAS systems (EGNOS, WAAS, SDCM, GAGAN, MSAS)
+| 159 - 172 | not used
+| 173 - 182 | IMES
+| 193 - 197 | QZSS
+| 196 - 200 | QZSS (future extensions?)
+| 201 - 235 | BeiDou (u-blox, not NMEA)
+| 301 - 336 | GALILEO
+| 401 - 437 | BeiDou (NMEA)
+|====================================================
+
+GLONASS satellite numbers come in two flavors.  If a sentence
+has a GL talker ID, expect the skyviews to be GLONASS-only and
+in the range 1-32; you must add 64 to get a globally-unique
+NMEA ID.  If the sentence has a GN talker ID, the device emits
+a multi-constellation skyview with GLONASS IDs aleady in
+the 65-96 range.
+
+QZSS is a  geosynchronous (*not geostationary*) system of three
+(possibly four) satellites in highly eliptical, inclined,
+orbits.  It is designed to provide coverage in Japan's
+urban canyons.
+
+BeiDou-1 consists of 4 geostationary satellites operated by China,
+operational since 2004.  Coverage area is the Chinese mainland.
+gpsd does not support this, as this requires special hardware,
+and prior arrangements with the operator, who calculates and
+returns the position fix.
+
+BeiDou-2 (earlier known as COMPASS) is a system of 35 satellites,
+including 5 geostationary for compatability with BeiDou-1.
+As of late 2015, coverage is complete over most of Asia and the
+West Pacific.  It is expected to be fully operational by 2020, by
+when coverage area is expected to be worldwide.
+
+Note that the PRN system is becoming increasingly fragmented and
+unworkable.  New GPS denote each satellite, and their signals, by their
+constellation (gnssID), satellite id in that constellation (svId), and
+signal type (sigId).  NMEA, as of version 4, has not adapted.
+
+== Obsolete sentences ==
+
+Note that sentances made obsolete by newer revisions of the
+standards may still be emitted by devices.
+Support for them may be present in the GPSD project.
+
+The following NMEA sentences have been designated "obsolete" in a
+publicly available NMEA document dated 2009.
+
+|================================================================
+|APA | Autopilot Sentence "A"
+|BER | Bearing & Distance to Waypoint, Dead Reckoning, Rhumb Line
+|BPI | Bearing & Distance to Point of Interest
+|DBK | Depth Below Keel
+|DBS | Depth Below Surface
+|
+|DRU | Dual Doppler Auxiliary Data
+|GDA | Dead Reckoning Positions
+|GLA | Loran-C Positions
+|GOA | OMEGA Positions
+|GXA | TRANSIT Positions
+|GTD | Geographical Position, Loran-C TDs
+|GXA | TRANSIT Position
+|HCC | Compass Heading
+|HCD | Heading and Deviation
+|HDM | Heading, Magnetic
+|HDT | Heading, True
+|HVD | Magnetic Variation, Automatic
+|HVM | Magnetic Variation, Manually Set
+|IMA | Vessel Identification
+|MDA | Meteorological Composite
+|MHU | Humidity
+|MMB | Barometer
+|MTA | Air Temperature
+|MWH | Wave Height
+|MWS | Wind & Sea State
+|
+|Rnn | Routes
+|SBK | Loran-C Blink Status
+|SCY | oran-C Cycle Lock Status
+|SCD | Loran-C ECDs
+|SDB | Loran-C Signal Strength
+|SGD | Position Accuracy Estimate
+|SGR | Loran-C Chain Identifier
+|SIU | Loran-C Stations in Use
+|SLC | Loran-C Status
+|SNC | Navigation Calculation Basis
+|SNU | Loran-C SNR Status
+|SPS | Loran-C Predicted Signal Strength
+|SSF | Position Correction Offset
+|STC | Time Constant
+|STR | Tracking Reference
+|SYS | Hybrid System Configuration
+|================================================================
+
+== NMEA-Standard Sentences ==
+
+Here are the NMEA-standard sentences we know about:
+
+=== AAM - Waypoint Arrival Alarm ===
+
+This sentence is generated by some units to indicate the status of
+arrival (entering the arrival circle, or passing the perpendicular of
+the course line) at the destination waypoint.
+
+------------------------------------------------------------------------------
+        1 2 3   4 5    6
+        | | |   | |    |
+ $--AAM,A,A,x.x,N,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Status, BOOLEAN, A = Arrival circle entered, V = not passed
+2. Status, BOOLEAN, A = perpendicular passed at waypoint, V = not passed
+3. Arrival circle radius
+4. Units of radius, nautical miles
+5. Waypoint ID
+6. Checksum
+
+Example: GPAAM,A,A,0.10,N,WPTNME*43
+
+WPTNME is the waypoint name.
+
+=== ALM - GPS Almanac Data ===
+
+This sentence expresses orbital data for a specified GPS satellite.
+
+------------------------------------------------------------------------------
+        1   2   3  4   5  6    7  8    9    10     11     12     13     14  15   16
+        |   |   |  |   |  |    |  |    |    |      |      |      |      |   |    |
+ $--ALM,x.x,x.x,xx,x.x,hh,hhhh,hh,hhhh,hhhh,hhhhhh,hhhhhh,hhhhhh,hhhhhh,hhh,hhh,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Total number of messages
+2. Message Number
+3. Satellite PRN number (01 to 32)
+4. GPS Week Number
+5. SV health, bits 17-24 of each almanac page
+6. Eccentricity
+7. Almanac Reference Time
+8. Inclination Angle
+9. Rate of Right Ascension
+10. Root of semi-major axis
+11. Argument of perigee
+12. Longitude of ascension node
+13. Mean anomaly
+14. F0 Clock Parameter
+15. F1 Clock Parameter
+16. Checksum
+
+Fields 5 through 15 are dumped as raw hex.
+
+Example:
+
+$GPALM,1,1,15,1159,00,441d,4e,16be,fd5e,a10c9f,4a2da4,686e81,58cbe1,0a4,001*5B
+
+=== APA - Autopilot Sentence "A" ===
+
+This sentence is sent by some GPS receivers to allow them to be used
+to control an autopilot unit. This sentence is commonly used by
+autopilots and contains navigation receiver warning flag status,
+cross-track-error, waypoint arrival status, initial bearing from
+origin waypoint to the destination, continuous bearing from present
+position to destination and recommended heading-to-steer to
+destination waypoint for the active navigation leg of the journey.
+
+------------------------------------------------------------------------------
+        1 2  3   4 5 6 7  8  9 10    11
+        | |  |   | | | |  |  | |     |
+ $--APA,A,A,x.xx,L,N,A,A,xxx,M,c---c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Status
+     V = Loran-C Blink or SNR warning
+     V = general warning flag or other navigation systems when a reliable
+         fix is not available
+2. Status
+     V = Loran-C Cycle Lock warning flag
+     A = OK or not used
+3. Cross Track Error Magnitude
+4. Direction to steer, L or R
+5. Cross Track Units (Nautic miles or kilometers)
+6. Status
+     A = Arrival Circle Entered
+7. Status
+     A = Perpendicular passed at waypoint
+8. Bearing origin to destination
+9. M = Magnetic, T = True
+10. Destination Waypoint ID
+11. checksum
+
+Example: $GPAPA,A,A,0.10,R,N,V,V,011,M,DEST,011,M*82
+
+=== APB - Autopilot Sentence "B" ===
+
+This is a fixed form of the APA sentence with some ambiguities removed.
+
+Note: Some autopilots, Robertson in particular, misinterpret "bearing
+from origin to destination" as "bearing from present position to
+destination". This is likely due to the difference between the APB
+sentence and the APA sentence. for the APA sentence this would be the
+correct thing to do for the data in the same field. APA only differs
+from APB in this one field and APA leaves off the last two fields
+where this distinction is clearly spelled out. This will result in
+poor performance if the boat is sufficiently off-course that the two
+bearings are different.
+                                         13    15
+------------------------------------------------------------------------------
+        1 2 3   4 5 6 7 8   9 10   11  12|   14|
+        | | |   | | | | |   | |    |   | |   | |
+ $--APB,A,A,x.x,a,N,A,A,x.x,a,c--c,x.x,a,x.x,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Status
+     V = Loran-C Blink or SNR warning
+     V = general warning flag or other navigation systems when a reliable
+         fix is not available
+2. Status
+     V = Loran-C Cycle Lock warning flag
+     A = OK or not used
+3. Cross Track Error Magnitude
+4. Direction to steer, L or R
+5. Cross Track Units, N = Nautical Miles
+6. Status
+     A = Arrival Circle Entered
+7. Status
+     A = Perpendicular passed at waypoint
+8. Bearing origin to destination
+9. M = Magnetic, T = True
+10. Destination Waypoint ID
+11. Bearing, present position to Destination
+12. M = Magnetic, T = True
+13. Heading to steer to destination waypoint
+14. M = Magnetic, T = True
+15. Checksum
+
+Example: $GPAPB,A,A,0.10,R,N,V,V,011,M,DEST,011,M,011,M*82
+
+=== BOD - Bearing - Waypoint to Waypoint ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5    6    7
+        |   | |   | |    |    |
+ $--BOD,x.x,T,x.x,M,c--c,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Bearing Degrees, TRUE
+2. T = True
+3. Bearing Degrees, Magnetic
+4. M = Magnetic
+5. TO Waypoint
+6. FROM Waypoint
+7. Checksum
+
+Example 1: $GPBOD,099.3,T,105.6,M,POINTB,*01
+
+Waypoint ID: "POINTB" Bearing 99.3 True, 105.6 Magnetic This sentence
+is transmitted in the GOTO mode, without an active route on your
+GPS. WARNING: this is the bearing from the moment you press enter in
+the GOTO page to the destination waypoint and is NOT updated
+dynamically! To update the information, (current bearing to waypoint),
+you will have to press enter in the GOTO page again.
+
+Example 2: $GPBOD,097.0,T,103.2,M,POINTB,POINTA*52
+
+This sentence is transmitted when a route is active. It contains the
+active leg information: origin waypoint "POINTA" and destination
+waypoint "POINTB", bearing between the two points 97.0 True, 103.2
+Magnetic. It does NOT display the bearing from current location to
+destination waypoint! WARNING Again this information does not change
+until you are on the next leg of the route. (The bearing from POINTA
+to POINTB does not change during the time you are on this leg.)
+
+This sentence has been replaced by BWW in NMEA 4.00 (and posssibly
+earlier versions) <<ANON>>.
+
+=== BWC - Bearing & Distance to Waypoint - Great Circle ===
+
+------------------------------------------------------------------------------
+                                                         12
+        1         2       3 4        5 6   7 8   9 10  11|    13 14
+        |         |       | |        | |   | |   | |   | |    |   |
+ $--BWC,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x.x,T,x.x,M,x.x,N,c--c,m,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTCTime
+2. Waypoint Latitude
+3. N = North, S = South
+4. Waypoint Longitude
+5. E = East, W = West
+6. Bearing, True
+7. T = True
+8. Bearing, Magnetic
+9. M = Magnetic
+10. Nautical Miles
+11. N = Nautical Miles
+12. Waypoint ID
+13. FAA mode indicator (NMEA 2.3 and later, optional)
+14. Checksum
+
+Example 1: $GPBWC,081837,,,,,,T,,M,,N,*13
+
+Example 2: GPBWC,220516,5130.02,N,00046.34,W,213.8,T,218.0,M,0004.6,N,EGLM*11
+
+=== BWR - Bearing and Distance to Waypoint - Rhumb Line ===
+
+------------------------------------------------------------------------------
+                                                   11
+        1         2       3 4        5 6   7 8   9 10  | 12   13
+        |         |       | |        | |   | |   | |   | |    |
+ $--BWR,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x.x,T,x.x,M,x.x,N,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTCTime
+2. Waypoint Latitude
+3. N = North, S = South
+4. Waypoint Longitude
+5. E = East, W = West
+6. Bearing, True
+7. T = True
+8. Bearing, Magnetic
+9. M = Magnetic
+10. Nautical Miles
+11. N = Nautical Miles
+12. Waypoint ID
+13. Checksum
+
+=== BWW - Bearing - Waypoint to Waypoint ===
+
+Bearing calculated at the FROM waypoint.
+
+------------------------------------------------------------------------------
+        1   2 3   4 5    6    7
+        |   | |   | |    |    |
+ $--BWW,x.x,T,x.x,M,c--c,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+ Field Number:
+1. Bearing Degrees, TRUE
+2. T = True
+3. Bearing Degrees, Magnetic
+4. M = Magnetic
+5. TO Waypoint
+6. FROM Waypoint
+7. Checksum
+
+=== DBK - Depth Below Keel ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5   6 7
+        |   | |   | |   | |
+ $--DBK,x.x,f,x.x,M,x.x,F*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Depth, feet
+2. f = feet
+3. Depth, meters
+4. M = meters
+5. Depth, Fathoms
+6. F = Fathoms
+7. Checksum
+
+=== DBS - Depth Below Surface ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5   6 7
+        |   | |   | |   | |
+ $--DBS,x.x,f,x.x,M,x.x,F*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Depth, feet
+2. f = feet
+3. Depth, meters
+4. M = meters
+5. Depth, Fathoms
+6. F = Fathoms
+7. Checksum
+
+=== DBT - Depth below transducer ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5   6 7
+        |   | |   | |   | |
+ $--DBT,x.x,f,x.x,M,x.x,F*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Depth, feet
+2. f = feet
+3. Depth, meters
+4. M = meters
+5. Depth, Fathoms
+6. F = Fathoms
+7. Checksum
+
+In real-world sensors, sometimes not all three conversions are reported.
+So you might see something like $SDDBT,,f,22.5,M,,F*cs
+
+Example: $SDDBT,7.8,f,2.4,M,1.3,F*0D
+
+=== DCN - Decca Position ===
+
+------------------------------------------------------------------------------
+                                      11  13      16
+        1  2  3   4 5  6   7 8  9   10| 12| 14  15| 17
+        |  |  |   | |  |   | |  |   | | | | |   | | |
+ $--DCN,xx,cc,x.x,A,cc,x.x,A,cc,x.x,A,A,A,A,x.x,N,x*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Decca chain identifier
+2. Red Zone Identifier
+3. Red Line Of Position
+4. Red Master Line Status
+5. Green Zone Identifier
+6. Green Line Of Position
+7. Green Master Line Status
+8. Purple Zone Identifier
+9. Purple Line Of Position
+10. Purple Master Line Status
+11. Red Line Navigation Use
+12. Green Line Navigation Use
+13. Purple Line Navigation Use
+14. Position Uncertainity
+15. N = Nautical Miles
+16. Fix Data Basis
+     - 1 = Normal Pattern
+     - 2 = Lane Identification Pattern
+     - 3 = Lane Identification Transmissions
+17. Checksum
+
+(The DCN sentence is obsolete as of 3.01)
+
+=== DPT - Depth of Water ===
+
+------------------------------------------------------------------------------
+        1   2   3
+        |   |   |
+ $--DPT,x.x,x.x*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Depth, meters
+2. Offset from transducer,
+     positive means distance from tansducer to water line
+     negative means distance from transducer to keel
+3. Checksum
+
+This sentence was incorrectly titled "Heading - Deviation & Variation"
+in <<BETKE>>.  It's documented at
+<http://www.humminbird.com/normal.asp?id=853>
+
+Example: $INDPT,2.3,0.0*46
+
+=== DTM - Datum Reference ===
+
+------------------------------------------------------------------------------
+          1  2  3   4  5   6  7  8    9
+          |  |  |   |  |   |  |  |    |
+ $ --DTM,ref,x,llll,c,llll,c,aaa,ref*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Local datum code.
+2. Local datum subcode.  May be blank.
+3. Latitude offset (minutes)
+4. N or S
+5. Longitude offset (minutes)
+6. E or W
+7. Altitude offset in meters
+8. Datum name. What's usually seen here is "W84", the standard
+   WGS84 datum used by GPS.
+9. Checksum.
+
+Example: $GPDTM,W84,C*52
+
+=== FSI - Frequency Set Information ===
+
+Set (or report) frequency, mode of operation and transmitter power level of a
+radiotelephone.
+
+------------------------------------------------------------------------------
+        1      2      3 4 5
+        |      |      | | |
+ $--FSI,xxxxxx,xxxxxx,c,x*hh<CR><LF>
+------------------------------------------------------------------------------
+
+ Field Number:
+1. Transmitting Frequency
+2. Receiving Frequency
+3. Communications Mode (NMEA Syntax 2)
+4. Power Level
+5. Checksum
+
+=== GBS - GPS Satellite Fault Detection ===
+
+------------------------------------------------------------------------------
+            1      2   3   4   5   6   7   8   9
+            |      |   |   |   |   |   |   |   |
+ $--GBS,hhmmss.ss,x.x,x.x,x.x,x.x,x.x,x.x,x.x*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTC time of the GGA or GNS fix associated with this sentence
+2. Expected error in latitude (meters)
+3. Expected error in longitude (meters)
+4. Expected error in altitude (meters)
+5. PRN of most likely failed satellite
+6. Probability of missed detection for most likely failed satellite
+7. Estimate of bias in meters on most likely failed satellite
+8. Standard deviation of bias estimate
+9. Checksum
+
+Note: Source <<MX521>> describes a proprietary extension of GBS with
+a 9th data field. The 8-field version is in NMEA 3.0.
+
+Example: $GPGBS,125027,23.43,M,13.91,M,34.01,M*07
+
+=== GGA - Global Positioning System Fix Data ===
+
+This is one of the sentences commonly emitted by GPS units.
+
+Time, Position and fix related data for a GPS receiver.
+
+------------------------------------------------------------------------------
+                                                      11
+        1         2       3 4        5 6 7  8   9  10 |  12 13  14   15
+        |         |       | |        | | |  |   |   | |   | |   |    |
+ $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Universal Time Coordinated (UTC)
+2. Latitude
+3. N or S (North or South)
+4. Longitude
+5. E or W (East or West)
+6. GPS Quality Indicator,
+     - 0 - fix not available,
+     - 1 - GPS fix,
+     - 2 - Differential GPS fix
+           (values above 2 are 2.3 features)
+     - 3 = PPS fix
+     - 4 = Real Time Kinematic
+     - 5 = Float RTK
+     - 6 = estimated (dead reckoning)
+     - 7 = Manual input mode
+     - 8 = Simulation mode
+7. Number of satellites in view, 00 - 12
+8. Horizontal Dilution of precision (meters)
+9. Antenna Altitude above/below mean-sea-level (geoid) (in meters)
+10. Units of antenna altitude, meters
+11. Geoidal separation, the difference between the WGS-84 earth
+     ellipsoid and mean-sea-level (geoid), "-" means mean-sea-level
+     below ellipsoid
+12. Units of geoidal separation, meters
+13. Age of differential GPS data, time in seconds since last SC104
+     type 1 or 9 update, null field when DGPS is not used
+14. Differential reference station ID, 0000-1023
+15. Checksum
+
+Example:
+
+$GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47
+
+=== GLC - Geographic Position, Loran-C ===
+
+This sentence is obsolete over most of its former coverage area.  The
+US/Canadian/Russian Loran-C network was shut down in 2010; it is still
+as of 2015 in limited use in Europe.  Loran-C operations in Norway
+will cease from 1st Jan 2016. <<NORWAY>>
+
+------------------------------------------------------------------------------
+                                           12    14
+        1    2   3 4   5 6   7 8   9 10  11|   13|
+        |    |   | |   | |   | |   | |   | |   | |
+ $--GLC,xxxx,x.x,a,x.x,a,x.x,a.x,x,a,x.x,a,x.x,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. GRI Microseconds/10
+2. Master TOA Microseconds
+3. Master TOA Signal Status
+4. Time Difference 1 Microseconds
+5. Time Difference 1 Signal Status
+6. Time Difference 2 Microseconds
+7. Time Difference 2 Signal Status
+8. Time Difference 3 Microseconds
+9. Time Difference 3 Signal Status
+10. Time Difference 4 Microseconds
+11. Time Difference 4 Signal Status
+12. Time Difference 5 Microseconds
+13. Time Difference 5 Signal Status
+14. Checksum
+
+=== GLL - Geographic Position - Latitude/Longitude ===
+
+This is one of the sentences commonly emitted by GPS units.
+
+------------------------------------------------------------------------------
+	1       2 3        4 5         6 7   8
+	|       | |        | |         | |   |
+ $--GLL,llll.ll,a,yyyyy.yy,a,hhmmss.ss,a,m,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Latitude
+2. N or S (North or South)
+3. Longitude
+4. E or W (East or West)
+5. Universal Time Coordinated (UTC)
+6. Status A - Data Valid, V - Data Invalid
+7. FAA mode indicator (NMEA 2.3 and later)
+8. Checksum
+
+Example: $GNGLL,4404.14012,N,12118.85993,W,001037.00,A,A*67
+
+=== GNS - Fix data ===
+
+------------------------------------------------------------------------------
+       1         2       3 4        5 6    7  8   9   10  11  12  13
+       |         |       | |        | |    |  |   |   |   |   |   |
+$--GNS,hhmmss.ss,llll.ll,a,yyyyy.yy,a,c--c,xx,x.x,x.x,x.x,x.x,x.x*hh
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTC
+2. Latitude
+3. N or S (North or South)
+4. Longitude
+5. E or W (East or West)
+6. Mode indicator (non-null)
+7. Total number of satelites in use,00-99
+8. HDROP
+9. Antenna altitude, meters, re:mean-sea-level(geoid.
+10. Goeidal separation meters
+11. Age of diferential data
+12. Differential reference station ID
+13. Checksum
+
+The Mode indicator is two or more characters, with the first and second
+defined for GPS and GLONASS.  Further characters may be defined.  For
+each system, the character can have a value (table may be incomplete):
+
+* N = Constellation not in use, or no valid fix
+* A = Autonomous (non-differential)
+* D = Differential mode
+* P = Precise (no degradation, like Selective Availability)
+* R = Real Time Kinematic
+* F = Float RTK
+* E = Estimated (dead reckoning) Mode
+* M = Manual Input Mode
+* S = Simulator Mode
+
+Example: $GPGNS,112257.00,3844.24011,N,00908.43828,W,AN,03,10.5,,,,*57
+
+=== GRS - GPS Range Residuals ===
+
+------------------------------------------------------------------------------
+              1    2  3  4  5  6  7  8  9 10 11 12 13 14  15
+              |    |  |  |  |  |  |  |  |  |  |  |  |  |   |
+ $ --GRS,hhmmss.ss,m,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. TC time of associated GGA fix
+2. 0 = Residuals used in GGA, 1 = residuals calculated after GGA
+3. Satellite 1 residual in meters
+4. Satellite 2 residual in meters
+5. Satellite 3 residual in meters
+6. Satellite 4 residual in meters (blank if unused)
+7. Satellite 5 residual in meters (blank if unused)
+8. Satellite 6 residual in meters (blank if unused)
+9. Satellite 7 residual in meters (blank if unused)
+10. Satellite 8 residual in meters (blank if unused)
+11. Satellite 9 residual in meters (blank if unused)
+12. Satellite 10 residual in meters (blank if unused)
+13. Satellite 11 residual in meters (blank if unused)
+14. Satellite 12 residual in meters (blank if unused)
+15. Checksum
+
+The order of satellites MUST match those in the last GSA.
+
+Example: $GPGRS,024603.00,1,-1.8,-2.7,0.3,,,,,,,,,*6C
+
+Note that the talker ID may be GP, GL, or GN, depending on if the residuals
+are for GPS-only, GLONASS-only, or combined solution, respectively.
+
+=== GST - GPS Pseudorange Noise Statistics ===
+
+------------------------------------------------------------------------------
+              1    2 3 4 5 6 7 8   9
+              |    | | | | | | |   |
+ $ --GST,hhmmss.ss,x,x,x,x,x,x,x,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. TC time of associated GGA fix
+2. Total RMS standard deviation of ranges inputs to the navigation solution
+3. Standard deviation (meters) of semi-major axis of error ellipse
+4. Standard deviation (meters) of semi-minor axis of error ellipse
+5. Orientation of semi-major axis of error ellipse (true north degrees)
+6. Standard deviation (meters) of latitude error
+7. Standard deviation (meters) of longitude error
+8. Standard deviation (meters) of altitude error
+9. Checksum
+
+Example: $GPGST,182141.000,15.5,15.3,7.2,21.8,0.9,0.5,0.8*54
+
+
+=== GSA - GPS DOP and active satellites ===
+
+This is one of the sentences commonly emitted by GPS units.
+
+------------------------------------------------------------------------------
+	1 2 3                        14 15  16  17  18
+	| | |                         |  |   |   |   |
+ $--GSA,a,a,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x.x,x.x,x.x*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Selection mode: M=Manual, forced to operate in 2D or 3D, A=Automatic, 3D/2D
+2. Mode (1 = no fix, 2 = 2D fix, 3 = 3D fix)
+3. ID of 1st satellite used for fix
+4. ID of 2nd satellite used for fix
+5. ID of 3rd satellite used for fix
+6. ID of 4th satellite used for fix
+7. ID of 5th satellite used for fix
+8. ID of 6th satellite used for fix
+9. ID of 7th satellite used for fix
+10. ID of 8th satellite used for fix
+11. ID of 9th satellite used for fix
+12. ID of 10th satellite used for fix
+13. ID of 11th satellite used for fix
+14. ID of 12th satellite used for fix
+15. PDOP
+16. HDOP
+17. VDOP
+18. Checksum
+
+Example: $GNGSA,A,3,80,71,73,79,69,,,,,,,,1.83,1.09,1.47*17
+
+=== GSV - Satellites in view ===
+
+This is one of the sentences commonly emitted by GPS units.
+
+These sentences describe the sky position of a UPS satellite in view.
+Typically they're shipped in a group of 2 or 3.
+
+------------------------------------------------------------------------------
+	1 2 3 4 5 6 7     n
+	| | | | | | |     |
+ $--GSV,x,x,x,x,x,x,x,...*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. total number of GSV messages to be transmitted in this group
+2. 1-origin number of this GSV message  within current group
+3. total number of satellites in view (leading zeros sent)
+4. satellite PRN number (leading zeros sent)
+5. elevation in degrees (-90 to 90) (leading zeros sent)
+6. azimuth in degrees to true north (000 to 359) (leading zeros sent)
+7. SNR in dB (00-99) (leading zeros sent)
+   more satellite info quadruples like 4-7
+   n) checksum
+
+Example:
+    $GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74
+    $GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74
+    $GPGSV,3,3,11,22,42,067,42,24,14,311,43,27,05,244,00,,,,*4D
+
+Some GPS receivers may emit more than 12 quadruples (more than three
+GPGSV sentences), even though NMEA-0813 doesn't allow this.  (The
+extras might be WAAS satellites, for example.) Receivers may also
+report quads for satellites they aren't tracking, in which case the
+SNR field will be null; we don't know whether this is formally allowed
+or not.
+
+Example: $GLGSV,3,3,09,88,07,028,*51
+
+=== GTD - Geographic Location in Time Differences ===
+
+------------------------------------------------------------------------------
+ 	 1   2   3   4   5  6
+	 |   |   |   |   |  |
+ $--GTD,x.x,x.x,x.x,x.x,x.x*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. time difference
+2. time difference
+3. time difference
+4. time difference
+5. time difference
+   n) checksum
+
+
+=== GXA - TRANSIT Position - Latitude/Longitude ===
+
+Location and time of TRANSIT fix at waypoint
+
+------------------------------------------------------------------------------
+        1         2       3 4        5 6    7 8
+        |         |       | |        | |    | |
+ $--GXA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,c--c,X*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTC of position fix
+2. Latitude
+3. East or West
+4. Longitude
+5. North or South
+6. Waypoint ID
+7. Satelite number
+8. Checksum
+
+(The GXA sentence is obsolete as of 3.01.)
+
+=== HDG - Heading - Deviation & Variation ===
+
+------------------------------------------------------------------------------
+        1   2   3 4   5 6
+        |   |   | |   | |
+ $--HDG,x.x,x.x,a,x.x,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Magnetic Sensor heading in degrees
+2. Magnetic Deviation, degrees
+3. Magnetic Deviation direction, E = Easterly, W = Westerly
+4. Magnetic Variation degrees
+5. Magnetic Variation direction, E = Easterly, W = Westerly
+6. Checksum
+
+=== HDM - Heading - Magnetic ===
+
+Vessel heading in degrees with respect to magnetic north produced by
+any device or system producing magnetic heading.
+
+------------------------------------------------------------------------------
+        1   2 3
+        |   | |
+ $--HDM,x.x,M*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Heading Degrees, magnetic
+2. M = magnetic
+3. Checksum
+
+=== HDT - Heading - True ===
+
+Actual vessel heading in degrees true produced by any device or system
+producing true heading.
+
+------------------------------------------------------------------------------
+        1   2 3
+        |   | |
+ $--HDT,x.x,T*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Heading Degrees, true
+2. T = True
+3. Checksum
+
+Example: $GPHDT,274.07,T*03
+
+=== HFB - Trawl Headrope to Footrope and Bottom ===
+
+------------------------------------------------------------------------------
+         1  2  3  4 5
+         |  |  |  | |
+ $--HFB,x.x,M,y.y,M*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Distance from headrope to footrope
+2. Meters (0-100)
+3. Distance from headrope to bottom
+4. Meters (0-100)
+5. Checksum
+
+From <<GLOBALSAT>>. Shown with a "@II" leader rather than "$GP".
+
+=== HSC - Heading Steering Command ===
+
+------------------------------------------------------------------------------
+        1   2 3   4  5
+        |   | |   |  |
+ $--HSC,x.x,T,x.x,M,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Heading Degrees, True
+2. T = True
+3. Heading Degrees, Magnetic
+4. M = Magnetic
+5. Checksum
+
+<<GLOBALSAT>> describes a completely different meaning for this
+sentence, having to do with water temperature sensors.  It is
+unclear which is correct.
+
+=== ITS - Trawl Door Spread 2 Distance ===
+
+------------------------------------------------------------------------------
+         1  2 3
+         |  | |
+ $--ITS,x.x,M*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number)
+
+1. Second spread distance
+2. Meters
+3. Checksum.
+
+From <<GLOBALSAT>>. Shown with a "@II" leader rather than "$GP".
+
+=== LCD - Loran-C Signal Data ===
+
+------------------------------------------------------------------------------
+        1    2   3   4   5   6   7   8   9   10  11  12  13  14
+        |    |   |   |   |   |   |   |   |   |   |   |   |   |
+ $--LCD,xxxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. GRI Microseconds/10
+2. Master Relative SNR
+3. Master Relative ECD
+4. Time Difference 1 Microseconds
+5. Time Difference 1 Signal Status
+6. Time Difference 2 Microseconds
+7. Time Difference 2 Signal Status
+8. Time Difference 3 Microseconds
+9. Time Difference 3 Signal Status
+10. Time Difference 4 Microseconds
+11. Time Difference 4 Signal Status
+12. Time Difference 5 Microseconds
+13. Time Difference 5 Signal Status
+14. Checksum
+
+=== MDA - Meteorilogical Composite ===
+
+------------------------------------------------------------------------------
+         1   2  3    4  5  6 7 8  9 10 11 12 13 14 15 16 17 18 19 20 21
+         |   |  |    |  |  | | |  |  |  |  |  |  |  |  |  |  |  |  |  |
+ $--MDA,n.nn,I,n.nnn,B,n.n,C,n.C,n.n,n,n.n,C,n.n,T,n.n,M,n.n,N,n.n,M*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Barometric pressure, inches of mercury, to the nearest 0.01 inch
+2. I = inches of mercury
+3. Barometric pressure, bars, to the nearest .001 bar
+4. B = bars
+5. Air temperature, degrees C, to the nearest 0.1 degree C
+6. C = degrees C
+7. Water temperature, degrees C (this field left blank by WeatherStation)
+8. C = degrees C
+9. Relative humidity, percent, to the nearest 0.1 percent
+10. Absolute humidity, percent
+11. Dew point, degrees C, to the nearest 0.1 degree C
+12. C = degrees C
+13. Wind direction, degrees True, to the nearest 0.1 degree
+14. T = true
+15. Wind direction, degrees Magnetic, to the nearest 0.1 degree
+16. M = magnetic
+17. Wind speed, knots, to the nearest 0.1 knot
+18. N = knots
+19. Wind speed, meters per second, to the nearest 0.1 m/s
+20. M = meters per second
+21. Checksum
+
+Obsolete as of 2009.
+
+=== MSK - Control for a Beacon Receiver ===
+
+------------------------------------------------------------------------------
+         1  2  3  4  5   6
+         |  |  |  |  |   |
+ $--MSK,nnn,m,nnn,m,nnn*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Frequency to use
+2. Frequency mode, A=auto, M=manual
+3. Beacon bit rate
+4. Bitrate, A=auto, M=manual
+5. Frequency for MSS message status (null for no status)
+6. Checksum
+
+=== MSS - Beacon Receiver Status ===
+
+------------------------------------------------------------------------------
+         1  2  3  4    5   6
+         |  |  |  |    |   |
+ $--MSS,nn,nn,fff,bbb,xxx*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Signal strength (dB 1uV)
+2. Signal to noise ratio (dB)
+3. Beacon frequency (kHz)
+4. Beacon data rate (BPS)
+5. Unknown integer value
+6. Checksum
+
+Example: $GPMSS,0,0,0.000000,200,*5A
+
+=== MTW - Mean Temperature of Water ===
+
+------------------------------------------------------------------------------
+        1   2 3
+        |   | |
+ $--MTW,x.x,C*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Degrees
+2. Unit of Measurement, Celcius
+3. Checksum
+
+<<GLOBALSAT>> lists this as "Meteorological Temperature of Water", which
+is probably incorrect.
+
+Example: $INMTW,17.9,C*1B
+
+=== MWV - Wind Speed and Angle ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5
+        |   | |   | |
+ $--MWV,x.x,a,x.x,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Wind Angle, 0 to 360 degrees
+2. Reference, R = Relative, T = True
+3. Wind Speed
+4. Wind Speed Units, K/M/N
+5. Status, A = Data Valid
+6. Checksum
+
+=== OLN - Omega Lane Numbers ===
+
+------------------------------------------------------------------------------
+        1          2          3          4
+        |--------+ |--------+ |--------+ |
+ $--OLN,aa,xxx,xxx,aa,xxx,xxx,aa,xxx,xxx*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Omega Pair 1
+2. Omega Pair 1
+3. Omega Pair 1
+4. Checksum
+
+(The OLN sentence is obsolete as of 2.30)
+
+=== OSD - Own Ship Data ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5   6 7   8   9 10
+        |   | |   | |   | |   |   | |
+ $--OSD,x.x,A,x.x,a,x.x,a,x.x,x.x,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Heading, degrees true
+2. Status, A = Data Valid
+3. Vessel Course, degrees True
+4. Course Reference
+5. Vessel Speed
+6. Speed Reference
+7. Vessel Set, degrees True
+8. Vessel drift (speed)
+9. Speed Units
+10. Checksum
+
+=== R00 - Waypoints in active route ===
+
+------------------------------------------------------------------------------
+        1                n
+        |                |
+ $--R00,c---c,c---c,....*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. waypoint ID
+
+...
+
+n) checksum
+
+=== RMA - Recommended Minimum Navigation Information ===
+
+------------------------------------------------------------------------------
+                                                    12
+        1 2       3 4        5 6   7   8   9   10  11|
+        | |       | |        | |   |   |   |   |   | |
+ $--RMA,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,x.x,x.x,x.x,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Blink Warning
+2. Latitude
+3. N or S
+4. Longitude
+5. E or W
+6. Time Difference A, uS
+7. Time Difference B, uS
+8. Speed Over Ground, Knots
+9. Track Made Good, degrees true
+10. Magnetic Variation, degrees
+11. E or W
+12. Checksum
+
+=== RMB - Recommended Minimum Navigation Information ===
+
+To be sent by a navigation receiver when a destination waypoint is active.
+
+------------------------------------------------------------------------------
+                                                             14
+        1 2   3 4    5    6       7 8        9 10  11  12  13|  15
+        | |   | |    |    |       | |        | |   |   |   | |   |
+ $--RMB,A,x.x,a,c--c,c--c,llll.ll,a,yyyyy.yy,a,x.x,x.x,x.x,A,m,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Status, A= Active, V = Void
+2. Cross Track error - nautical miles
+3. Direction to Steer, Left or Right
+4. TO Waypoint ID
+5. FROM Waypoint ID
+6. Destination Waypoint Latitude
+7. N or S
+8. Destination Waypoint Longitude
+9. E or W
+10. Range to destination in nautical miles
+11. Bearing to destination in degrees True
+12. Destination closing velocity in knots
+13. Arrival Status, A = Arrival Circle Entered
+14. FAA mode indicator (NMEA 2.3 and later)
+15. Checksum
+
+Example: $GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*0B
+
+=== RMC - Recommended Minimum Navigation Information ===
+
+This is one of the sentences commonly emitted by GPS units.
+
+------------------------------------------------------------------------------
+                                                          12
+        1         2 3       4 5        6  7   8   9    10 11|  13
+        |         | |       | |        |  |   |   |    |  | |   |
+ $--RMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,xxxx,x.x,a,m,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTC Time
+2. Status, V=Navigation receiver warning A=Valid
+3. Latitude
+4. N or S
+5. Longitude
+6. E or W
+7. Speed over ground, knots
+8. Track made good, degrees true
+9. Date, ddmmyy
+10. Magnetic Variation, degrees
+11. E or W
+12. FAA mode indicator (NMEA 2.3 and later)
+13. Checksum
+
+A status of V means the GPS has a valid fix that is below an internal
+quality threshold, e.g. because the dilution of precision is too high
+or an elevation mask test failed.
+
+Example: $GNRMC,001031.00,A,4404.13993,N,12118.86023,W,0.146,,100117,,,A*7B
+
+=== ROT - Rate Of Turn ===
+
+------------------------------------------------------------------------------
+        1   2 3
+        |   | |
+ $--ROT,x.x,A*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Rate Of Turn, degrees per minute, "-" means bow turns to port
+2. Status, A means data is valid
+3. Checksum
+
+Example: $HEROT,0.0,A*2B
+
+=== RPM - Revolutions ===
+
+------------------------------------------------------------------------------
+        1 2 3   4   5 6
+        | | |   |   | |
+ $--RPM,a,x,x.x,x.x,A*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Sourse, S = Shaft, E = Engine
+2. Engine or shaft number
+3. Speed, Revolutions per minute
+4. Propeller pitch, % of maximum, "-" means astern
+5. Status, A means data is valid
+6. Checksum
+
+
+=== RSA - Rudder Sensor Angle ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5
+        |   | |   | |
+ $--RSA,x.x,A,x.x,A*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Starboard (or single) rudder sensor, "-" means Turn To Port
+2. Status, A means data is valid
+3. Port rudder sensor
+4. Status, A means data is valid
+5. Checksum
+
+=== RSD - RADAR System Data ===
+
+------------------------------------------------------------------------------
+                                                        14
+        1   2   3   4   5   6   7   8   9   10  11 12 13|
+        |   |   |   |   |   |   |   |   |   |   |   | | |
+ $--RSD,x.x,x.x,x.x,x.x,x.x,x.x,x.x,x.x,x.x,x.x,x.x,a,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+(Some fields are missing from this description.)
+
+Field Number:
+1. Unknown
+2. Unknown
+3. Unknown
+4. Unknown
+5. Unknown
+6. Unknown
+7. Unknown
+8. Unknown
+9. Cursor Range From Own Ship
+10. Cursor Bearing Degrees Clockwise From Zero
+11. Range Scale
+12. Range Units
+13  Unknown
+14. Checksum
+
+=== RTE - Routes ===
+
+------------------------------------------------------------------------------
+        1   2   3 4    5           x    n
+        |   |   | |    |           |    |
+ $--RTE,x.x,x.x,a,c--c,c--c, ..... c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Total number of messages being transmitted
+2. Message Number
+3. Message mode
+     c = complete route, all waypoints
+     w = working route, the waypoint you just left, the waypoint
+     you're heading to, then all the rest
+4. Waypoint ID
+
+More waypoints follow.  Last field is a checksum as usual.
+
+The Garmin 65 and possibly other units report a $GPR00 in the same format.
+
+Example: $GPRTE,1,1,c,0*07
+
+=== SFI - Scanning Frequency Information ===
+
+------------------------------------------------------------------------------
+        1   2   3      4                     x
+        |   |   |      |                     |
+ $--SFI,x.x,x.x,xxxxxx,c .......... xxxxxx,c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+1. Total Number Of Messages
+2. Message Number
+3. Frequency 1
+4. Mode 1
+x. Checksum
+
+=== STN - Multiple Data ID ===
+
+This sentence is transmitted before each individual sentence where
+there is a need for the Listener to determine the exact source of data
+in the system. Examples might include dual-frequency depthsounding
+equipment or equipment that integrates data from a number of sources
+and produces a single output.
+
+------------------------------------------------------------------------------
+        1   2
+        |   |
+ $--STN,x.x,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Talker ID Number
+2. Checksum
+
+=== TDS - Trawl Door Spread Distance ===
+
+------------------------------------------------------------------------------
+         1  2 3
+         |  | |
+ $--TDS,x.x,M*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number)
+
+1. Distance between trawl doors
+2. Meters (0-300)
+3. Checksum.
+
+From <<GLOBALSAT>>.  Shown with a "@II" leader rather than "$GP".
+
+=== TFI - Trawl Filling Indicator ===
+
+------------------------------------------------------------------------------
+        1 2 3 4
+        | | | |
+ $--TFI,x,y,z*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field number:
+
+1. Catch sensor #1 (0 = off, 1 = on, 2 = no answer)
+2. Catch sensor #2 (0 = off, 1 = on, 2 = no answer)
+3. Catch sensor #3 (0 = off, 1 = on, 2 = no answer)
+
+From <<GLOBALSAT>>.  Shown with a "@II" leader rather than "$GP".
+
+=== TPC - Trawl Position Cartesian Coordinates ===
+
+------------------------------------------------------------------------------
+        1 2 3 4  5  6 7
+        | | | |  |  | |
+ $--TPC,x,M,y,P,z.z,M*hh,<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Horizontal distance from the vessel center line
+2. Meters
+3. Horizontal distance from the transducer to the trawl along the
+     vessel center line. The value is normally positive assuming the
+     trawl is located behind the vessel.
+4. Meters
+5. Depth of the trawl below the surface
+6. Meters
+7. Checksum
+
+From <<GLOBALSAT>>. Shown with a "@II" leader rather than "$GP".
+This entry actually merges their TPC description with another
+entry labeled (apparently incorrectly) TPT, which differs from the
+TPT shown below.
+
+=== TPR - Trawl Position Relative Vessel ===
+
+------------------------------------------------------------------------------
+        1 2 3 4  5  6 7
+        | | | |  |  | |
+ $--TPR,x,M,y,P,z.z,M*hh,<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Horizontal range relative to target
+2. Meters (0-4000)
+3. Bearing to target relative to vessel heading.  Resolution is one degree.
+4. Separator
+5. Depth of trawl below the surface
+6. Meters (0-2000)
+7. Checksum
+
+From <<GLOBALSAT>>. Shown with a "@II" leader rather than "$GP".
+
+=== TPT - Trawl Position True ===
+
+------------------------------------------------------------------------------
+        1 2 3 4  5  6 7
+        | | | |  |  | |
+ $--TPT,x,M,y,P,z.z,M*hh,<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Horizontal range relative to target
+2. Meters (0-4000)
+3. True bearing to taget (ie. relative north).  Resolution is one degree.
+4. Separator
+5. Depth of trawl below the surface
+6. Meters (0-2000)
+7. Checksum
+
+From <<GLOBALSAT>>. Shown with a "@II" leader rather than "$GP".
+
+=== TRF - TRANSIT Fix Data ===
+
+------------------------------------------------------------------------------
+                                                                    13
+        1         2      3       4 5        6 7   8   9   10  11  12|
+        |         |      |       | |        | |   |   |   |   |   | |
+ $--TRF,hhmmss.ss,xxxxxx,llll.ll,a,yyyyy.yy,a,x.x,x.x,x.x,x.x,xxx,A*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTC Time
+2. Date, ddmmyy
+3. Latitude
+4. N or S
+5. Longitude
+6. E or W
+7. Elevation Angle
+8. Number of iterations
+9. Number of Doppler intervals
+10. Update distance, nautical miles
+11. Satellite ID
+12. Data Validity
+13. Checksum
+
+(The TRF sentence is obsolete as of 2.3.0)
+
+=== TTM - Tracked Target Message ===
+
+------------------------------------------------------------------------------
+                                         11     13
+        1  2   3   4 5   6   7 8   9   10|    12| 14
+        |  |   |   | |   |   | |   |   | |    | | |
+ $--TTM,xx,x.x,x.x,a,x.x,x.x,a,x.x,x.x,a,c--c,a,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Target Number (0-99)
+2. Target Distance
+3. Bearing from own ship
+4. Bearing Units
+5. Target Speed
+6. Target Course
+7. Course Units
+8. Distance of closest-point-of-approach
+9. Time until closest-point-of-approach "-" means increasing
+10. "-" means increasing
+11. Target name
+12. Target Status
+13. Reference Target
+14. Checksum
+
+<<GLOBALSAT>> gives this in a slightly different form, with 14th and
+15th fields conveying time of observation and whether target
+acquisition was automatic or manual.
+
+=== VBW - Dual Ground/Water Speed ===
+
+------------------------------------------------------------------------------
+        1   2   3 4   5   6 7
+        |   |   | |   |   | |
+ $--VBW,x.x,x.x,A,x.x,x.x,A*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Longitudinal water speed, "-" means astern
+2. Transverse water speed, "-" means port
+3. Status, A = Data Valid
+4. Longitudinal ground speed, "-" means astern
+5. Transverse ground speed, "-" means port
+6. Status, A = Data Valid
+7. Checksum
+
+=== VDR - Set and Drift ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5   6 7
+        |   | |   | |   | |
+ $--VDR,x.x,T,x.x,M,x.x,N*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Degress True
+2. T = True
+3. Degrees Magnetic
+4. M = Magnetic
+5. Knots (speed of current)
+6. N = Knots
+7. Checksum
+
+=== VHW - Water speed and heading ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5   6 7   8 9
+        |   | |   | |   | |   | |
+ $--VHW,x.x,T,x.x,M,x.x,N,x.x,K*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Degress True
+2. T = True
+3. Degrees Magnetic
+4. M = Magnetic
+5. Knots (speed of vessel relative to the water)
+6. N = Knots
+7. Kilometers (speed of vessel relative to the water)
+8. K = Kilometers
+9. Checksum
+
+<<GLOBALSAT>> describes a different format in which the first three
+fields are water-temperature measurements.  It's not clear which
+is correct.
+
+=== VLW - Distance Traveled through Water ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5
+        |   | |   | |
+ $--VLW,x.x,N,x.x,N*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Total cumulative distance
+2. N = Nautical Miles
+3. Distance since Reset
+4. N = Nautical Miles
+5. Checksum
+
+=== VPW - Speed - Measured Parallel to Wind ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5
+        |   | |   | |
+ $--VPW,x.x,N,x.x,M*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Speed, "-" means downwind
+2. N = Knots
+3. Speed, "-" means downwind
+4. M = Meters per second
+5. Checksum
+
+=== VTG - Track made good and Ground speed ===
+
+This is one of the sentences commonly emitted by GPS units.
+
+------------------------------------------------------------------------------
+         1  2  3  4  5	6  7  8 9   10
+         |  |  |  |  |	|  |  | |   |
+ $--VTG,x.x,T,x.x,M,x.x,N,x.x,K,m,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Track Degrees
+2. T = True
+3. Track Degrees
+4. M = Magnetic
+5. Speed Knots
+6. N = Knots
+7. Speed Kilometers Per Hour
+8. K = Kilometers Per Hour
+9. FAA mode indicator (NMEA 2.3 and later)
+10. Checksum
+
+Note: in some older versions of NMEA 0183, the sentence looks like this:
+
+------------------------------------------------------------------------------
+         1  2  3   4  5
+         |  |  |   |  |
+ $--VTG,x.x,x,x.x,x.x,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. True course over ground (degrees) 000 to 359
+2. Magnetic course over ground 000 to 359
+3. Speed over ground (knots) 00.0 to 99.9
+4. Speed over ground (kilometers) 00.0 to 99.9
+5. Checksum
+
+The two forms can be distinguished by field 2, which will be
+the fixed text 'T' in the newer form.  The new form appears
+to have been introduced with NMEA 3.01 in 2002.
+
+Some devices, such as those described in <<GLOBALSAT>>, leave the
+magnetic-bearing fields 3 and 4 empty.
+
+Example: $GPVTG,220.86,T,,M,2.550,N,4.724,K,A*34
+
+=== VWR - Relative Wind Speed and Angle ===
+
+------------------------------------------------------------------------------
+         1  2  3  4  5  6  7  8 9
+         |  |  |  |  |  |  |  | |
+ $--VWR,x.x,a,x.x,N,x.x,M,x.x,K*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Wind direction magnitude in degrees
+2. Wind direction Left/Right of bow
+3. Speed
+4. N = Knots
+5. Speed
+6. M = Meters Per Second
+7. Speed
+8. K = Kilometers Per Hour
+9. Checksum
+
+=== WCV - Waypoint Closure Velocity ===
+
+------------------------------------------------------------------------------
+        1   2 3    4
+        |   | |    |
+ $--WCV,x.x,N,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Velocity
+2. N = knots
+3. Waypoint ID
+4. Checksum
+
+=== WNC - Distance - Waypoint to Waypoint ===
+
+------------------------------------------------------------------------------
+        1   2 3   4 5    6    7
+        |   | |   | |    |    |
+ $--WNC,x.x,N,x.x,K,c--c,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Distance, Nautical Miles
+2. N = Nautical Miles
+3. Distance, Kilometers
+4. K = Kilometers
+5. TO Waypoint
+6. FROM Waypoint
+7. Checksum
+
+=== WPL - Waypoint Location ===
+
+------------------------------------------------------------------------------
+	1       2 3        4 5    6
+        |       | |        | |    |
+ $--WPL,llll.ll,a,yyyyy.yy,a,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Latitude
+2. N or S (North or South)
+3. Longitude
+4. E or W (East or West)
+5. Waypoint name
+6. Checksum
+
+=== XDR - Transducer Measurement ===
+
+------------------------------------------------------------------------------
+        1 2   3 4            n
+        | |   | |            |
+ $--XDR,a,x.x,a,c--c, ..... *hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Transducer Type
+2. Measurement Data
+3. Units of measurement
+4. Name of transducer
+
+There may be any number of quadruplets like this, each describing a
+sensor.  The last field will be a checksum as usual.
+
+Example:
+
+$HCXDR,A,171,D,PITCH,A,-37,D,ROLL,G,367,,MAGX,G,2420,,MAGY,G,-8984,,MAGZ*41
+
+=== XTE - Cross-Track Error, Measured ===
+
+------------------------------------------------------------------------------
+        1 2 3   4 5 6   7
+        | | |   | | |   |
+ $--XTE,A,A,x.x,a,N,m,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Status
+     - V = Loran-C Blink or SNR warning
+     - V = general warning flag or other navigation systems when a reliable
+         fix is not available
+2. Status
+     - V = Loran-C Cycle Lock warning flag
+     - A = OK or not used
+3. Cross Track Error Magnitude
+4. Direction to steer, L or R
+5. Cross Track Units, N = Nautical Miles
+6. FAA mode indicator (NMEA 2.3 and later, optional)
+7. Checksum
+
+Example: $GPXTE,V,V,,,N,S*43
+
+=== XTR - Cross Track Error - Dead Reckoning ===
+
+------------------------------------------------------------------------------
+        1   2 3 4
+        |   | | |
+ $--XTR,x.x,a,N*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Magnitude of cross track error
+2. Direction to steer, L or R
+3. Units, N = Nautical Miles
+4. Checksum
+
+=== ZDA - Time & Date - UTC, day, month, year and local time zone ===
+
+This is one of the sentences commonly emitted by GPS units.
+
+------------------------------------------------------------------------------
+	1         2  3  4    5  6  7
+        |         |  |  |    |  |  |
+ $--ZDA,hhmmss.ss,xx,xx,xxxx,xx,xx*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. UTC time (hours, minutes, seconds, may have fractional subsecond)
+2. Day, 01 to 31
+3. Month, 01 to 12
+4. Year (4 digits)
+5. Local zone description, 00 to +- 13 hours
+6. Local zone minutes description, apply same sign as local hours
+7. Checksum
+
+Example: $GPZDA,160012.71,11,03,2004,-1,00*7D
+
+=== ZFO - UTC & Time from origin Waypoint ===
+
+------------------------------------------------------------------------------
+        1         2         3    4
+        |         |         |    |
+ $--ZFO,hhmmss.ss,hhmmss.ss,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Universal Time Coordinated (UTC)
+2. Elapsed Time
+3. Origin Waypoint ID
+4. Checksum
+
+=== ZTG - UTC & Time to Destination Waypoint ===
+
+------------------------------------------------------------------------------
+        1         2         3    4
+        |         |         |    |
+ $--ZTG,hhmmss.ss,hhmmss.ss,c--c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Universal Time Coordinated (UTC)
+2. Time Remaining
+3. Destination Waypoint ID
+4. Checksum
+
+=== Other sentences ===
+
+There is evidence for the existence of the following NMEA sentences
+on the Web:
+
+|======================================================
+|ACK - Alarm Acknowldgement
+|ADS - Automatic Device Status
+|AKD - Acknowledge Detail Alarm Condition
+|ALA - Set Detail Alarm Condition
+|ASD - Autopilot System Data
+|BEC - Bearing & Distance to Waypoint - Dead Reckoning
+|CEK - Configure Encryption Key Command
+|COP - Configure the Operational Period, Command
+|CUR - Water Current Layer
+|DCR - Device Capability Report
+|DDC - Display Dimming Control
+|DOR - Door Status Detection
+|DSC - Digital Selective Calling Information
+|DSE - Extended DSC
+|DSI - DSC Transponder Initiate
+|DSR - DSC Transponder Response
+|ETL - Engine Telegraph Operation Status
+|EVE - General Event Message
+|FIR - Fire Detection
+|MWD - Wind Direction & Speed
+|TLL - Target Latitude and Longitude
+|WDR - Distance to Waypoint - Rhumb Line
+|WDC - Distance to Waypoint - Great Circle
+|ZDL - Time and Distance to Variable Point
+|======================================================
+
+$CDDSC is described in <<CDDSC>>.
+
+== Vendor extensions ==
+
+This list is very incomplete.
+
+=== PASHR - RT300 proprietary roll and pitch sentence ===
+
+------------------------------------------------------------------------------
+         1           2   3    4      5      6     7     8     9  10 11 12
+         |           |   |    |      |      |     |     |     |   | |  |
+$PASHR,hhmmss.sss,hhh.hh,T,rrr.rr,ppp.pp,xxx.xx,a.aaa,b.bbb,c.ccc,d,e*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field number:
+
+1.  hhmmss.sss - UTC time
+2.  hhh.hh - Heading in degrees
+3.  T - flag to indicate that the Heading is True Heading (i.e. to True North)
+4.  rrr.rr - Roll Angle in degrees
+5.  ppp.pp - Pitch Angle in degrees
+6.  xxx.xx - Heave
+7.  a.aaa - Roll Angle Accuracy Estimate (Stdev) in degrees
+8.  b.bbb - Pitch Angle Accuracy Estimate (Stdev) in degrees
+9.  c.ccc - Heading Angle Accuracy Estimate (Stdev) in degrees
+10. d - Aiding Status
+11. e - IMU Status
+12. hh - Checksum
+
+<<PASHR>> describes this sentence as NMEA, though other sources say it
+is Ashtech proprietary and describe a different format.
+
+Example:
+
+$PASHR,085335.000,224.19,T,-01.26,+00.83,+00.00,0.101,0.113,0.267,1,0*06
+
+=== PGRME - Garmin Estimated Error ===
+
+------------------------------------------------------------------------------
+        1  2  3  4  5  6  7
+        |  |  |  |  |  |  |
+ $PGRME,hhh,M,vvv,M,ttt,M*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Estimated horizontal position error (HPE),
+2. M=meters
+3. Estimated vertical position error (VPE)
+4. M=meters
+5. Overall spherical equivalent position error
+6. M=meters
+7. Checksum
+
+Example: $PGRME,15.0,M,45.0,M,25.0,M*22
+
+=== PMGNST - Magellan Status ===
+
+------------------------------------------------------------------------------
+          1   2 3  4    5    6  7    8
+          |   | |  |    |    |  |    |
+ $PMGNST,xx.xx,m,t,nnn,xx.xx,nnn,nn,c
+------------------------------------------------------------------------------
+
+Field Number:
+
+1. Firmware version number?
+2. Mode (1 = no fix, 2 = 2D fix, 3 = 3D fix)
+3. T if we have a fix
+4. numbers change - unknown
+5. time left on the GPS battery in hours
+6. numbers change (freq. compensation?)
+7. PRN number receiving current focus
+8. nmea_checksum
+
+Only supported on Magellan GPSes.
+
+=== PRWIZCH - Rockwell Channel Status ===
+
+------------------------------------------------------------------------------
+ $PRWIZCH,n,s,n,s,n,s,n,s,n,s,n,s,n,s,n,s,n,s,n,s,n,s,n,s,c*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Fields consist of 12 pairs of a satellite PRN followed by a
+signal quality number in the range 0-7 (0 worst, 7 best).
+
+Only emitted by the now-obsolete Zodiac (Rockwell) chipset.
+
+=== PUBX 00 - u-blox Lat/Long Position Data ===
+
+------------------------------------------------------------------------------
+ $PUBX,00,hhmmss.ss,Latitude,N,Longitude,E,AltRef,NavStat,Hacc,Vacc,SOG,COG,Vvel,+ageC,HDOP,VDOP,TDOP,GU,RU,DR,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Example:
+
+$PUBX,00,081350.00,4717.113210,N,00833.915187,E,546.589,G3,2.1,2.0,0.007,77.52,0+.007,,0.92,1.19,0.77,9,0,0*5F<CR><LF>
+
+Only emitted by u-blox Antaris chipset.
+
+=== PUBX 01 - u-blox UTM Position Data ===
+
+The $PUBX,01 is a UTM (Universal Transverse Mercator projection) version
+of the $PUBX,00 sentence.
+
+------------------------------------------------------------------------------
+$PUBX,01,hhmmss.ss,Easting,E,Northing,N,AltMSL,NavStat,Hacc,Vacc,SOG,COG,Vvel,ag+eC,HDOP,VDOP,TDOP,GU,RU,DR,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Example:
+
+$PUBX,01,075142.00,467125.245,E,5236949.763,N,498.235,G3,2.1,1.9,0.005,85.63,0.0+00,,0.78,0.90,0.52,12,0,0*65
+
+Only emitted by u-blox Antaris chipset.
+
+=== PUBX 03 - u-blox Satellite Status ===
+
+------------------------------------------------------------------------------
+ $PUBX,03,GT{,ID,s,AZM,EL,SN,LK},*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Example:
+
+$PUBX,03,11,23,-,,,45,010,29,-,,,46,013,07,-,,,42,015,08,U,067,31,42,025,10,U,19+5,33,46,026,18,U,326,08,39,026,17,-,,,32,015,26,U,306,66,48,025,27,U,073,10,36,+026,28,U,089,61,46,024,15,-,,,39,014*0D
+
+Only emitted by u-blox Antaris chipset.
+
+(There's no PUBX 02)
+
+=== PUBX 04 - u-blox Time of Day and Clock Information ===
+
+------------------------------------------------------------------------------
+$PUBX,04,hhmmss.ss,ddmmyy,UTC_TOW,week,reserved,Clk_B,Clk_D,PG,*hh<CR><LF>
+------------------------------------------------------------------------------
+
+Example:
+
+$PUBX,04,073731.00,091202,113851.00,1196,113851.00,1930035,-2660.664,43,*3C<CR><+LF>
+
+Only emitted by u-blox Antaris chipset.
+
+=== TMVTD - Transas VTS / SML tracking system report ===
+
+------------------------------------------------------------------------------
+$TMVTD,DDMMYY,hhmmss.ss,a,xxxx,c—c,llll.llll,a,yyyyy.yyyy,a,x.x,a,x.x,a,a*hh<CR><LF>
+------------------------------------------------------------------------------
+
+‘TM’ indicates message generated by SML tracking system.  ‘VTD’ is
+name of the message.
+
+Field Number:
+
+1. Day/month/year (two-digit year, unknown base century)
+2. Hour/minute/second to 0.1 sec precion, UTC.
+3. ‘R’ indicates that this is an update for a radar track. No other
+   values are valid
+4. Internal unique ID number. Can’t be changed even when target is
+   re-identified
+5. Target alias. Can be changed when the target identification data is
+   edited.  Symbols “$”, “*” “,” and “.”  are not allowed to be used
+   within the alias word. This field is variable length, at most 21v
+   characters.
+6. Latitude in degrees (two leading digits) and decimal minutes
+   (trailing digits).
+7. N or S for North or South latitude.
+8. Longitude in degrees (three leading digits) and decimal minutes
+   (trailing digits).
+9. E or W for East or West longitude.
+10. Target course in decimal degrees.
+11. Fixed to T, indicates true course.
+12. Target speed in decimal knots.
+13. Fixed to N, indicates decimal speed in knots.
+14. T or D. T = tracked, D = dropped. Message with status
+    “dropped” is sent only once after target is dropped.
+15. NMEA checksum.
+
+Transas is a mnanufacturer of proprietary ECDIS systems.
+
+Described in <<MALTESE>>, actually a Maltese government document.
+
+== References ==
+
+[bibliography]
+- [[[BETKE]]]
+    "The NMEA 0183 protocol"
+    http://www.scribd.com/mcocco/d/6365285-The-NMEA-0183-Protocol
+    Probably the ancestor of this document. Compiled by Klaus Betke
+    and dated May 2000 with a revision in 2001.
+
+- [[[CANBUS]]]
+  "Wikipedia: CAN bus"
+  http://en.wikipedia.org/wiki/CAN_bus
+
+- [[[NMEA2000]]]
+  "Wikipedia: NMEA 2000"
+  http://en.wikipedia.org/wiki/NMEA_2000
+
+- [[[KEVERSOFT]]]
+  http://www.keversoft.com/downloads/packetlogger_20120305_explain.txt
+
+- [[[DEPRIEST]]]
+    "NMEA data"
+    http://www.gpsinformation.org/dale/nmea.htm
+    Used for PMGNST and the FAA mode code.
+
+- [[[MX521]]]
+    "MX521 GPS/DGPS Sensor Installation Manual"
+    http://www.mx-marine.com/downloads/MX521_Install_manual_051804.pdf
+    Used for GBS, GRS.
+
+- [[[MX535]]]
+    "MX535 UAIS Ship Borne Class A Transponder Unit Techical & Installation Manual"
+    http://www.mx-marine.com/downloads/mx535/MX535_Tech_Manual_Rev_E.pdf
+    Used for GNS.
+
+- [[[ZODIAC]]]
+    "Zodiac Serial Data Interface Specification"
+    http://users.rcn.com/mardor/serial.pdf
+    Used for PRWIZCH.
+
+- [[[GH79L4N]]]
+    "Specifications for GPS Receiver GH-79L4-N"
+    http://www.tecsys.de/db/gps/gh79l1an_intant.pdf
+    Used for GPDTM.
+
+- [[[GIDS]]]
+    "GPS - NMEA sentence information"
+    http://aprs.gids.nl/nmea/
+    Used for BWC, MSK, MSS.
+
+- [[[NMEAFAQ]]]
+    "The NMEA FAQ"
+    http://vancouver-webpages.com/peter/nmeafaq.txt
+    Used for R00.
+
+- [[[UNMEA]]]
+    "Understanding NMEA 0183"
+    http://pcptpp030.psychologie.uni-regensburg.de/trafficresearch/NMEA0183/
+    Source for the claim that NMEA requires undefined data fields to
+    be empty.
+
+- [[[NTUM]]]
+    "NemaTalker User Manual"
+    http://www.sailsoft.nl/NemaTalker/UserManual/InstrGPS.htm
+    Source for the claim that Mode Indicator dominates Status.
+
+- [[[IEC61162-1]]]
+    "International Standard IEC 61162-1" (preview)
+    http://domino.iec.ch/preview/info_iec61162-1%7Bed2.0%7Den.pdf
+
+- [[[SEATALK]]]
+    "SeaTalk Technical Reference"
+    http://www.thomasknauf.de/seatalk.htm
+
+- [[[SATSTAT]]] "NMEA IDs" https://github.com/mvglasow/satstat/wiki/NMEA-IDs
+
+- [[[GLOBALSAT]]]
+    "NMEA (National Marine Electronics Association) 0183 Protocol"
+    http://www.usglobalsat.com/faq_details/NMEA.htm
+
+- [[[PASHR]]]
+    "News - NMEA PASHR Output Format Added"
+    http://www.oxts.com/default.asp?pageRef=76&newsID=69
+
+- [[[WAAS]]]
+    "WAAS Information"
+    http://gpsinformation.net/exe/waas.html
+
+- [[[PPS]]]
+    "Pulse per second"
+    http://en.wikipedia.org/wiki/Pulse_per_second
+
+- [[[MALTESE]]]
+  "Procurement of a Fixed-Wing Maritime Patrol Aircraft"
+  https://secure2.gov.mt/eprocurement/Tenders/file.ashx?f=9832DB05E65C774258580284031EC72CC315D954A7108B5E.
+
+- [[NMEA-ADVANCE]]
+  "NMEA 0183 Advancements" (describes 'P' value of FAA mode)
+  http://www.nmea.org/Assets/0183_advancements_nmea_oct_1_2010%20(2).pdf
+
+- [[CDDSC]]
+  "Data Interface in Digital Selective Calling Class-D Radios"
+  http://continuouswave.com/whaler/reference/DSC_Datagrams.html
+
+- [[ANON]]
+  Anonymous commentator(s) are persons who have volunteered information
+  about the NMEA standard(s) but do not wish to be identified.
+
+- [[[NORWAY]]]
+  "Etterretninger for sjøfarende" Notoces for Mariners, see p26
+  http://kartverket.no/efs-documents/editions/2015/efs01-2015.pdf
-- 
cgit v1.2.1

