/* satellite position and clock by broadcast ephemeris -----------------------*/ static int ephpos(gtime_t time, gtime_t teph, int sat, const nav_t *nav, int iode, double *rs, double *dts, double *var, int *svh) { eph_t *eph; geph_t *geph; seph_t *seph; double rst[3],dtst[1],tt=1E-3; int i,sys; trace(4,"ephpos : time=%s sat=%2d iode=%d\n",time_str(time,3),sat,iode); sys=satsys(sat,NULL); *svh=-1; if (sys==SYS_GPS||sys==SYS_GAL||sys==SYS_QZS||sys==SYS_CMP) { if (!(eph=seleph(teph,sat,iode,nav))) return 0; eph2pos(time,eph,rs,dts,var); time=timeadd(time,tt); eph2pos(time,eph,rst,dtst,var); *svh=eph->svh; } else if (sys==SYS_GLO) { if (!(geph=selgeph(teph,sat,iode,nav))) return 0; geph2pos(time,geph,rs,dts,var); time=timeadd(time,tt); geph2pos(time,geph,rst,dtst,var); *svh=geph->svh; } else if (sys==SYS_SBS) { if (!(seph=selseph(teph,sat,nav))) return 0; seph2pos(time,seph,rs,dts,var); time=timeadd(time,tt); seph2pos(time,seph,rst,dtst,var); *svh=seph->svh; } else return 0; /* satellite velocity and clock drift by differential approx */ for (i=0;i<3;i++) rs[i+3]=(rst[i]-rs[i])/tt; dts[1]=(dtst[0]-dts[0])/tt; return 1; }
/* satellite position and clock by broadcast ephemeris -----------------------*/ static int ephpos(gtime_t time, gtime_t teph, int sat, const nav_t *nav, int iode, double *rs, double *dts, double *var, int *svh,char **msg) { eph_t *eph; double rst[3],dtst[1],tt=1E-3; int i; *svh=-1; if (!(eph=seleph(teph,sat,iode,nav,msg))) return 0; //start=TIM2->CNT; eph2pos(time,eph,rs,dts,var); //SendIntStr(TIM2->CNT-start); time=timeadd(time,tt); eph2pos(time,eph,rst,dtst,var); *svh=eph->svh; /* satellite velocity and clock drift by differential approx */ for (i=0;i<3;i++) rs[i+3]=(rst[i]-rs[i])/tt; dts[1]=(dtst[0]-dts[0])/tt; return 1; }