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?
Eu quero uma classe e ID específicos. Mas eu também posso ler no comprimento