analisando mensagens completas da porta serial

Estou tentando ler mensagens completas do meu GPS via porta serial.

A mensagem que estou procurando começa com:

0xB5 0x62 0x02 0x13

Então eu li da porta serial assim

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.
     }

}

O problema que estou tendo é que preciso receber uma mensagem completa. Metade de uma mensagem pode estar no buffer uma iteração. E a outra metade pode entrar na mensagem na próxima iteração.

Alguém sugeriu que liberte o buffer da mensagem completa. E então movo o restante dos dados no buffer para o início do buffer.

Como faço isso ou qualquer outra maneira para garantir que recebo todas as mensagens selecionadas completas que chegam?

editar//

Eu quero uma classe e ID específicos. Mas eu também posso ler no comprimento

questionAnswers(2)

yourAnswerToTheQuestion