PROGRAMS TO LOG AND USE RAW DATA FROM SOME GARMIN HANDHELDS.
          (GPS12, 12XL, II+, III+, Etrex, Emap)

-------------------------------------------------------------------
Usual Disclaimer:

These program are supplied as is. No warranty is given or implied. 
Use them at your own risk. The undocumented commands that these programs 
use may cause corruption or lost of the data stored in your GPS.
Garmin is a registered trademark of Garmin Corporation. 
Garmin Corporation takes no warranty for problems resulting in using 
products not sold by Garmin Corporation.
This is specially true for this software. 
--------------------------------------------------------------------

****************************************************************
CONTENTS
*****************************************************************

There are two different packages, one for Linux, the other for Windows.
The Linux version uses some modified functions from the Jeeps library 
for the low level serial communications.
Source code is provided in both cases (VC++ for Windows, gcc for Linux). 

Each package contains: 

* async.c and async.exe: async event logger for the GPS12 (or XL). 
* gar2rnx.c and gar2rnx.exe: sources and executable for the garmin 
                             to rinex translator. It also works as 
                             a parser to study async messages. 
* README file: this file.

-----------------------------------------------------------------------

The latest versions are 1.20 (for async) and 1.3 (for gar2rnx).
They include the ability to log Doppler shift data and some changes 
in how the serial communications are handled with respect to the 
earlier published version (async 1.10).
I do hope that these modifications will avoid (or reduce) some
problems that some would-be users have brought to my attention
(thanks to all of them, BTW).
However, as I only can test the new code on my trusty GPS12 
(on which it already worked anyway), and given my lack of expertise 
on serial IO programming, I'm mantaining the oldish versions in this 
page so you can fall back to them if you find that my latest 
improvements don't work for you.  

*****************************************************************
USAGE of the ASYNC utility
*****************************************************************
You can get this help by typing async -h:

-----------------------------------------------------------------
* Async Software to log raw GPS data from some Garmin handhelds *
* Version 1.20    Copyright 2000,2001   Antonio Tabernero Galan *
-----------------------------------------------------------------
Usage:
  async or async -h: shows this help
  async command [options]

------------------- ASYNC COMMANDS ------------------------------

  async -c : only checks port availability
  async -i : only tries to get the GPS ID (default)
  async -a 0xnnnn : Enable async events with hex mask nnnn
  async -r 0xnnnn : Sends request type nnnn.
  async -rinex : by enabling only those records relevant to the
                 generation of a RINEX file you avoid missing
                 observations (that can happen when there are too
                 many async events coming). Use this option when you
                 plan to generate a RINEX file from the collected data
  async -doppler: if you're using the latest version (1.2 or newer) of
                  async you can get Doppler shift data in addition to
                  pseudoranges and phase using this flag instead of -rinex.
                  Be warned that since there is now more data coming from
                  the serial port you might start missing some observations.

-------------------- ASYNC OPTIONS   ---------------------------------------

  async -p port_name : Selects serial comm port (comx, ttySx)

                       Default is com1 (Win) or ttyS0 (Linux)
  async -t ttt : Sets log time to ttt seconds. Default 30 sec.
  async -o filename : Save received packets in filename
                      By default the output goes to week_second.g12

---------------------------------------------------------------------------

  The usual procedure would be to find an unused comm port using

    async -p com1 -c  or async -p com2 -c (ttyS0,ttyS1 in Linux)

  Once you find the port, connect your GPS and check if the program sees it

     async -p comN -i

  If your GPS is identified you can start logging data using the
    async -a -r -rinex or -doppler commands.
----------------------------------------------------------------------------


******************************************************************
GENERATION OF RINEX FILES
******************************************************************

Simply put, the procedure to obtain a RINEX file is: 

* Power on your GPS12 with a good view of the sky. 

* Wait until a 3D fix is obtained (if you don't, the program will). 
       
* Run the async logger for a while with the -rinex (or -rinex2) option:

       async -p your_port -rinex  -t 300 -o bindata.g12

  that would generate a file bindata.g12 after a five minute logging.

* Run the gar2rnx (GARmin to RiNeX) program and redirect the output 
  to a file: 

           gar2rnx bindata.g12 > data.00o

  Hopefully, the created file data.00o will be an observation RINEX file. 

* DGPS post-processing of raw data involves the comparison with 
  data generated by other receiver at the SAME time. You could 
  use another G12 or you can get data collected at a reference 
  station nearby.

  
  American users will find this address quite convenient:

  http://www.ngs.noaa.gov/CORS/Data.html

  For European users there is EUREF:

  ftp://igs.ifag.de/gpsdata/


* Also you need either a broadcast or precise ephemeris 
  corresponding to the date you logged your data. You can find 
  those in:

  http://www.ngs.noaa.gov/CORS/Data.html   
  ftp://igs.ifag.de/ORBITS/
  ftp://ftp.navcen.uscg.mil/GPS/precise/pebinary/  


* Postprocess the RINEX file with your prefered public domain 
  postprocessing software. I have used GeoGenius. It's not public
  domain, but you can get a functional evaluation demo from:

   http://www.terrasat.de/



