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 ----------------------------- */