/* decode type 12: madoca orbit and clock correction -------------------------*/ static int decode_lextype12(const lexmsg_t *msg, nav_t *nav, gtime_t *tof) { rtcm_t rtcm={0}; double tow; unsigned char buff[1200]; int i=0,j,k,n,week; trace(3,"decode_lextype12:\n"); tow =getbitu(buff,i,20); i+=20; week=getbitu(buff,i,13); i+=13; *tof=gpst2time(week,tow); /* convert lex type 12 to rtcm ssr message */ while ((n=lex2rtcm(msg->msg,i,buff))) { rtcm.time=*tof; for (j=0;j<n+6;j++) { /* input rtcm ssr message */ if (input_rtcm3(&rtcm,buff[j])!=10) continue; /* update ssr corrections in nav data */ for (k=0;k<MAXSAT;k++) { if (!rtcm.ssr[k].update) continue; nav->ssr[k]=rtcm.ssr[k]; rtcm.ssr[k].update=0; } } i+=n*8; } return 1; }
/* decode receiver raw/rtcm data ---------------------------------------------*/ static int decoderaw(rtksvr_t *svr, int index) { obs_t *obs; nav_t *nav; sbsmsg_t *sbsmsg=NULL; int i,ret,sat,fobs=0; tracet(4,"decoderaw: index=%d\n",index); rtksvrlock(svr); for (i=0;i<svr->nb[index];i++) { /* input rtcm/receiver raw data from stream */ if (svr->format[index]==STRFMT_RTCM2) { ret=input_rtcm2(svr->rtcm+index,svr->buff[index][i]); obs=&svr->rtcm[index].obs; nav=&svr->rtcm[index].nav; sat=svr->rtcm[index].ephsat; } else if (svr->format[index]==STRFMT_RTCM3) { ret=input_rtcm3(svr->rtcm+index,svr->buff[index][i]); obs=&svr->rtcm[index].obs; nav=&svr->rtcm[index].nav; sat=svr->rtcm[index].ephsat; } else { ret=input_raw(svr->raw+index,svr->format[index],svr->buff[index][i]); obs=&svr->raw[index].obs; nav=&svr->raw[index].nav; sat=svr->raw[index].ephsat; sbsmsg=&svr->raw[index].sbsmsg; } #if 0 /* record for receiving tick */ if (ret==1) { trace(0,"%d %10d T=%s NS=%2d\n",index,tickget(), time_str(obs->data[0].time,0),obs->n); } #endif /* update rtk server */ if (ret>0) updatesvr(svr,ret,obs,nav,sat,sbsmsg,index,fobs); /* observation data received */ if (ret==1) { if (fobs<MAXOBSBUF) fobs++; else svr->prcout++; } } svr->nb[index]=0; rtksvrunlock(svr); return fobs; }