⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogsionavasc.c

📁 OpenGPSSim是一个gps模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -