static void RtkServer__readsp3(JNIEnv* env, jclass thiz, jstring file) { struct native_ctx_t *nctx; nav_t nav={0}; rtksvr_t *svr; nctx = (struct native_ctx_t *)(uintptr_t)(*env)->GetLongField(env, thiz, m_object_field); if (nctx == NULL) { LOGV("nctx is null"); return; } const char *filename = (*env)->GetStringUTFChars(env, file, 0); readsp3(filename,&nav,0); /* test if there is some ephemeris */ if (nav.ne<=0) { tracet(1,"sp3 file read error: %s\n",file); return; } //OK so update to server svr = &nctx->rtksvr; rtksvrlock(svr); if (svr->nav.peph) free(svr->nav.peph); svr->nav.ne=svr->nav.nemax=nav.ne; svr->nav.peph=nav.peph; rtksvrunlock(svr); (*env)->ReleaseStringUTFChars(env,file, filename); }
/* decode download file ------------------------------------------------------*/ static void decodefile(rtksvr_t *svr, int index) { nav_t nav; char file[1024]; int nb; INIT_ZERO(nav); tracet(4,"decodefile: index=%d\n",index); rtksvrlock(svr); /* check file path completed */ if ((nb=svr->nb[index])<=2|| svr->buff[index][nb-2]!='\r'||svr->buff[index][nb-1]!='\n') { rtksvrunlock(svr); return; } strncpy(file,(char *)svr->buff[index],nb-2); file[nb-2]='\0'; svr->nb[index]=0; rtksvrunlock(svr); if (svr->format[index]==STRFMT_SP3) { /* precise ephemeris */ /* read sp3 precise ephemeris */ readsp3(file,&nav,0); if (nav.ne<=0) { tracet(1,"sp3 file read error: %s\n",file); return; } /* update precise ephemeris */ rtksvrlock(svr); if (svr->nav.peph) free(svr->nav.peph); svr->nav.ne=svr->nav.nemax=nav.ne; svr->nav.peph=nav.peph; svr->ftime[index]=utc2gpst(timeget()); strcpy(svr->files[index],file); rtksvrunlock(svr); } else if (svr->format[index]==STRFMT_RNXCLK) { /* precise clock */ /* read rinex clock */ if (readrnxc(file,&nav)<=0) { tracet(1,"rinex clock file read error: %s\n",file); return; } /* update precise clock */ rtksvrlock(svr); if (svr->nav.pclk) free(svr->nav.pclk); svr->nav.nc=svr->nav.ncmax=nav.nc; svr->nav.pclk=nav.pclk; svr->ftime[index]=utc2gpst(timeget()); strcpy(svr->files[index],file); rtksvrunlock(svr); } }
/* 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; } } }