Разобрать и прочитать данные фрейма в C?

Я пишу программу, которая читает данные из последовательного порта в Linux. Данные отправляются другим устройством в следующем формате кадра:

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

Поле данных содержит 127 октетов, как показано, а октет 1,2 содержит данные одного типа; Октет 3,4 содержит другие данные. Мне нужно получить эти данные

Я знаю, как записывать и читать данные в последовательный порт в Linux и из него, но это просто писать и читать простую строку (например, «ABD»)

Моя проблема в том, что я не знаю, как проанализировать фрейм данных, отформатированный как указано выше, чтобы я мог:

получить данные в октете 1,2 в поле данныхполучить данные в октете 3,4 в поле данныхполучить значение в поле CRC для проверки согласованности данных

Вот пример снипп-кода, который читает и записывает простую строку с и на последовательный порт в 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;
}

Кто-нибудь, пожалуйста, есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос