📄 ogsionavasc.c
字号:
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:
int i;
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);
}
// printf( "sp = >%s<\n", sp);
// cp = fgets( sp, SPSIZE, fp);
// printf( "sp = >%s<\n", sp);
fscanf( fp, "%*60c%d\n", &nav->sf4pageno);
fscanf( fp, "%*60c%d\n", &nav->sf4how);
// 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);
break;
case 18:
// ionospheric & UTC
fscanf( fp, "%*60c%e\n", &nav->iono.b0);
fscanf( fp, "%*60c%e\n", &nav->iono.b1);
fscanf( fp, "%*60c%e\n", &nav->iono.b2);
fscanf( fp, "%*60c%e\n", &nav->iono.b3);
fscanf( fp, "%*60c%e\n", &nav->iono.al0);
fscanf( fp, "%*60c%e\n", &nav->iono.al1);
fscanf( fp, "%*60c%e\n", &nav->iono.al2);
fscanf( fp, "%*60c%e\n", &nav->iono.al3);
fscanf( fp, "%*60c%e\n", &nav->utc.a0);
fscanf( fp, "%*60c%e\n", &nav->utc.a1);
fscanf( fp, "%*60c%e\n", &nav->utc.tot);
fscanf( fp, "%*60c%e\n", &nav->utc.WNt);
fscanf( fp, "%*60c%e\n", &nav->utc.dtls);
fscanf( fp, "%*60c%e\n", &nav->utc.WNlsf);
fscanf( fp, "%*60c%e\n", &nav->utc.DN);
fscanf( fp, "%*60c%e\n", &nav->utc.dtlsf);
break;
case 25:
int i;
for (i=1; i<=32; i++)
fscanf( fp, "%*60c%d\n", &nav->ASV[i]);
// 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]);
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)
{
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:
int i;
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);
}
fscanf( fp, "%*60c%d\n", &nav->sf5pageno);
fscanf( fp, "%*60c%d\n", &nav->sf5how);
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:
fscanf( fp, "%*60c%d\n", &nav->alm.health);
fscanf( fp, "%*60c%d\n", &nav->alm.prn);
fscanf( fp, "%*60c%e\n", &nav->alm.ety);
fscanf( fp, "%*60c%e\n", &nav->alm.toa);
fscanf( fp, "%*60c%e\n", &nav->alm.inc);
fscanf( fp, "%*60c%e\n", &nav->alm.omegadot);
fscanf( fp, "%*60c%e\n", &nav->alm.sqra);
fscanf( fp, "%*60c%e\n", &nav->alm.omega0);
fscanf( fp, "%*60c%e\n", &nav->alm.w);
fscanf( fp, "%*60c%e\n", &nav->alm.ma);
fscanf( fp, "%*60c%e\n", &nav->alm.af1);
fscanf( fp, "%*60c%e\n", &nav->alm.af0);
break;
case 25:
int i;
for (i=1; i<=32; i++)
fscanf( fp, "%*60c%d\n", &nav->ASV[i]);
// 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]);
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 + -