Декодирование двоичных данных из последовательного порта - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь связаться с платой Simplebgc через серийный номер на моем Raspberry Pi.Я пишу команды на плату, которая, кажется, работает, но мне нужна помощь в расшифровке двоичного ответа.Почему я получаю 23 байта, когда руководство, кажется, добавляет к 18?Я новичок как в C, так и в двоичном.

enter image description here

void sendCommand() {
    int fd;

    if ((fd = serialOpen ("/dev/ttyS0", 115200)) < 0) {
        //fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno));
        cout<<"Unable to open serial device"<<endl;
        return;
    }

    unsigned char motor_on[6] = {0x3E, 0x4D, 0x01, 0x4E,0x01, 0x01}; //MOTOR ON
    unsigned char motor_off[6] = {0x3E, 0x6D, 0x01, 0x6E,0x01, 0x01};  //MOTOR OFF
    unsigned char board_info[6] = {0x3E, 0x56, 0x01, 0x57, 0x01, 0x01};  //BOARD_INFO

    serialFlush(fd);

    // Send command to grab board info
    write(fd, board_info, 6);
    sleep(2);

    // Read board response and print it
    char c;
    int counter = 0;
    while (read(fd, &c, 1) == 1) {
        //putchar(c);  // print out char    
        printf("%d ",c);
        counter++;
    }
    cout<<"\ncounter="<<counter<<endl;
    sleep(5);


}

int main() {
    sendCommand();
    return 0;
}

вывод:

pi @ raspberrypi: ~ /myPrograms / SerialGPIOExamples / c ++ / SBGC_board $ ./serialSBGCTest 62 86 18 104 30 70 10 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 137 counter = 23

1 Ответ

0 голосов
/ 14 декабря 2018

Ответом является сообщение с заголовком:

Формат сообщения
Каждая команда состоит из заголовка и тела, оба с контрольной суммой.Команды с неправильным заголовком или контрольной суммой тела или с размером тела, который отличается от ожидаемого, должны игнорироваться.Парсер должен просканировать входящий поток данных на наличие следующего начального символа и попытаться восстановить синхронизацию из него.

Header:
    Start Character    1u
    Command ID         1u
    Payload Size       1u
    Header Checksum    1u
Body
    18 bytes as defined by you.
    Body Checksum      1u

Это дает вам 23 байта.4 байта заголовка.Тело.1 байтовая контрольная сумма тела.

...