summaryrefslogtreecommitdiff
path: root/html/drivers/driver20.html
diff options
context:
space:
mode:
Diffstat (limited to 'html/drivers/driver20.html')
-rw-r--r--html/drivers/driver20.html204
1 files changed, 154 insertions, 50 deletions
diff --git a/html/drivers/driver20.html b/html/drivers/driver20.html
index 6391e869359f..1c3ac782f768 100644
--- a/html/drivers/driver20.html
+++ b/html/drivers/driver20.html
@@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Generic NMEA GPS Receiver</title>
- <!-- Changed by: Harlan &, 31-Mar-2014 -->
+ <!-- Changed by: Pearly &, 04-Feb-2019 -->
<link href="scripts/style.css" type="text/css" rel="stylesheet">
<style type="text/css">
table.dlstable { font-size:85%; }
@@ -13,7 +13,7 @@
<body>
<h3>Generic NMEA GPS Receiver</h3>
<p>Last update:
- <!-- #BeginDate format:En2m -->31-Mar-2014 03:55<!-- #EndDate -->
+ <!-- #BeginDate format:En2m -->13-Jan-2020 07:12<!-- #EndDate -->
UTC</p>
<hr>
<h4>Synopsis</h4>
@@ -41,6 +41,9 @@
second insertion in UTC.&nbsp; To avoid problems mixing UTC and GPS
timescales, the driver disables processing of UTC sentences
once <tt>$GPZDG</tt> is received.
+ <br>
+ <strong>Caveat:</strong> Please see <a href="#talkerids">Talker
+ IDs</a> when using non-GPS or multi-system receivers.
</p>
<p>
The driver expects the receiver to be set up to transmit at least one
@@ -80,7 +83,14 @@
</tr><tr>
<td class="ttf">$GPZDG,GPSTIME,DD,MM,YYYY,AA.BB,V*CS&lt;cr&gt;&lt;lf&gt;</td>
<td>Accord</td>
- </tr>
+ </tr><tr>
+ </tr><tr>
+ <td class="ttf">$PGRMF,gpsWk,gpsTow,DATE,UTC,LEAPS,LAT,LAT_REF,LON,LON_REF,TYPE,MODE,SPD,HDOP,TDOP*CS&lt;cr&gt;&lt;lf&gt;</td>
+ <td>Garmin</td>
+ </tr><tr>
+ <td class="ttf">$PUBX,04,UTC,DATE,utcTow,utcWk,LEAPS,clkBias,clkDrift,tpGran,*CS&lt;cr&gt;&lt;lf&gt;</td>
+ <td>UBLOX</td>
+ </tr>
</tbody></table></p>
<p><table class="dlstable" border="1">
@@ -91,78 +101,96 @@
</tr>
<tr>
- <td class="ttf">UTC</td>
- <td>Time of day on UTC timescale. Hours, minutes and seconds [fraction (opt.)]. (hhmmss[.fff])</td>
+ <td class="ttf">ALT</td>
+ <td>Antenna Altitude</td>
</tr><tr>
- <td class="ttf">POS_STAT</td>
- <td>Position status. (A = Data valid, V = Data invalid)</td>
+ <td class="ttf">ALT_UNIT</td>
+ <td>Altitude Units (Metres/Feet)</td>
</tr><tr>
- <td class="ttf">LAT</td>
- <td>Latitude (llll.ll)</td>
+ <td class="ttf">DATE</td>
+ <td>Date (ddmmyy)</td>
</tr><tr>
- <td class="ttf">LAT_REF</td>
- <td>Latitude direction. (N = North, S = South)</td>
+ <td class="ttf">DD</td>
+ <td>Day of the month (1-31)</td>
</tr><tr>
- <td class="ttf">LON</td>
- <td>Longitude (yyyyy.yy)</td>
+ <td class="ttf">D_AGE</td>
+ <td>Age of last DGPS Fix</td>
</tr><tr>
- <td class="ttf">LON_REF</td>
- <td>Longitude direction (E = East, W = West)</td>
+ <td class="ttf">D_REF</td>
+ <td>Reference ID of DGPS station</td>
</tr><tr>
- <td class="ttf">SPD</td>
- <td>Speed over ground. (knots) (x.x)</td>
+ <td class="ttf">FIX_MODE</td>
+ <td>Position Fix Mode (0 = Invalid, &gt;0 = Valid)</td>
</tr><tr>
- <td class="ttf">HDG</td>
- <td>Heading/track made good (degrees True) (x.x)</td>
+ <td class="ttf">GEO</td>
+ <td>Geoid/Elipsoid separation</td>
</tr><tr>
- <td class="ttf">DATE</td>
- <td>Date (ddmmyy)</td>
+ <td class="ttf">GPSTIME</td>
+ <td>Time of day on GPS timescale. Hours, minutes and seconds [fraction (opt.)] (hhmmss[.f])</td>
</tr><tr>
- <td class="ttf">MAG_VAR</td>
- <td>Magnetic variation (degrees) (x.x)</td>
+ <td class="ttf">gpsTow</td>
+ <td>GPS week time, seconds since start of GPS week (0..604799)</td>
</tr><tr>
- <td class="ttf">MAG_REF</td>
- <td>Magnetic variation (E = East, W = West)</td>
+ <td class="ttf">gpsWk</td>
+ <td>Week number in the GPS time scale (may exceed 1024)</td>
</tr><tr>
- <td class="ttf">FIX_MODE</td>
- <td>Position Fix Mode (0 = Invalid, &gt;0 = Valid)</td>
+ <td class="ttf">G_UNIT</td>
+ <td>Geoid units (M/F)</td>
</tr><tr>
- <td class="ttf">SAT_USED</td>
- <td>Number of Satellites used in solution</td>
+ <td class="ttf">HDG</td>
+ <td>Heading/track made good (degrees True) (x.x)</td>
</tr><tr>
<td class="ttf">HDOP</td>
<td>Horizontal Dilution of Precision</td>
</tr><tr>
- <td class="ttf">ALT</td>
- <td>Antenna Altitude</td>
- </tr><tr>
- <td class="ttf">ALT_UNIT</td>
- <td>Altitude Units (Metres/Feet)</td>
+ <td class="ttf">LAT</td>
+ <td>Latitude (llll.ll)</td>
</tr><tr>
- <td class="ttf">GEO</td>
- <td>Geoid/Elipsoid separation</td>
+ <td class="ttf">LAT_REF</td>
+ <td>Latitude direction (N = North, S = South)</td>
</tr><tr>
- <td class="ttf">G_UNIT</td>
- <td>Geoid units (M/F)</td>
+ <td class="ttf">LEAPS</td>
+ <td>Leap seconds or difference between GPS time scale and UTC</td>
</tr><tr>
- <td class="ttf">D_AGE</td>
- <td>Age of last DGPS Fix</td>
+ <td class="ttf">LON</td>
+ <td>Longitude (yyyyy.yy)</td>
</tr><tr>
- <td class="ttf">D_REF</td>
- <td>Reference ID of DGPS station</td>
+ <td class="ttf">LON_REF</td>
+ <td>Longitude direction (E = East, W = West)</td>
</tr><tr>
- <td class="ttf">GPSTIME</td>
- <td>Time of day on GPS timescale. Hours, minutes and seconds [fraction (opt.)]. (hhmmss[.f])</td>
+ <td class="ttf">MAG_REF</td>
+ <td>Magnetic variation (E = East, W = West)</td>
</tr><tr>
- <td class="ttf">DD</td>
- <td>Day of the month (1-31)</td>
+ <td class="ttf">MAG_VAR</td>
+ <td>Magnetic variation (degrees) (x.x)</td>
</tr><tr>
<td class="ttf">MM</td>
<td>Month of the year (1-12)</td>
</tr><tr>
+ <td class="ttf">POS_STAT</td>
+ <td>Position status. (A = Data valid, V = Data invalid)</td>
+ </tr><tr>
+ <td class="ttf">SAT_USED</td>
+ <td>Number of Satellites used in solution</td>
+ </tr><tr>
+ <td class="ttf">SPD</td>
+ <td>Speed over ground. (knots) (x.x)</td>
+ </tr><tr>
+ <td class="ttf">UTC</td>
+ <td>Time of day on UTC timescale. Hours, minutes and seconds [fraction (opt.)] (hhmmss[.fff])</td>
+ </tr><tr>
<td class="ttf">YYYY</td>
<td>Year</td>
</tr><tr>
+ <td class="ttf">WEEK</td>
+ <td>GPS week (0-1023)</td>
+ </tr><tr>
+ <td class="ttf">WSEC</td>
+ <td>Seconds since start of week (0-604799)</td>
+ </tr><tr>
+ <td class="ttf">LEAP</td>
+ <td>GPS leap seconds, that is, seconds ahead of UTC</td>
+ </tr><tr>
<td class="ttf">AA.BB</td>
<td>Denotes the signal strength (should be &lt; 05.00)</td>
</tr><tr>
@@ -181,6 +209,36 @@
</tbody></table></p>
+ <h4><a name="talkerids"/>NMEA Talker IDs</h4>
+
+ <p>
+ GNSS receivers use a distinct talker ID for the GNSS they
+ process. Receivers capable of tracking different systems at the same time
+ can emit <tt>$GPRMC</tt> (GPS), <tt>$GLRMC</tt> (GLONASS),
+ <tt>$GARMC</tt> (Galileo), <tt>$GNRMC</tt> (generic/combined) and others
+ all in one data stream.
+ </p><p>
+ The driver supports this to a certain degree by ignoring the
+ talker ID on the standard sentences RMC, GLL, GGA, ZDA and ZDG. (It
+ possibly should not do that on the latter, but for now, that's the way
+ it is.) So whenever <tt>$GPRMC</tt> is mentioned in this document,
+ substitute any possible talker ID your receiver might emit -- it will
+ still match.
+ </p><p>
+ This approach has a drawback. It is easy to use for single-system
+ receivers, but it cannot separate the data streams for multi-system
+ receiver modules. It is therefore undefined which GNSS actually
+ provides the data, and this can lead to strange behavior. This is
+ especially true if the different GNSS provide very different signal
+ quality to the receiver; the driver is not able to cherry-pick the best
+ source and might actually end up in using the worst available. It is
+ therefore recommended to set up such a receiver to either use just a
+ single GNSS (which would defeat its purpose) or to emit only the
+ combined data, which usually has the <tt>GN</tt> talker ID defined by
+ the NMEA standard.
+ <p>
+
+
<h4>The 'mode' byte</h4>
<p>
@@ -202,7 +260,7 @@
<td align="center">0</td>
<td align="center">1</td>
<td align="center">1</td>
- <td>process <tt>$GPMRC</tt></td>
+ <td>process <tt>$GPRMC</tt></td>
</tr><tr>
<td align="center">1</td>
<td align="center">2</td>
@@ -259,9 +317,14 @@
<td align="center">0x100</td>
<td>process <tt>$PGRMF</tt></td>
</tr><tr>
- <td align="center">9-15</td>
+ <td align="center">9</td>
+ <td align="center">512</td>
+ <td align="center">0x200</td>
+ <td>process <tt>$PUBX,04</tt></td>
+ </tr><tr>
+ <td align="center">10-15</td>
<td align="center"></td>
- <td align="center">0xFE00</td>
+ <td align="center">0xFC00</td>
<td>reserved - leave 0</td>
</tr><tr>
<td align="center">16</td>
@@ -269,6 +332,24 @@
<td align="center">0x10000</td>
<td>Append extra statistics to the clockstats line.
Details below.</td>
+ </tr><tr>
+ <td align="center">17</td>
+ <td align="center">131072</td>
+ <td align="center">0x20000</td>
+ <td>"Silent PPS" mode. Use the PPS channel (if enabled with
+ fudge flag 1) to get precise receive time stamps.
+ Do <em>not</em> set the PPS flag in the clock status, so the
+ clock is not considered as PPS peer.
+ </td>
+ </tr><tr>
+ <td align="center">18</td>
+ <td align="center">262144</td>
+ <td align="center">0x40000</td>
+ <td>Trust the date delivered via NMEA. Do this only if
+ you <em>really</em> trust the receiver!
+ See <a href="#datetrust">below</a>. <strong>Caveat:</strong>
+ This (hitherto undocumented) bit has moved!
+ </td>
</tr>
</tbody></table>
@@ -291,7 +372,7 @@
</li></ul>
The driver uses 4800 bits per second by default, but faster bitrates can
be selected using bits 4 to 6 of the mode field.
- <p></p>
+ </p>
<p>
<strong>Caveat:</strong> Using higher line speeds does not necessarily
@@ -306,6 +387,29 @@
linespeed of 4800 bps or 9600 bps.
</p>
+ <h4><a name="datetrust"/>About distrusting NMEA date stamps</h4>
+ <p>
+ Trusting the calendar dates delivered via NMEA is a risky thing, and by
+ default these dates are handled with a huge dose of skepticism. Many
+ receivers deliver a correct calendar date for a period of just 1024 weeks,
+ with a starting point baked somewhere into their firmware. Beyond that,
+ they warp back to the begin of their era and simply provide wrong date
+ information. To battle this widely observed effect, the date delivered is
+ by default reduced to GPS time again and then (re-)mapped according to the
+ base date, either the implicit value or the value set via "tos basedate".
+ If the receiver can <em>really</em> be trusted to deliver the right date
+ (which is not impossible, just more expensive for the manufacturer), then
+ mode bit 18 can be used to bypass the era mapping. Setting this bit is
+ not needed under most circumstances, and setting it with an unreliable
+ receiver can have severe effects. Handle with care.
+ </p><p>
+ <strong>Note:</strong> This functionality was available for some time as
+ undocumented feature, with a different bit value. It was moved in the
+ process of becoming officially acknowledged to avoid excessive scattering
+ of the mode bit mask.
+ </p>
+
+
<h4>Monitor Data</h4>
<p>The last GPS sentence that is accepted or rejected is written to the