gps-hacking.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head lang="en">
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <meta name="Author" content="Eric S. Raymond">
  6. <meta name="Description" content="A gentle introduction to writing GPS-aware applications">
  7. <meta name="Keywords" content="GPS, gpsd, hacking, applications">
  8. <meta name="Revised" content="9 April 2015">
  9. <meta name="robots" content="index,follow">
  10. <link rel="stylesheet" href="main.css" type="text/css">
  11. <title>ESR's Guide to Hacking With GPS</title>
  12. </head>
  13. <body>
  14. <div id="Header">ESR's Guide to Hacking With GPS</div>
  15. <div id="Menu">
  16. <img src="gpsd-logo-small.png" alt="Small gpsd Logo" height="126"
  17. width="105"><br>
  18. <a href="index.html">Home</a><br>
  19. <a href="index.html#news">News</a><br>
  20. <a href="index.html#install">Installation &amp; Building</a><br>
  21. <a href="index.html#downloads">Downloads</a><br>
  22. <a href="index.html#mailing-lists">Mailing lists</a><br>
  23. <a href="index.html#documentation">Documentation</a><br>
  24. <a href="faq.html">FAQ</a><br>
  25. <a href="xgps-sample.html">Screenshots</a><br>
  26. <a href="index.html#recipes">Recipes</a><br>
  27. <a href="index.html#others">Other GPSDs</a><br>
  28. <a href="hardware.html">Hardware</a><br>
  29. <a href="for-vendors.html">For GPS Vendors</a><br>
  30. <a href="wishlist.html">Wish List</a><br>
  31. <a href="hall-of-shame.html">Hall of Shame</a><br>
  32. <a href="troubleshooting.html">Troubleshooting Guide</a><br>
  33. <a href="hacking.html">Hacker's Guide</a><br>
  34. <a href="protocol-transition.html">Application Compatibility</a>
  35. <a href="references.html">References</a><br>
  36. <a href="history.html">History</a><br>
  37. <a href="future.html">Future</a><br>
  38. <div>&nbsp;</div>
  39. <a href='http://www.catb.org/hacker-emblem/'><img
  40. src='glider.png' alt='hacker emblem' height="55" width="55"></a><br>
  41. <script src="https://www.openhub.net/p/3944/widgets/project_thin_badge.js"></script>
  42. <hr>
  43. <script><!--
  44. google_ad_client = "pub-1458586455084261";
  45. google_ad_width = 160;
  46. google_ad_height = 600;
  47. google_ad_format = "160x600_as";
  48. google_ad_type = "text";
  49. google_ad_channel = "";
  50. //--></script>
  51. <script src="https://pagead2.googlesyndication.com/pagead/show_ads.js">
  52. </script>
  53. <hr>
  54. <a href="https://validator.w3.org/check/referer"><img
  55. src="html5.png"
  56. alt="Valid HTML 5!" height="31" width="88"></a>
  57. </div>
  58. <div id="Content">
  59. <p>This is a gentle introduction to writing GPS-aware applications
  60. &mdash; or, How I Stopped Worrying And Learned To Love Spherical
  61. Trigonometry. It will explain the capabilities and limitations of GPS
  62. hardware and the <code>gpsd</code> software that you need to know about when
  63. writing location-aware applications.</p>
  64. <p>We'll go from general to specific, beginning with an overview of how
  65. GPS works and ending with architectural suggestions about how to use
  66. <code>gpsd</code> to make your application location-aware.</p>
  67. <h1>How GPS Works</h1>
  68. <p>First, the basics of how GPS works. It depends on the fact that
  69. satellite orbits can be modelled accurately. A GPS receiver is a
  70. combination of a radio receiver and computer that receives timing
  71. signals and orbit information from GPS satellites, and in particular
  72. can compute exactly where each satellite will be at any given time
  73. with respect to the fixed Earth. (For those of you who enjoy such
  74. details, what they actually predict is each satellite's position with
  75. respect to a coordinate system known as WGS84 which closely fits the
  76. mean sea level of Earth.)</p>
  77. <p>Although the term <strong>GPS</strong> properly refers only to the
  78. system operated by the United States Air Force (also
  79. called <strong>NAVSTAR</strong>, it is sometimes used loosely to refer
  80. to similar systems. We use the accepted term <strong>Global
  81. Navigation Satellite System (GNSS)</strong> to refer to all
  82. satellite-based navigation systems. The main systems other than GPS
  83. are GLONASS (Russia), Galileo (EU) and BeidDou (China). Because
  84. the <strong>gpsd</strong> project originated when GPS was the
  85. overwhelmingly dominant paradigm, many parts of the documentation and
  86. code refer to GPS when GNSS is more accurate. Our intent is to adjust
  87. the documentation and to leave the code alone because there is a real
  88. cost to changing code.</p>
  89. <p>This paragraph and much of the following text is specific to
  90. GPS/NAVSTAR, but the principles largely apply to other systems.
  91. There are presently about 30 dedicated Navstar satellites (full coverage
  92. can be achieved with 24), twenty thousand km (twelve thousand miles),
  93. up in high-inclination orbits, so that each one's trajectory wraps around
  94. the Earth like a ball of yarn as the planet spins beneath them. The
  95. inclinations are tuned to guarantee that about twelve will be visible
  96. at any given time from anywhere on Earth (coverage falls off a little
  97. at high latitudes).</p>
  98. <p>You can look at a very nifty <a
  99. href="http://rhp.detmich.com/gps.html">simulation</a>
  100. of Navstar satellite orbits. (Requires Java, also includes
  101. GLONASS, the Russian military equivalent).</p>
  102. <p>Each satellite broadcasts identification pulses, each one including
  103. the clock time it was sent. A GPS receiver, picking up these
  104. pulses, and knowing the speed of light, can recover its
  105. 4-dimensional location (Latitude, Longitude, Altitude, and Time).
  106. Ideally, you would need to solve four simultaneous equations with
  107. the four unknowns, so would need four visible satellites. This
  108. is known as a <strong>3D</strong> fix. Computing the GPS's exact
  109. position with respect to the satellites becomes a relatively
  110. simple if tedious exercise in spherical trigonometry (which,
  111. fortunately, the GPS's firmware does for you).
  112. Note that the GPS receiver does <b>not</b> need to know its own time
  113. or location to begin with.</p>
  114. <p>An excellent introduction is available at:
  115. <a href="http://electronics.howstuffworks.com/gadgets/travel/gps.htm">How GPS Receivers Work</a>, see page 4 in particular.
  116. <p>That's the theory. In practice, the system has important limits.
  117. Anything, natural or artificial, that messes with the signal timings
  118. will degrade the accuracy of your position fix. Until it was
  119. abolished by Presidential decree in 2000, the most important limit was
  120. artificial, the so-called 'Selective Availability' feature. The
  121. satellites were programmed to introduce patterned timing jitter into
  122. the signals. The U.S. military knew the pattern, but nobody else did
  123. (or, at least, nobody who was admitting it).</p>
  124. <p>In Sep 2007 the U.S. government announced that the future generation
  125. of GPS satellites, known as GPS III, will be without the SA feature.
  126. Doing this will make the policy decision of 2000 permanent.
  127. The important limits are on accuracy are now due to physics.
  128. One is a variable amount of signal lag produced as the GPS
  129. signals pass through the ionosphere and troposphere, which partly
  130. refracts radio waves. This can be largely compensated for by a
  131. technique called "Differential GPS" (DGPS). Ground-based reference
  132. stations are established in well-surveyed locations, and compare
  133. measured ranges (pseudoranges to be precise) with their calculated
  134. values. These errors account for unknown propagation delays, clock
  135. errors, and any other unmodeled errors. The reference stations can
  136. then tell nearby GPS receivers the required corrections, which are
  137. then applied to observed pseudoranges before computing a position.
  138. This information may be broadcast via radio (called "Ground Based
  139. Augmentation Systems"), or via satellites (called "Space Based
  140. Augmentation Systems").
  141. See <a href="#dgps">DGPS and friends</a> for details on how this
  142. works.</p>
  143. <p>In practice, the most important limit on accuracy is the actual
  144. visibility of satellites. A timing signal has to be fairly strong and
  145. clear, with little noise or distortion, before a GPS can use it. The
  146. frequencies GPS has to use in order to punch through the ionosphere
  147. with minimal attenuation (unlike conventional radio and TV signals)
  148. don't cope well with solid barriers. Thus, GPS tends to work poorly
  149. if at all inside buildings. Tall trees and tall buildings can mess it
  150. up, blocking line of sight to satellites that aren't nearly directly
  151. overhead.</p>
  152. <p>Accuracy also falls off a bit when you're in motion. This isn't a
  153. physical effect, but mostly due to the fact that computation always
  154. takes a little time; by the time the GPS figures out where you are,
  155. you're not there any more.</p>
  156. <p>Another limit, implicit in the geometry, is that GPS is relatively
  157. poor at getting your precise altitude. When you can get a signal lock
  158. on four satellites, a modern GPS will give you longitude and latitude
  159. within about 10 meters or yards, down to 2 with DGPS correction. Vertical
  160. uncertainty will be much higher, as much as fifty meters.</p>
  161. <p>People who really <a
  162. href="http://www.wsrcc.com/wolfgang/gps/accuracy.html">obsess</a>
  163. about GPS accuracy quote it not as a single figure but as a
  164. probability-of-error: e.g., you're within 10 meters 95% of the
  165. time and 2 meters 50% of the time.</p>
  166. <h1 id='dgps'>DGPS and friends</h1>
  167. <p>DGPS requires out-of-band communication with a service
  168. providing GPS signal correction information to make the GPS
  169. positioning more accurate. There are two ways of communicating
  170. this in real-time, GBAS and SBAS. An example of GBAS is the National
  171. Differential GPS system (NDGPS) in the US, transmitting corrections
  172. around 300 kHz. There are similar systems all over
  173. the worldwide, usually run by maritime navigation authorities. A
  174. disadvantage of these systems is that consumer GPSes do not
  175. listen on these frequencies, so this information is not really
  176. available to them. Another example is the system being installed
  177. at airports worldwide, to enable precision landing. Coverage for both
  178. these system types is between 30km and 40km.</p>
  179. <p>Examples of SBAS include WAAS (US), EGNOS (Europe), GAGAN (India),
  180. and MSAS and QZSS (Japan). These systems are almost identical
  181. in their operation. They provide DGPS corrections with
  182. in-band communication &mdash; geo-stationary satellites broadcasting
  183. GPS signal correction information on the same frequency and format as the
  184. GPS satellites. The system makes GPSes more accurate,
  185. and adds integrity checks making it possible to detect when the
  186. GPS location is totally wrong. Unlike GBAS, your GPS will generally
  187. use these systems automatically whenever it can see the satellites.</p>
  188. <p>SBAS data starts out as normal DGPS stations observing the
  189. errors. That data gets processed and interpolated into a grid which
  190. models ionospheric and tropospheric delay over the SBAS coverage
  191. area. The GPSes then interpolate into that grid to get an estimate of
  192. lag for their current position. Accuracy will vary based on how
  193. close a GPS is to a DGPS station.
  194. </p>
  195. <p>SBAS systems have wider coverage areas than GBAS, but still
  196. not worldwide; as can be seen from the list above, each country
  197. has a system covering its area of interest. See
  198. <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/SBAS_Service_Areas.png/800px-SBAS_Service_Areas.png">SBAS Service Areas</a>.
  199. </p>
  200. <p>Note that DGPS improves accuracy in <b>both</b> position and time,
  201. the two are intrinsically related.
  202. <h1>How GPS Hardware Talks To Computers</h1>
  203. <p>From a software designer's point of view, a GPS receiver is an
  204. oracle that tells you its location whenever it can get line-of-sight
  205. to four satellites. Our next topic is how it gets that information
  206. to a computer in a form your application can use.</p>
  207. <p>Almost all GPSes are serial devices that use either RS-232C or USB
  208. to communicate with the host machine. Most track a standard called
  209. NMEA 0183 which prescribes both electrical signal levels and a data
  210. encoding. The protocol is bidirectional, but designed in the expectation
  211. that most of the traffic will be GPS-to-computer, with commands
  212. going in the computer-to-GPS direction rare.</p>
  213. <p>The modern trend in GPSes is away from RS232C and towards USB. USB
  214. GPSes keep the NMEA data protocol but discard the NMEA link layer. Under
  215. Linux, USB GPSes use the usbserial module and look like serial ports.
  216. Part of <code>gpsd</code>'s job is to hide this stuff; applications don't have
  217. to be aware of NMEA or the link layer, they just query <code>gpsd</code> for
  218. information.</p>
  219. <h2>The good news about NMEA</h2>
  220. <p>The basic design of the NMEA data protocol is very simple. The GPS
  221. throws ASCII text lines called 'sentences', each beginning with a '$'
  222. and terminated by CR/LF, at the host machine. Usually the host gets
  223. one update a second, but the GPS has the option of sending more
  224. frequently when it detects a change of position or velocity or status.
  225. The standard prescribes a serial encoding at 4800bps, 8 bits, one stop
  226. bit, no parity; although most consumer receivers use 9600bps.</p>
  227. <p>Here are some sample NMEA sentences:</p>
  228. <pre><code>
  229. $GPGGA,212734,4740.0569,N,12219.6612,W,1,08,74.00,73.9,M,638.000000,M,,*6D
  230. $GPRMC,212734,A,4740.0569,N,12219.6612,W,0.000000,0.000000,020403,18.936255,E*60
  231. $GPGSA,A,3,17,06,23,15,16,18,10,30,,,,,152.00,74.00,133.00*3F
  232. $GPGGA,212735,4740.0569,N,12219.6612,W,1,08,74.00,74.1,M,638.000000,M,,*63
  233. $GPRMC,212735,A,4740.0569,N,12219.6612,W,0.000000,0.000000,020403,18.936255,E*61
  234. </code></pre>
  235. <p>Each sentence consists of a comma-separated fields. The first
  236. field is always a message type and the last a checksum that can be
  237. used to check for data corruption. Interpreting NMEA sentences is not
  238. complicated. Modulo a few glitches like 2-digit year numbers, the NMEA
  239. standard does a pretty good job of specifying a message set for GPSes
  240. that want to convey data to computers.</p>
  241. <p>More good news: you should never have to deal with this level
  242. &mdash; <code>gpsd</code>'s purpose is to insulate you from it.</p>
  243. <h2>The bad news about NMEA</h2>
  244. <p>That's the good news. Now for the bad news, which comes in five
  245. pieces:</p>
  246. <p>First, the NMEA standard does <em>not</em> specify a command
  247. repertoire for the opposite direction. Thus, functions like changing
  248. the GPS's update frequency or selecting the subset of sentences for it
  249. to send are often not supported at all, and when they are it's all by
  250. sentences that are vendor-specific.</p>
  251. <p>This used to be more of a problem than it is today. Early GPSes
  252. tended to have elaborate facilities for accepting lists of waypoints
  253. and sending back course information to help you navigate to them.
  254. Modern high-end units still do, but the GPSes designed for connecting
  255. to computers are increasingly designed on the assumption that the host
  256. computer will do all the waypoint geometry itself and the GPSes only
  257. job is to deliver periodic position and velocity readings. Thus, they
  258. tend to have no control codes at all. This makes them laudably
  259. stupid.</p>
  260. <p>Second, vendors don't stick to the NMEA-prescribed 4800bps data
  261. rate. This is understandable; 4800 is very slow by today's standards,
  262. and by boosting bits per second they can deliver information that's
  263. fresher by a few milliseconds (which might make a difference if, say,
  264. you're using a GPS-enabled autopilot to land an aircraft). Some GPSes
  265. feature data rates upwards of 38400bps. However, this actually does
  266. little good unless the application polls the GPS at a rate faster than
  267. 1Hz rather than waiting for it, as most GPS receivers cannot be told to
  268. ship updates faster than once per second &mdash; and the polling
  269. commands (when they exist at all) are proprietary. And the fact that
  270. GPSes don't have a single data rate graven in stone brings back all
  271. the well-known baud-mismatch configuration problems we thought we'd
  272. left behind in the 1980s.</p>
  273. <p>The third problem with NMEA is that it's not universal. A
  274. decreasing but still significant percentage of GPSes use proprietary
  275. binary protocols. For example, there was a GPS chipset called
  276. "Zodiac" made by Rockwell International, that used to be very widely
  277. OEMed by GPS makers. It spoke NMEA, but had irritating limitations in
  278. that mode like not being able to accept DGPS corrections. It
  279. preferred a tight-packed binary protocol. There haven't been any new
  280. Zodiac-based designs in a few years, but a lot of Zodiac-based
  281. GPSes (like the DeLorme EarthMates made before they switched over to a
  282. SiRF chipset in 2003) are still around.</p>
  283. <p>2004's equivalent of the Zodiac is the SiRF-II chipset, which seems
  284. to be nearly ubiquitous in inexpensive GPS receivers. It too speaks
  285. a binary protocol, but only if you ask it to; it's fully capable
  286. in NMEA mode. Which is where it boots up. The idea seems to be
  287. that you can switch to binary to improve your bits-per-second
  288. in latency-critical applications.</p>
  289. <p>The fourth problem with NMEA is that it doesn't deliver all the
  290. information that the GPS has in one atomic message. In particular,
  291. you can't get altitude (delivered in the GPGGA sentence only) and speed
  292. (delivered in GPRMC and GPVTG) at the same time. This is annoying;
  293. ideally, you want your position/velocity/time oracle to deliver one
  294. observation tuple conveying all seven degrees of freedom (t, x, y, z,
  295. vx, vy, vz) and their error estimates.</p>
  296. <h2>Learning more about NMEA</h2>
  297. <p>The final irritation about NMEA is that it's expensive to buy a
  298. description. The National Marine Electronics Association is a trade group of
  299. electronics dealers, and they want <a
  300. href='http://www.nmea.org/pub/0183/'>$250</a> for a copy of their
  301. standard. Numerous Web sources have reverse-engineered or abstracted
  302. bits of it; the NMEA page piously warns that <q>In most cases they are
  303. very old versions or incorrect interpretations and should not be
  304. depended upon for accuracy,</q> then mutters darkly about copyright
  305. violations.</p>
  306. <p><a href='NMEA.html'>Here</a> is the best compendium I know of. I
  307. have never seen a copy of the official NMEA standard. Fortunately, it
  308. isn't necessary for even <code>gpsd</code> developers to know most of
  309. it, since most modern GPS receivers only emit about a half-dozen of the
  310. eighty or so NMEA sentences. RMC, GGA, GSA, GSV (and now possibly
  311. GBS) are all you are ever likely to need to know about.</p>
  312. <p>After you've read about those sentences, it can be instructive to
  313. run <code>gpsd</code> in a mode something like this:</p>
  314. <pre><code>
  315. ./gpsd -N -n -D 2 /dev/ttyUSB0
  316. </code></pre>
  317. <p>Watching the output for thirty seconds or so will give you a good
  318. feel for what your GPS has to say, and how often it says it.</p>
  319. <h1>Locking and Loading</h1>
  320. <h2>Autonomous mode</h2>
  321. <p>
  322. If a GPS receiver has to figure out its position without outside
  323. assistance, it is said to be in <dfn>autonomous mode</dfn>.
  324. </p>
  325. <p>The time required for a GPS to get a fix (Time To First Fix (TTFF))
  326. can vary from under 15 seconds up to just under 30 minutes (actually,
  327. 29 plus calculation time). The main factors affecting this latency are
  328. (a) whether it has an almanac available,
  329. (b) whether it has satellite ephemerides available, and
  330. (c) whether it has recent fix available.
  331. Of course the quality of signal at your location matters as well.</p>
  332. <p>If a GPS has not been on for several months, then it has no current
  333. almanac available. It was to wait to download one before it can
  334. generate a fix. This can take just under 15 mins. This is sometimes
  335. called an <dfn>cold start</dfn>.</p>
  336. <p>While the almanac download takes 15 minutes, you have to be there for the
  337. start of it, otherwise you have to wait for the next cycle. So if you are
  338. unlucky and just miss the start of one, it could take just under 29 minutes
  339. to obtain, and on average closer to 22 min.</p>
  340. <p>If a GPS has not been on for a day (four to six hours) then it has
  341. a valid almanac but no valid satellite ephemerides, and must download at
  342. least four before it can generate an accurate fix. This is sometimes
  343. called a <dfn>warm start</dfn>. Each satellite has its own ephemeris
  344. that must be downloaded if a current copy is not fresh.
  345. </p>
  346. <p>GPSes store ephemerides is non-volatile memory, either internal
  347. flash storage or battery-backed SRAM. Thus, a GPS does not need to
  348. have been on continuously to have ephemerides available, but it will
  349. consider old data to be invalid after a while. In normal operation
  350. the GPS occasionally gets refreshes of ephemeris and almanac data
  351. from the satellites it's listening to.</p>
  352. <p>For both an cold start and a warm start, if the sat signal is
  353. momentarily lost, the process may have to restart and you'll get
  354. more delay.</p>
  355. <p>If a GPS has been on recently, in the current location, then this
  356. is sometimes called <dfn>hot start</dfn> and
  357. an accurate fix can be generated quite quickly. This will usually be
  358. a few seconds for a modern GPS.</p>
  359. <h2>A-GPS mode</h2>
  360. <p>
  361. If the GPS receiver can download the almanac or ephemerides, it can proceed
  362. quickly to a <i>hot start</i>. This is uncommon for GPSes that are
  363. connected to laptops, but is usual for GPS in mbile phones.
  364. <dfn>A-GPS</dfn> is variously expanded as Augmented, Assisted, or Aided.
  365. </p>
  366. <h1>GPSs and Power Management</h1>
  367. <p>Many GPSes are designed to power down or go to standby mode when
  368. DTR or its USB equivalent goes low (under Linux, this happens when you
  369. close the port). An important category of exceptions is USB SiRF-II
  370. GPSes; these don't seem to power down on DTR low, but instead go
  371. to a low-power standby mode for the 8/10s of every second that they're
  372. not shipping packets.</p>
  373. <p>Powering down on DTR low can be a valuable power-saving measure if
  374. the GPS is (say) running off of laptop batteries in a navigation or
  375. wardriving system. Thus, you don't want to keep your GPS device open
  376. when you don't actually need information from it.</p>
  377. <p>Unfortunately, this rule can collide with one of the persistent
  378. problems with GPSes &mdash; though they can update a previous fix
  379. quickly (in 0.1sec or less), they can take a long time to acquire a
  380. first fix when they power up.</p>
  381. <p>When a GPS receiver boots up, it has to suck radio waves for a
  382. while just to figure out what satellites might be available in line of
  383. sight. The speed at which it can do this is inversely proportional to
  384. the number of GPS channels it can sample simultaneously. Older one-
  385. or two-channel units could take several minutes at this. In 2004,
  386. even low-end GPS receivers have twelve channels and can thus cock a
  387. separate ear for as many satellites as they're ever likely to see.
  388. Even so, it's not uncommon for them to take 30 or 40 seconds after a
  389. cold boot to get a fix.</p>
  390. <p>One of the things <code>gpsd</code> does for applications is handle this
  391. power-management issue. When no clients are active, <code>gpsd</code> will
  392. automatically close the GPS device, re-opening it only when another
  393. client connects to the daemon.</p>
  394. <p>For more details on programming with <code>gpsd</code>, see the
  395. <a href="faq.html">FAQ</a>.</p>
  396. <h1>Where to learn more</h1>
  397. <dl>
  398. <dt><a href="http://34n118w.net/htmldir/GPS.html">How does GPS work?</a></dt>
  399. <dd>This is where the orbital simulation came from.</dd>
  400. <dt><a href='https://en.wikipedia.org/wiki/GPS'>Wikipedia on GPS</a></dt>
  401. <dd>Good introduction with much more on the history of the system.</dd>
  402. <dt><a href="http://www.ualberta.ca/~ckuethe/gps/">GPS Hackery</a></dt>
  403. <dd>Chris Kuethe's page has links to many interesting resources.</dd>
  404. <dt><a href='http://www.topology.org/soft/gps.html'>GPS interfaces and
  405. software</a></dt>
  406. <dd>Linux and open-source resources for working with GPSes.</dd>
  407. </dl>
  408. <hr>
  409. <script src="datestamp.js"></script>
  410. </div>
  411. </body>
  412. </html>