Пример #1
0
/* 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;
}
Пример #2
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;
}