The figure below is a file view of the GPSRCVR program.  The current version number is 1.17  Note that the format of rcvr_par.dat and current.eph have both changed as of version 1.05.  Also in version 1.11 in RCVR_PAR.DAT rms was replaced with ICP_CTL which provides the option to obtain velocity fixes with Integrated Carrier Phase or Carrier Tracking Loop.  The Sourceforge CVS repository has also been updated to version 1.17.  The software is now under the GPL license.  In the \SOURCE directory gpsrcvrb (Borland Compiler) and gpsrcvrv (Microsoft Visual C++ 1.5 compiler) executables are available.

Changes in version 1.17 

  Added data bit recording and write to file (this feature is not completely
  debugged), corrected error in satpos_almanac, Thanks Tak! Also corrected an
  error in navmess, thanks Goetz! Also added an indication on page 1 which
  interface (ISA or PCI) is being used and the almanac page number.

Changes in version 1.16

  Added #ifdefs to allow compilation by DJGPP. So far it compiles but does not run.

  It seems to be a problem with the interrupt routine.   Setup use of new PCI interface

  from GPS Creations.  It automatically detects the PCI card and if not found it defaults

  to the ISA interface. Modified almanac read logic to check when a new almanac is available.

Changes in version 1.15

    Added more integrity checking into the data bit synchronization in the pull-in
    state. Instead of just checking the change in phase and checking that it is
    very close to a +-90 to -+90 transition it also stores the last 20 ms sign
    values and they must all be the same and opposite of the transitioned ms sign
    before declaring the edge of a data bit. Modified parity check algorithm to
    be more efficient. Also made constants for number of channels and register
    address and data address.

Changes in version 1.14

    Fixed error in NMEA checksum routine. Added another display page and
    supporting data structure to show parity errors in navigation message

Changes in version 1.13

    Made modifications to get ICP working better, trying to use just the last 0.1 second
    of carrier phase data. Phil Bender added NMEA serial port messages (needs
    some more work, see files serport.cpp,  nmea.cpp,  fwinter.cpp). Additional
    entries at the bottom of rcvr_par.dat are used to set up the NMEA messages.
    Adapted program so it can compile under Borland (#ifdef BCPP) or Microsoft
    Visual CPP (#ifdef VCPP) Also split up the program into library components
    to make it more modular (see GPS_ISR.CPP and NAVFIX.CPP)

Changes in version 1.12

    Removed some of the ephemeris checks that were causing the rejection of
    valid ephemeris messages and also caused it not to accept ephemeris
    messages from a constellation simulator. Fixed up the 1 second data bit
    ambiguities to recover measurements that previously had been thrown out.

Changes in version 1.11

    Cleaned up the display when a satellite is removed from consideration
    Fixed an ephemeris management problem that caused occasional use of the
    ephemeris from the wrong satellite
    Modified the ephemeris mgmt to check IODE and IODC to decide when
    to grab a new ephemeris + ephemeris integrity checks
    Improved the almanac page redundancy check
    Moved Pr, dPR, Tropo and Iono into the main channel data structure
    Set up default iono parameters when ion_utc.dat not available
    Added a debug output that provides raw measurements data and ephemeris
    which provides more processing capability than pseudorange & delta pseudorange
    Fully implemented the GPSRCVR.LOG output options
    Added the option in RCVR_PAR.DAT to use CTL (carrier tracking loop) or
    ICP (integrated carrier phase) data for velocity computations (ICP seems
    to have bias problems)

Changes in version 1.10

    Corrected problem in Cmatrix with Borland 5.02 compiler

    Aligned pager header titles

    Still a problem with the matrix functions, if you have trouble comment out the call to DOPS in Nav_Fix


Changes in version 1.09

  Corrected hot start problem
  Hooked up almanac data type check
  Started using Aberto's matrix libraries for DOP calculations 
  Minor changes in pream
  Got rid of tmax in nav_fix
  Added more measurement integrity checks in nav_fix
  Added header and tdop to display 


Changes in version 1.08

  Corrected tracking loop bias problem (I hope!)
  Corrected code loop doppler correction constant
  Corrected a cold start problem

Changes in version 1.07

    Added check for bit sync in pull-in, must be set to transition to track

    Extended pull-in to end of data bit to reduce transients when going into track

    Added integrated carrier phase processing for velocity

    Improved GPS time alignment mode (for any nav fix rate)

    Corrected iono correction computations (again)

    Corrected tropo correction sign

    Reduced debug arrays to reduce code size

    Added two new display pages, iono & tropo, and pseudorange &                

        delta  pseudorange

    Not used yet but getting set up to use Alberto Perez's matrix libraries


Work on version 1.18 is proceeding.


To see the source code and examples of the other files go to this page

A new program has been added to perform a loop back test of the gp2021 chip.  It only needs gp2021.cpp to compile and does not use any data files.  When you run it if it shows channels 1 through 11 in state 4 with the data fields filled in on the right you can be sure that your digital interface to the receiver is working properly.

A more basic I/O test program has been written to help debug some data bus problems that were found with the Superstar hack.

I'm putting the files under this page  It's called regtest.  It effectively loads up the GP2021 to get the correlators running and then does read/write tests to a couple of addresses.

The display looks like this

If there is a problem an extra line of text below will say "data bus problem " and tells what was sent and what was received.  It will try all 65536 data combinations each cycle and repeats until you hit "x" or "X".    It also creates a data file "reg_err.dat" that records all of the errors found.  In order to be certain of catching all of the errors you should let it run for at least 2 cycles.  It will take a few minutes to go through each cycle.
For those of you who have tried the hack I would appreciate it if you would run the program and let me know if it shows problems.  On the 3 hacks we've tried one showed no problems, another shows a just a few per cycle and the third showed about 30 errors per cycle. 

Clifford Kelley
Copyright 2004  All rights reserved.
Revised: September 09, 2007 .