Exemplo n.º 1
0
/* 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);
}
Exemplo n.º 2
0
/*--- 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;
}
Exemplo n.º 3
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);
}