📄 ogsnavascii.c
字号:
case 1:
case 6:
case 11:
case 12:
case 16:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
fprintf( fp, "reserved\n");
break;
case 13:
case 14:
case 15:
fprintf( fp, "spare satellite\n");
break;
case 17:
fprintf( fp, "special message = '%22s'\n", nav->text_msg);
break;
case 18:
// ionospheric & UTC
fprintf( fp, " = %.4f\n", nav->iono.b0);
fprintf( fp, " = %.4f\n", nav->iono.b1);
fprintf( fp, " = %.4f\n", nav->iono.b2);
fprintf( fp, " = %.4f\n", nav->iono.b3);
fprintf( fp, " = %.4f\n", nav->iono.al0);
fprintf( fp, " = %.4f\n", nav->iono.al1);
fprintf( fp, " = %.4f\n", nav->iono.al2);
fprintf( fp, " = %.4f\n", nav->iono.al3);
fprintf( fp, " = %.10e\n", nav->utc.a0);
fprintf( fp, " = %.8e\n", nav->utc.a1);
fprintf( fp, "reference time for UTC data tot = %.4e\n", nav->utc.tot);
fprintf( fp, "UTC reference week number WNt = %.4e\n", nav->utc.WNt);
fprintf( fp, "delta time due to leap seconds dtls = %.4e\n", nav->utc.dtls);
fprintf( fp, "week number WNlsf = %.4e\n", nav->utc.WNlsf);
fprintf( fp, "day number DN = %.4e\n", nav->utc.DN);
fprintf( fp, "delta time due to leap seconds dtlsf = %.4e\n", nav->utc.dtlsf);
break;
case 25:
for ( i=1; i<=32; i++)
fprintf( fp, "anti-spoofing and SV config %2d as_cfg = %04d\n", i, nav->ASV[i]);
// SV PRN 1-24 are written in subframe 5 / page 25
for ( i=25; i<=32; i++)
fprintf( fp, "SV %2d health bits health = %06d\n", i, nav->SVh[i]);
break;
default:
printf( "\n");
printf( "unknown page number %d in subframe 4\n", nav->sf4pageno);
exit(-1);
break;
}
fprintf( fp, "[end subframe 4]\n");
return;
}
void read_sf4( NAVDATA *nav, FILE *fp)
{
int i;
char sp[SPSIZE], *cp;
cp = fgets( sp, SPSIZE, fp);
if ( !cp)
{
printf( "error reading nav file\n");
exit(-1);
}
fgets( sp, SPSIZE, fp); nav->sf4pageno = read_key_value_int( sp);
nav->sf4svid = page4sf2page[nav->sf4pageno];
fgets( sp, SPSIZE, fp); nav->sf4how = read_key_value_long( sp);
// printf( "nav->sf4pageno = %d\n", nav->sf4pageno);
// printf( "nav->sf4how = %d\n", nav->sf4how);
// getchar();
switch ( nav->sf4pageno)
{
case 0:
break;
case 1:
case 6:
case 11:
case 12:
case 16:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
fgets( sp, SPSIZE, fp);
break;
case 13:
case 14:
case 15:
fgets( sp, SPSIZE, fp);
break;
case 17:
// fscanf( fp, "%*60c%22s\n", nav->text_msg);
fgets( sp, SPSIZE, fp);
if ( strlen( sp) < 85)
{
printf( "Error reading ASCII file.");
printf( "Line: >%s<", sp);
exit(-1);
}
strncpy( nav->text_msg, sp + 62, 22);
// printf( "sp:%s\n", sp);
// printf( ">%s<\n", nav->text_msg);
// getchar();
break;
case 18:
// ionospheric & UTC
fgets( sp, SPSIZE, fp); nav->iono.b0 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->iono.b1 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->iono.b2 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->iono.b3 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->iono.al0 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->iono.al1 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->iono.al2 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->iono.al3 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.a0 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.a1 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.tot = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.WNt = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.dtls = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.WNlsf = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.DN = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->utc.dtlsf = read_key_value_double( sp);
break;
case 25:
for (i=1; i<=32; i++)
{
// fscanf( fp, "%*60c%d\n", &nav->ASV[i]);
fgets( sp, SPSIZE, fp); nav->ASV[i] = read_key_value_int( sp);
}
// SV PRN 1-24 are written in subframe 5 / page 25
for (i=25; i<=32; i++)
{
// fscanf( fp, "%*60c%d\n", &nav->SVh[i]);
fgets( sp, SPSIZE, fp); nav->SVh[i] = read_key_value_int( sp);
}
break;
default:
printf( "\n");
printf( "unknown page number %d in subframe 4\n", nav->sf4pageno);
exit(-1);
break;
}
//
// simple data file consistency check
//
char pattern[] = "[end subframe 4]";
cp = fgets( sp, SPSIZE, fp);
if ( !cp || strncmp( sp, pattern, strlen( pattern)))
{
printf( "error reading nav file\n");
printf( "expected string >%s<, read >%s<\n", pattern, sp);
exit(-1);
}
return;
}
//
// write nav data subframe 5 to ASCII file
//
void write_sf5( NAVDATA *nav, FILE *fp)
{
int i;
fprintf( fp, "[subframe 5 : support data]\n");
fprintf( fp, "page number pageno = %d\n", nav->sf5pageno);
fprintf( fp, "hand over word how = %d\n", nav->sf5how);
switch ( nav->sf5pageno)
{
case 0:
break;
case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10:
case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
case 21: case 22: case 23: case 24:
fprintf( fp, "satellite health health = %d\n", nav->alm.health);
fprintf( fp, "satellite id number id = %d\n", nav->alm.prn);
fprintf( fp, "eccentricity e = %.10e\n", nav->alm.ety);
fprintf( fp, "almanac reference time toa = %.4e\n", nav->alm.toa);
fprintf( fp, "incl. angle at ref. time rel. to 0.3 of RA inc = %.10e\n", nav->alm.inc);
fprintf( fp, "rate of right ascension [semi-circles/sec] omegadot = %.6e\n", nav->alm.omegadot);
fprintf( fp, "square root of semi-major axis [m^1/2] sqra = %.9e\n", nav->alm.sqra);
fprintf( fp, "lon. asc. node of orbit plane at weekly epoch omega0 = %.9e\n", nav->alm.omega0);
fprintf( fp, "argument of perigee [semi-circles] w = %.9e\n", nav->alm.w);
fprintf( fp, "mean anomaly at reference time [semi-circles] ma = %.9e\n", nav->alm.ma);
fprintf( fp, "clock polyn. corr. parameter [sec/sec] af1 = %.5e\n", nav->alm.af1);
fprintf( fp, "clock polyn. corr. parameter [sec] af0 = %.5e\n", nav->alm.af0);
break;
case 25:
for (i=1; i<=24; i++)
fprintf( fp, "SV %2d health bits health = %06d\n", i, nav->SVh[i]);
break;
default:
printf( "\n");
printf( "unknown page number %d in subframe 5\n", nav->sf5pageno);
exit(-1);
break;
}
fprintf( fp, "[end subframe 5]\n");
return;
}
void read_sf5( NAVDATA *nav, FILE *fp)
{
int i;
char sp[SPSIZE], *cp;
cp = fgets( sp, SPSIZE, fp);
if ( !cp)
{
printf( "error reading nav file\n");
exit(-1);
}
fgets( sp, SPSIZE, fp); nav->sf5pageno = read_key_value_int( sp);
nav->sf5svid = page5sf2page[nav->sf5pageno];
fgets( sp, SPSIZE, fp); nav->sf5how = read_key_value_long( sp);
switch ( nav->sf5pageno)
{
case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10:
case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
case 21: case 22: case 23: case 24:
fgets( sp, SPSIZE, fp); nav->alm.health = read_key_value_int( sp);
fgets( sp, SPSIZE, fp); nav->alm.prn = read_key_value_int( sp);
fgets( sp, SPSIZE, fp); nav->alm.ety = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.toa = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.inc = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.omegadot = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.sqra = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.omega0 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.w = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.ma = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.af1 = read_key_value_double( sp);
fgets( sp, SPSIZE, fp); nav->alm.af0 = read_key_value_double( sp);
break;
case 25:
for (i=1; i<=32; i++)
{
// fscanf( fp, "%*60c%d\n", &nav->ASV[i]);
fgets( sp, SPSIZE, fp); nav->ASV[i] = read_key_value_int( sp);
}
// SV PRN 1-24 are written in subframe 5 / page 25
for (i=25; i<=32; i++)
{
// fscanf( fp, "%*60c%d\n", &nav->SVh[i]);
fgets( sp, SPSIZE, fp); nav->SVh[i] = read_key_value_int( sp);
}
break;
default:
printf( "\n");
printf( "unknown page number %d in subframe 4\n", nav->sf5pageno);
exit(-1);
break;
}
//
// simple data file consistency check
//
char pattern[] = "[end subframe 5]";
cp = fgets( sp, SPSIZE, fp);
if ( !cp || strncmp( sp, pattern, strlen( pattern)))
{
printf( "error reading nav file\n");
printf( "expected string >%s<, read >%s<\n", pattern, sp);
exit(-1);
}
return;
}
/* ------------------------------ end of file ----------------------------- */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -