/* read prec ephemeris, sbas data, lex data, tec grid and open rtcm ----------*/ static void readpreceph(char **infile, int n, const prcopt_t *prcopt, nav_t *nav, sbs_t *sbs, lex_t *lex) { seph_t seph0={0}; int i; char *ext; trace(3,"readpreceph: n=%d\n",n); nav->ne=nav->nemax=0; nav->nc=nav->ncmax=0; sbs->n =sbs->nmax =0; lex->n =lex->nmax =0; /* read precise ephemeris files */ for (i=0;i<n;i++) { if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue; readsp3(infile[i],nav,0); } /* read precise clock files */ for (i=0;i<n;i++) { if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue; readrnxc(infile[i],nav); } /* read sbas message files */ for (i=0;i<n;i++) { if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue; sbsreadmsg(infile[i],prcopt->sbassatsel,sbs); } /* read lex message files */ for (i=0;i<n;i++) { if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue; lexreadmsg(infile[i],0,lex); } /* allocate sbas ephemeris */ nav->ns=nav->nsmax=NSATSBS*2; if (!(nav->seph=(seph_t *)malloc(sizeof(seph_t)*nav->ns))) { showmsg("error : sbas ephem memory allocation"); trace(1,"error : sbas ephem memory allocation"); return; } for (i=0;i<nav->ns;i++) nav->seph[i]=seph0; /* set rtcm file and initialize rtcm struct */ rtcm_file[0]=rtcm_path[0]='\0'; fp_rtcm=NULL; for (i=0;i<n;i++) { if ((ext=strrchr(infile[i],'.'))&& (!strcmp(ext,".rtcm3")||!strcmp(ext,".RTCM3"))) { strcpy(rtcm_file,infile[i]); init_rtcm(&rtcm); break; } } }
/* main ----------------------------------------------------------------------*/ int main(int argc, char **argv) { FILE *fp=NULL; nav_t nav={0}; lex_t lex={0}; gtime_t t0,time; double ep0[]={2000,1,1,0,0,0},tspan=24.0,tint=7200,dpos=1; double rpos[]={35,137}; char *ifile="",*ofile=""; int i,trl=0,index=0,nlat=45,nlon=45; t0=epoch2time(ep0); for (i=1;i<argc;i++) { if (!strcmp(argv[i],"-t0")&&i+2<argc) { if (sscanf(argv[++i],"%lf/%lf/%lf",ep0 ,ep0+1,ep0+2)<3|| sscanf(argv[++i],"%lf:%lf:%lf",ep0+3,ep0+4,ep0+5)<1) { fprintf(stderr,"invalid time\n"); return -1; } } else if (!strcmp(argv[i],"-ts")&&i+1<argc) tspan=atof(argv[++i]); else if (!strcmp(argv[i],"-ti")&&i+1<argc) tint =atof(argv[++i]); else if (!strcmp(argv[i],"-u" )&&i+2<argc) { rpos[0]=atof(argv[++i]); rpos[1]=atof(argv[++i]); } else if (!strcmp(argv[i],"-n" )&&i+2<argc) { nlat=atoi(argv[++i]); nlon=atoi(argv[++i]); } else if (!strcmp(argv[i],"-d" )&&i+1<argc) dpos =atof(argv[++i]); else if (!strcmp(argv[i],"-o" )&&i+1<argc) ofile=argv[++i]; else if (!strcmp(argv[i],"-x" )&&i+1<argc) trl =atof(argv[++i]); else ifile=argv[i]; } if (trl>0) { traceopen("diffeph.trace"); tracelevel(trl); } t0=epoch2time(ep0); if (!lexreadmsg(ifile,0,&lex)) { fprintf(stderr,"file read error: %s\n",ifile); return -1; } if (!(fp=fopen(ofile,"w"))) { fprintf(stderr,"file open error: %s\n",ofile); return -1; } fprintf(fp,"epoch=[%.0f %.0f %.0f %.0f %.0f %.0f];\n", ep0[0],ep0[1],ep0[2],ep0[3],ep0[4],ep0[5]); for (i=0;i<(int)(tspan*3600.0/tint);i++) { time=timeadd(t0,tint*i); fprintf(stderr,"time=%s\r",time_str(time,0)); index=updatelex(index,time,&lex,&nav); printtec(i+1,time,tint*i,&nav,rpos,nlat,nlon,dpos,fp); } fclose(fp); if (trl>0) traceclose(); return 0; }