/* input receiver raw data from stream ----------------------------------------- * fetch next receiver raw data and input a message from stream * args : raw_t *raw IO receiver raw data control struct * int format I receiver raw data format (STRFMT_???) * unsigned char data I stream data (1 byte) * return : status (-1: error message, 0: no message, 1: input observation data, * 2: input ephemeris, 3: input sbas message, * 9: input ion/utc parameter, 31: input lex message) *-----------------------------------------------------------------------------*/ extern int input_raw(raw_t *raw, int format, unsigned char data) { trace(5,"input_raw: format=%d data=0x%02x\n",format,data); switch (format) { case STRFMT_OEM4 : return input_oem4 (raw,data); case STRFMT_OEM3 : return input_oem3 (raw,data); case STRFMT_UBX : return input_ubx (raw,data); case STRFMT_SS2 : return input_ss2 (raw,data); case STRFMT_CRES : return input_cres (raw,data); case STRFMT_STQ : return input_stq (raw,data); case STRFMT_GW10 : return input_gw10 (raw,data); case STRFMT_JAVAD: return input_javad(raw,data); case STRFMT_NVS : return input_nvs (raw,data); case STRFMT_LEXR : return input_lexr (raw,data); } return 0; }
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; }