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?
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
Post a Comment