www.pudn.com > opengpssim.zip > ogsinout.c


/* ************************************************************************  
   *                                                                      * 
   *                          GPS Simulation                              * 
   *                                                                      * 
   * -------------------------------------------------------------------- * 
   *                                                                      * 
   *    Module:   ogsinout.cpp                                            * 
   *                                                                      * 
   *   Version:   0.1                                                     * 
   *                                                                      * 
   *      Date:   17.02.02                                                * 
   *                                                                      * 
   *    Author:   G. Beyerle                                              * 
   *                                                                      * 
   * -------------------------------------------------------------------- * 
   *                                                                      * 
   * Copyright (C) 2002  Georg Beyerle                                    * 
   *                                                                      * 
   * This program is free software; you can redistribute it and/or modify * 
   * it under the terms of the GNU General Public License as published by * 
   * the Free Software Foundation; either version 2 of the License, or    * 
   * (at your option) any later version.                                  * 
   *                                                                      * 
   * This program is distributed in the hope that it will be useful,      * 
   * but WITHOUT ANY WARRANTY; without even the implied warranty of       * 
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        * 
   * GNU General Public License for more details.                         * 
   *                                                                      * 
   * You should have received a copy of the GNU General Public License    * 
   * along with this program; if not, write to the Free Software          * 
   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.            * 
   *                                                                      * 
   * -------------------------------------------------------------------- * 
   *                                                                      * 
   * The files 'gpsfuncs.cpp', 'gpsrcvr.cpp' are modified versions of     * 
   * the files with the same name from Clifford Kelley's OpenSourceGPS    * 
   * distribution. The unmodified files can be obtained from              * 
   *   http://www.home.earthlink.net/~cwkelley                            * 
   *                                                                      * 
   * -------------------------------------------------------------------- * 
   *                                                                      * 
   *                         I/O - Procedures                             * 
   *                                                                      * 
   ************************************************************************ */ 
 
/* ******************************* changes ******************************** 
 
   dd.mm.yy - 
 
   ************************************************************************ */ 
 
/* ------------------------------- includes ------------------------------- */ 
 
#include  
#include  
#include  
#include  
#include  
#include  
 
#include "ogsdefine.h" 
#include "ogsstructs.h" 
#include "ogsextern.h" 
#include "ogsprototypes.h" 
#include "ogslibrary.h" 
 
/* ------------------------------- defines -------------------------------- */ 
 
/* ------------------------------- globals -------------------------------- */ 
 
/* -------------------------- prototypen (global) ------------------------- */ 
 
/* ------------------------------ procedures ------------------------------ */ 
 
void write_sf1to3( NAVDATA *nav, FILE *fp) 
{ 
  fprintf( fp, "# --- subframe 1-3 : satellite clock, health data and ephemeris data ---\n"); 
  fprintf( fp, "satellite data valid                                 valid = %e\n", nav->valid); 
  fprintf( fp, "week number                                           week = %e\n", nav->weekno); 
  fprintf( fp, "hand over word                                         how = %e\n", nav->how); 
  fprintf( fp, "satellite health                                    health = %e\n", nav->health); 
  fprintf( fp, "user range accuracy index                              ura = %e\n", nav->gps_eph.ura); 
  fprintf( fp, "issue of date, clock                                  iodc = %e\n", nav->gps_eph.iodc); 
  fprintf( fp, "issue of date, ephemeris                              iode = %e\n", nav->gps_eph.iode); 
  fprintf( fp, "satellite group delay differential               tgd [sec] = %e\n", nav->gps_eph.tgd); 
  fprintf( fp, "clock data reference time                        toc [sec] = %e\n", nav->gps_eph.toc); 
  fprintf( fp, "reference time ephemeris                               toe = %e\n", nav->gps_eph.toe); 
  fprintf( fp, "clock polynomial correction parameter 2    af2 [sec/sec^2] = %e\n", nav->gps_eph.af2); 
  fprintf( fp, "clock polynomial correction parameter 1      af1 [sec/sec] = %e\n", nav->gps_eph.af1); 
  fprintf( fp, "clock polynomial correction parameter 0          af0 [sec] = %e\n", nav->gps_eph.af0); 
  fprintf( fp, "mean motion correction                                  dn = %e\n", nav->gps_eph.dn); 
  fprintf( fp, "rate of right ascension                           omegadot = %e\n", nav->gps_eph.omegadot); 
  fprintf( fp, "rate of inclination angle                             idot = %e\n", nav->gps_eph.idot); 
  fprintf( fp, "amplitude of cosine harm. corr. to arg. of latitude    cuc = %e\n", nav->gps_eph.cuc); 
  fprintf( fp, "amplitude of sine harm. corr. to arg. of latitude      cus = %e\n", nav->gps_eph.cus); 
  fprintf( fp, "amplitude of cosine harm. corr. to orbit radius        crc = %e\n", nav->gps_eph.crc); 
  fprintf( fp, "amplitude of sine harm. corr. to orbit radius          crs = %e\n", nav->gps_eph.crs); 
  fprintf( fp, "amplitude of cosine harm. corr. to angle of incl.      cic = %e\n", nav->gps_eph.cic); 
  fprintf( fp, "amplitude of sine harm. corr. to angle of inclination  cis = %e\n", nav->gps_eph.cis); 
  fprintf( fp, "mean anomaly at reference time                          ma = %e\n", nav->gps_eph.ma); 
  fprintf( fp, "eccentricity                                             e = %e\n", nav->gps_eph.ety); 
  fprintf( fp, "square root of semi-major axis                sqra [m^1/2] = %e\n", nav->gps_eph.sqra); 
  fprintf( fp, "lon. asc. node of orbit plane at weekly epoch       omega0 = %e\n", nav->gps_eph.omega0); 
  fprintf( fp, "inclination angle at reference time                   inc0 = %e\n", nav->gps_eph.inc0); 
  fprintf( fp, "argument of perigee                                      w = %e\n", nav->gps_eph.w); 
  return; 
} 
 
