コード例 #1
0
ファイル: ublox.c プロジェクト: aamalik/gnss-master
/* input ublox raw message from file -------------------------------------------
* fetch next ublox raw data and input a message from file
* args   : raw_t  *raw   IO     receiver raw data control struct
*          FILE   *fp    I      file pointer
* return : status(-2: end of file, -1...9: same as above)
*-----------------------------------------------------------------------------*/
extern int input_ubxf(raw_t *raw, FILE *fp)
{
    int i,data;
    
    trace(4,"input_ubxf:\n");
    
    /* synchronize frame */
    if (raw->nbyte==0) {
        for (i=0;;i++) {
            if ((data=fgetc(fp))==EOF) return -2;
            if (sync_ubx(raw->buff,(unsigned char)data)) break;
            if (i>=4096) return 0;
        }
    }
    if (fread(raw->buff+2,1,4,fp)<4) return -2;
    raw->nbyte=6;
    
    if ((raw->len=U2(raw->buff+4)+8)>MAXRAWLEN) {
        trace(2,"ubx length error: len=%d\n",raw->len);
        raw->nbyte=0;
        return -1;
    }
    if (fread(raw->buff+6,1,raw->len-6,fp)<(size_t)(raw->len-6)) return -2;
    raw->nbyte=0;
    
    /* decode ubx raw message */
    return decode_ubx(raw);
}
コード例 #2
0
ファイル: ublox.c プロジェクト: aamalik/gnss-master
/* input ublox raw message from stream -----------------------------------------
* fetch next ublox raw data and input a mesasge from stream
* args   : raw_t *raw   IO     receiver raw data control struct
*            raw->opt : u-blox raw options
*                "-invcp" : inversed polarity of carrier-phase
*                "-EPHALL"  : output all ephemerides
*          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)
*-----------------------------------------------------------------------------*/
extern int input_ubx(raw_t *raw, unsigned char data)
{
    trace(5,"input_ubx: data=%02x\n",data);
    
    /* synchronize frame */
    if (raw->nbyte==0) {
        if (!sync_ubx(raw->buff,data)) return 0;
        raw->nbyte=2;
        return 0;
    }
    raw->buff[raw->nbyte++]=data;
    
    if (raw->nbyte==6) {
        if ((raw->len=U2(raw->buff+4)+8)>MAXRAWLEN) {
            trace(2,"ubx length error: len=%d\n",raw->len);
            raw->nbyte=0;
            return -1;
        }
    }
    if (raw->nbyte<6||raw->nbyte<raw->len) return 0;
    raw->nbyte=0;
    
    /* decode ublox raw message */
    return decode_ubx(raw);
}
コード例 #3
0
ファイル: ubx.c プロジェクト: shanwu12/my_design
/*!
 *	@brief This function is decode ubxRawData
 *	@param : null
 *	@return : 0: succed;others:error 
 */ 
int Decode_UbxData(void)
{
	int  rtn;
	int type; 

//	if(ubxRawDataWrPt == ubxRawDataRdPt)  
//		return -1;
	rtn = 0;
	if(ubxRawData.frameReady!=TRUE)
		return -1;
	
	if(decode_ubx(&readyRawUbx)==0)
	{
	    type = readyRawUbx.buff[2];
	    type = (type<<8) + readyRawUbx.buff[3];
	    switch(type)
	    {
           case ID_NAVPVT:
               ubxRawDataRcvStatus |= UBX_ID_NAVPVT;
	        break;
           case ID_NAVCLK:
               ubxRawDataRcvStatus |= UBX_ID_NAVCLK;
	        break;
           case ID_NAVCOV:
               ubxRawDataRcvStatus |= UBX_ID_NAVCOV;
	        break;
           case ID_NAVSAT:
               ubxRawDataRcvStatus |= UBX_ID_NAVSAT;
	        break;
           case ID_NAVGPSTIME :
               ubxRawDataRcvStatus |= UBX_ID_NAVGPSTIME;
	        break;
           case ID_RXMRAWX : 
               ubxRawDataRcvStatus |= UBX_ID_RXMRAWX;
	        break;
           case ID_TRKD5   : 
               ubxRawDataRcvStatus |= UBX_ID_TRKD5;
	        break;
	     default:
		 break;
	    }
	    
        if((ubxRawDataRcvStatus&DECODE_UBX_MASK)==DECODE_UBX_MASK)
	    {
           ubxRawDataReadyflag = TRUE;
	    }
	}
	
	ubxRawDataRdPt = (ubxRawDataRdPt+1)%UBX_TYPE_MAX;
	
	return(rtn);
}