c++ - parsing complete messages from serial port -


i trying read complete messages gps via serial port.

the message looking starts with:

0xb5 0x62 0x02 0x13 

so read serial port so

while (running !=0) {  int n = read (fd, input_buffer, sizeof input_buffer);    (int i=0; i<buffer_size; i++) {       if (input_buffer[i]==0xb5  && input_buffer[i+1]== 0x62 && input_buffer[i+2]== 0x02 && input_buffer[i+3]== 0x13    && i<(buffer_size-1) )      {               // process message.      }  } 

the problem having need complete message. half of message in buffer 1 iteration. , other half come message next iteration.

somebody suggested free buffer complete message. , move rest of data in buffer beginning of buffer.

how do or other way make sure every complete selected message comes in?

edit// enter image description here

i want particular class , id. can read in length

you can break read 3 parts. find start of message. length. read rest of message.

// should clear these in case data left on previous read input_buffer[0] = input_buffer[1] = 0;  // first make sure first char 0xb5 {     n = read(fd, input_buffer, 1);  } while (0xb5 != input_buffer[0]);  // check 2nd sync char n = read(fd, &input_buffer[1], 1);  if (input_buffer[1] != 0x62) {      // error      return; }  // read length n = read(fd, &input_buffer[2], 4);   // parse length //int length = *((int *)&input_buffer[4]); // since don't know size int on system, way better int length = input_buffer[4] | (input_buffer[5] << 8);  // read rest of message n = read(fd, &input_buffer[6], length);  // input_buffer should have complete message 

you should add error checking...


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -