parsing complete messages from serial port

前端 未结 2 1373
有刺的猬
有刺的猬 2020-12-01 22:36

I am trying to read complete messages from my GPS via serial port.

The message I am looking for starts with:

0xB5 0x62 0x02 0x13

S

2条回答
  •  余生分开走
    2020-12-01 23:28

    You can break the read into three parts. Find the start of a message. Then get the LENGTH. Then read the rest of the message.

    // Should probably clear these in case data left over from a previous read
    input_buffer[0] = input_buffer[1] = 0;
    
    // First make sure first char is 0xB5
    do {
        n = read(fd, input_buffer, 1); 
    } while (0xB5 != input_buffer[0]);
    
    // Check for 2nd sync char
    n = read(fd, &input_buffer[1], 1);
    
    if (input_buffer[1] != 0x62) {
         // Error
         return;
    }
    
    // Read up to LENGTH
    n = read(fd, &input_buffer[2], 4); 
    
    // Parse length
    //int length = *((int *)&input_buffer[4]);
    // Since I don't know what size an int is on your system, this way is better
    int length = input_buffer[4] | (input_buffer[5] << 8);
    
    // Read rest of message
    n = read(fd, &input_buffer[6], length);
    
    // input_buffer should now have a complete message
    

    You should add error checking...

提交回复
热议问题