Analisar e ler o quadro de dados em C?
Estou escrevendo um programa que lê os dados da porta serial no Linux. Os dados são enviados por outro dispositivo com o seguinte formato de quadro:
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
O campo Dados contém 127 octetos como mostrado e o octeto 1,2 contém um tipo de dados; o octeto 3,4 contém outros dados. Eu preciso pegar esses dados
Eu sei como gravar e ler dados de e para uma porta serial no Linux, mas é apenas para escrever e ler uma string simples (como "ABD")
Meu problema é que não sei como analisar o quadro de dados formatado como acima, para que eu possa:
obter os dados no octeto 1,2 no campo Dadosobter os dados no octeto 3,4 no campo Dadosobtenha o valor no campo CRC para verificar a consistência dos dadosAqui, o exemplo de código snip que lê e grava uma sequência simples de e para uma porta serial no Linux:
int writeport(int fd, char *chars) {
int len = strlen(chars);
chars[len] = 0x0d; // stick a <CR> after the command
chars[len+1] = 0x00; // terminate the string properly
int n = write(fd, chars, strlen(chars));
if (n < 0) {
fputs("write failed!\n", stderr);
return 0;
}
return 1;
}
int readport(int fd, char *result) {
int iIn = read(fd, result, 254);
result[iIn-1] = 0x00;
if (iIn < 0) {
if (errno == EAGAIN) {
printf("SERIAL EAGAIN ERROR\n");
return 0;
} else {
printf("SERIAL read error %d %s\n", errno, strerror(errno));
return 0;
}
}
return 1;
}
Alguém por favor tem algumas idéias?