void read_sf1to3( NAVDATA *nav, FILE *fp) 
{ 
  fgets( fp); 
  fscanf( fp, "%*60c%e\n", nav->valid); 
  fscanf( fp, "%*60c%e\n", nav->weekno); 
  fscanf( fp, "%*60c%e\n", nav->how); 
  fscanf( fp, "%*60c%e\n", nav->health); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.ura); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.iodc); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.iode); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.tgd); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.toc); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.toe); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.af2); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.af1); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.af0); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.dn); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.omegadot); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.idot); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.cuc); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.cus); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.crc); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.crs); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.cic); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.cis); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.ma); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.ety); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.sqra); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.omega0); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.inc0); 
  fscanf( fp, "%*60c%e\n", nav->gps_eph.w); 
  return; 
} 
 
# --- subframe 4 : support data --- 
page number                                         =  
 
void write_sf4( NAVDATA *nav, int pageno, FILE *fp) 
{ 
 
  fprintf( fp, "# --- subframe 4 : support data ---\n"); 
  fprintf( fp, "page number                                                = %d\n", pageno); 
 
  switch ( pageno) 
  { 
  case 17: 
    fprintf( fp, "special message                                            = '%22s'\n", nav->text_msg); 
    break; 
  case 25: 
    fprintf( fp, "satellite identification number                        prn =  
    fprintf( fp, "week number                                           week =  
    fprintf( fp, "hand over word                                         how =  
    fprintf( fp, "A-S and SV config  1                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  2                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  3                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  4                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  5                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  6                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  7                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  8                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config  9                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 10                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 11                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 12                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 13                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 14                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 15                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 16                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 17                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 18                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 19                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 20                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 21                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 22                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 23                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 24                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 25                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 26                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 27                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 28                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 29                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 30                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 31                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "A-S and SV config 32                                as_cfg = %04d\n", nav->); 
    fprintf( fp, "SV 25 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 26 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 27 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 28 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 29 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 30 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 31 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 32 health bits                                   health = %06d\n", nav->); 
  default: 
    printf( "unknown page number %d in subfarme 4\n", pageno); 
    exit(-1) 
  }   
  return; 
} 
 
void read_sf4( NAVDATA *nav, int pageno, FILE *fp) 
{ 
  int i; 
   
  fgets( fp); 
  fscanf( fp, "%*60c%e\n", nav->valid); 
  fscanf( fp, "%*60c%e\n", nav->weekno); 
  fscanf( fp, "%*60c%e\n", nav->how); 
  fscanf( fp, "%*60c%e\n", nav->health); 
  for ( i=0; i<24; i++) 
  { 
    fscanf( fp, "%*60c%e\n", nav->... + i); 
  }   
  return; 
} 
 
void write_sf5( NAVDATA *nav, int pageno, FILE *fp) 
{ 
 
  fprintf( fp, "# --- subframe 5 : support data ---\n"); 
  fprintf( fp, "page number                                         = %d\n", pageno); 
 
  switch ( pageno) 
  { 
  case 1: 
    fprintf( fp, "week number                                           week =  
    fprintf( fp, "hand over word                                         how =  
    fprintf( fp, "satellite health                                    health =  
    fprintf( fp, "eccentricity                                             e =  
    fprintf( fp, "almanac reference time                                 toa =  
    fprintf( fp, "incl. angle at ref. time rel. to 0.3 of RA             inc =  
    fprintf( fp, "rate of right ascension                           omegadot =  
    fprintf( fp, "square root of semi-major axis                sqra [m^1/2] =  
    fprintf( fp, "lon. asc. node of orbit plane at weekly epoch       omega0 =  
    fprintf( fp, "argument of perigee                                      w =  
    fprintf( fp, "mean anomaly at reference time                          ma =  
    fprintf( fp, "clock polyn. corr. parameter                 af1 [sec/sec] =  
    fprintf( fp, "clock polyn. corr. parameter                     af0 [sec] =  
  case 25: 
    fprintf( fp, "SV  1 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  2 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  3 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  4 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  5 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  6 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  7 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  8 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV  9 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 10 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 11 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 12 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 13 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 14 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 15 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 16 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 17 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 18 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 19 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 20 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 21 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 22 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 23 health bits                                   health = %06d\n", nav->); 
    fprintf( fp, "SV 24 health bits                                   health = %06d\n", nav->); 
 
  default: 
    printf( "unknown page number %d in subfarme 5\n", pageno); 
    exit(-1) 
  }   
  return; 
} 
 
void read_sf5( NAVDATA *nav, int pageno, FILE *fp) 
{ 
  fgets( fp); 
  return; 
} 
 
 
 
 
 
 
 
 
/* ------------------------------ end of file ----------------------------- */