Как вычислить контрольную сумму в Arduino / C ++? - PullRequest
2 голосов
/ 22 марта 2020

Я разрабатываю интерфейс ESP32 (Arduino) для связи с устройством отпечатков пальцев. Но я понятия не имею о контрольной сумме. Я нашел документацию для устройства Fingerprint, как показано ниже.

enter image description here

Например, следуют некоторые пакеты данных:

enter image description here

Здесь контрольная сумма соответствующих пакетов команд. 06 01, F7 02, FA 02, F8 03, FA 02, F9 03

Мой вопрос: как я могу вычислить контрольную сумму для нового пакета данных в Arduino / C ++, например :

пакет данных:

AA 55 04 01 04 00 00 00 F4 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ??

Каким будет процесс?

Спасибо!

1 Ответ

1 голос
/ 22 марта 2020

Спецификация очень плохо написана и расплывчата, но просто сложение всех байтов в сообщении и взятие младших 2 байтов результата, кажется, приводит к правильной контрольной сумме:

#include <vector>
#include <cstdint>
#include <iostream>
#include <iomanip>

int main()
{
    std::vector<uint8_t> data{ 0x55, 0xaa, 0x03, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
    int sum = 0;
    for (auto x : data)
    {
        sum += x;
    }
    uint8_t sum1 = static_cast<uint8_t>(sum & 0xFF);
    uint8_t sum2 = static_cast<uint8_t>((sum >> 8) & 0xFF);
    std::cout << std::setfill('0') << std::hex <<
        std::setw(2) << static_cast<int>(sum1) << " " <<
        std::setw(2) << static_cast<int>(sum2) << "\n";
}
...