19#include "pw_span/span.h"
37 constexpr Crc8(uint8_t polynomial,
38 uint8_t initial_value,
42 : polynomial_(polynomial),
43 initial_value_(initial_value),
44 reflect_in_(reflect_in),
45 reflect_out_(reflect_out),
70 const uint8_t polynomial_;
71 const uint8_t initial_value_;
72 const bool reflect_in_;
73 const bool reflect_out_;
74 const uint8_t xor_out_;
79constexpr uint8_t Reflect(uint8_t value) {
80 uint8_t reflected = 0;
81 for (uint8_t i = 0; i < 8; ++i) {
82 if ((value >> i) & 1) {
83 reflected |= 1 << (7 - i);
92 uint8_t crc = initial_value_;
93 for (std::byte
byte : data) {
94 uint8_t current_byte =
static_cast<uint8_t
>(byte);
96 current_byte = internal::Reflect(current_byte);
99 for (uint8_t i = 0; i < 8; ++i) {
101 crc =
static_cast<uint8_t
>((crc << 1) ^ polynomial_);
109 crc = internal::Reflect(crc);
112 return crc ^ xor_out_;
static const Crc8 kRohc
CRC-8/ROHC: poly=0x07, init=0xFF, refin=true, refout=true, xout=0x00.
Definition: crc8.h:67
static const Crc8 kCrc8
CRC-8: poly=0x07, init=0x00, refin=false, refout=false, xout=0x00.
Definition: crc8.h:55
static const Crc8 kItu
CRC-8/ITU: poly=0x07, init=0x00, refin=false, refout=false, xout=0x55.
Definition: crc8.h:64
constexpr Crc8(uint8_t polynomial, uint8_t initial_value, bool reflect_in, bool reflect_out, uint8_t xor_out)
Constructs a Crc8 calculator with the specified parameters.
Definition: crc8.h:37
static const Crc8 kMaxim
CRC-8/MAXIM: poly=0x31, init=0x00, refin=true, refout=true, xout=0x00.
Definition: crc8.h:58
constexpr uint8_t Calculate(pw::span< const std::byte > data) const
Calculates the CRC-8 value for the given data.
Definition: crc8.h:91
static const Crc8 kWcdma
CRC-8/WCDMA: poly=0x9B, init=0x00, refin=true, refout=true, xout=0x00.
Definition: crc8.h:61
Definition: span_impl.h:235
Checksum calculation library.
Definition: crc16_ccitt.h:41