/* 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; }
int decode_raw(rtksvr_t* svr, int index) { uint8_t* i; Error err; char str[20]; int res=0,res2=0,res3=0; switch (svr->format[index]) { case STRFMT_UBX: { if (svr->buffPtr[index] + svr->nb[index] <= MAX_RAW_LEN) { for (i = svr->buff[index] + svr->buffPtr[index] ; i < svr->buff[index] + svr->buffPtr[index] + svr->nb[index]; i++) { err = input_ubx(&svr->raw[index],*i); if (err>=NO_ERROR1) { updatesvr(svr,err,index); if (err==OBS) { res+=1; } else if (err==EPHEMERIS) { res2+=1; } else if (err==SOLUTION) { res3+=1; } } } } else { for (i = svr->buff[index] + svr->buffPtr[index] ; i < svr->buff[index] + MAX_RAW_LEN; i++) { err = input_ubx(&svr->raw[index],*i); if (err>=NO_ERROR1) { updatesvr(svr,err,index); if (err==OBS) { res+=1; } else if (err==EPHEMERIS) { res2+=1; } else if (err==SOLUTION) { res3+=1; } } } for (i = svr->buff[index] ; i < svr->buff[index] + svr->nb[index] + svr->buffPtr[index] - MAX_RAW_LEN ; i++) { err = input_ubx(&svr->raw[index],*i); if (err>=NO_ERROR1) { updatesvr(svr,err,index); if (err==OBS) { res+=1; } else if (err==EPHEMERIS) { res2+=1; } else if (err==SOLUTION) { res3+=1; } } } } break; } case STRFMT_SS2: { if (svr->buffPtr[index] + svr->nb[index] <= MAX_RAW_LEN) { for (i = svr->buff[index] + svr->buffPtr[index] ; i < svr->buff[index] + svr->buffPtr[index] + svr->nb[index]; i++) { err = input_ss2(&svr->raw[index],*i); if (err>=NO_ERROR1) { updatesvr(svr,err,index); if (err==OBS) { res+=1; } else if (err==EPHEMERIS) { res2+=1; } else if (err==SOLUTION) { res3+=1; } } } } else { for (i = svr->buff[index] + svr->buffPtr[index] ; i < svr->buff[index] + MAX_RAW_LEN; i++) { err = input_ss2(&svr->raw[index],*i); if (err>=NO_ERROR1) { updatesvr(svr,err,index); if (err==OBS) { res+=1; } else if (err==EPHEMERIS) { res2+=1; } else if (err==SOLUTION) { res3+=1; } } } for (i = svr->buff[index] ; i < svr->buff[index] + svr->nb[index] + svr->buffPtr[index] - MAX_RAW_LEN ; i++) { err = input_ss2(&svr->raw[index],*i); if (err>=NO_ERROR1) { updatesvr(svr,err,index); if (err==OBS) { res+=1; } else if (err==EPHEMERIS) { res2+=1; } else if (err==SOLUTION) { res3+=1; } } } } break; } } /* if (index==0) { sprintf(str,"%d,%d,%d\r\n",res,res2,res3); SendStr(str); } */ return res; }