/* 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_ubx is supposed to be called from tread ---*/ int input_ubx(tUbxRawData *raw, unsigned char data) { /* synchronize frame */ if (raw->nbyte == 0) { if (!sync_ubx(raw->buff, data)) return 0; raw->nbyte=2; return 0; /* wait for new bytes join in */ } raw->buff[raw->nbyte++]=data; if (raw->nbyte == UBX_MSGSTART_SHIFT) { raw->length = U2(raw->buff+4) + 8; if (raw->length > MAXRAWLEN) { raw->nbyte = 0; return -1; } } if((raw->nbyte < UBX_MSGSTART_SHIFT) || (raw->nbyte < raw->length)) return 0; /* return until length is satisfied */ raw->nbyte = 0; raw->frameReady = TRUE; memcpy(&readyRawUbx, raw, sizeof(tUbxRawData)); return 0; }
/* 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); }