Datenrahmen in C analysieren und lesen?

Ich schreibe ein Programm, das die Daten von der seriellen Schnittstelle unter Linux liest. Die Daten werden von einem anderen Gerät im folgenden Frame-Format gesendet:

|start | Command | Data               | CRC  | End |
|0x02  | 0x41    | (0-127 octets)     |      | 0x03|
----------------------------------------------------

Das Datenfeld enthält 127 Oktette, wie gezeigt, und Oktett 1,2 enthält einen Datentyp. Oktett 3,4 enthält weitere Daten. Ich muss diese Daten bekommen

Ich kann Daten von und zu einer seriellen Schnittstelle in Linux schreiben und lesen, aber es ist nur eine einfache Zeichenfolge zu schreiben und zu lesen (wie "ABD")

Mein Problem ist, dass ich nicht weiß, wie ich den wie oben formatierten Datenrahmen analysieren soll, damit ich:

Rufen Sie die Daten in Oktett 1,2 im Feld Daten abHolen Sie sich die Daten in Oktett 3,4 im Feld DatenRufen Sie den Wert im CRC-Feld ab, um die Konsistenz der Daten zu überprüfen

Hier der Beispiel-Snip-Code, der eine einfache Zeichenfolge von und zu einer seriellen Schnittstelle in Linux liest und schreibt:

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

Hat jemand bitte ein paar Ideen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage