analizar mensajes completos desde el puerto serie

Estoy tratando de leer mensajes completos de mi GPS a través del puerto serie.

El mensaje que estoy buscando comienza con:

0xB5 0x62 0x02 0x13

Así que leí desde el puerto serie así

while (running !=0)
{

int n = read (fd, input_buffer, sizeof input_buffer); 


for (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 the message.
     }

}

El problema que tengo es que necesito recibir un mensaje completo. La mitad de un mensaje podría estar en el búfer una iteración. Y la otra mitad podría entrar en el mensaje la próxima iteración.

Alguien sugirió que libere el búfer del mensaje completo. Y luego muevo el resto de los datos en el búfer al comienzo del búfer.

¿Cómo hago eso o cualquier otra forma que me asegure de recibir cada mensaje seleccionado completo que viene?

editar//

Quiero una clase e identificación en particular. Pero también puedo leer a lo largo

Respuestas a la pregunta(2)

Su respuesta a la pregunta