/* 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); }
/* 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); }
/*! * @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); }