10#ifndef M5_UTILITY_CRC_HPP
11#define M5_UTILITY_CRC_HPP
34 CRC8(
const uint8_t init,
const uint8_t polynomial,
const bool refIn,
const bool refOut,
const uint8_t xorout)
35 : _crc{init}, _init(init), _polynomial{polynomial}, _xorout{xorout}, _refIn{refIn}, _refOut{refOut}
44 inline uint8_t
range(
const uint8_t* data,
size_t len)
46 auto crc =
calculate(data, len, _init, _polynomial, _refIn, _refOut, _xorout,
false);
47 return finalize(crc, _refOut, _xorout);
58 inline uint8_t
update(
const uint8_t* data,
size_t len)
60 _crc =
calculate(data, len, _crc, _polynomial, _refIn, _refOut, _xorout,
false);
61 return finalize(_crc, _refOut, _xorout);
69 return finalize(_crc, _refOut, _xorout);
82 static uint8_t
calculate(
const uint8_t* data,
size_t len,
const uint8_t init,
const uint8_t polynomial,
83 const bool refIn,
const bool refOut,
const uint8_t xorout,
bool do_finalize =
true)
93 crc = (crc << 1) ^ polynomial;
99 return do_finalize ? finalize(crc, refOut, xorout) : crc;
103 static inline uint8_t finalize(
const uint8_t
value,
const bool refOut,
const uint8_t xorout)
109 uint8_t _crc{}, _init{}, _polynomial{}, _xorout{};
110 bool _refIn{}, _refOut{};
127 CRC16(
const uint16_t init,
const uint16_t polynomial,
const bool refIn,
const bool refOut,
const uint16_t xorout)
128 : _crc{init}, _init{init}, _polynomial{polynomial}, _xorout{xorout}, _refIn{refIn}, _refOut{refOut}
137 inline uint16_t
range(
const uint8_t* data,
size_t len)
139 auto crc =
calculate(data, len, _init, _polynomial, _refIn, _refOut, _xorout,
false);
140 return finalize(crc, _refOut, _xorout);
151 inline uint16_t
update(
const uint8_t* data,
size_t len)
153 _crc =
calculate(data, len, _crc, _polynomial, _refIn, _refOut, _xorout,
false);
154 return finalize(_crc, _refOut, _xorout);
162 return finalize(_crc, _refOut, _xorout);
175 static uint16_t
calculate(
const uint8_t* data,
size_t len,
const uint16_t init,
const uint16_t polynomial,
176 const bool refIn,
const bool refOut,
const uint16_t xorout,
bool do_finalize =
true)
186 crc = (crc << 1) ^ polynomial;
192 return do_finalize ? finalize(crc, refOut, xorout) : crc;
196 static inline uint16_t finalize(
const uint16_t
value,
const bool refOut,
const uint16_t xorout)
202 uint16_t _crc{}, _init{}, _polynomial{}, _xorout{};
203 bool _refIn{}, _refOut{};
Base class of the CRC16 calculator.
Definition crc.hpp:117
static uint16_t calculate(const uint8_t *data, size_t len, const uint16_t init, const uint16_t polynomial, const bool refIn, const bool refOut, const uint16_t xorout, bool do_finalize=true)
Calculate CRC16.
Definition crc.hpp:175
CRC16(const uint16_t init, const uint16_t polynomial, const bool refIn, const bool refOut, const uint16_t xorout)
Definition crc.hpp:127
uint16_t value() const
CRC value at the time of the call.
Definition crc.hpp:160
uint16_t range(const uint8_t *data, size_t len)
Calculate the CRC of the specified range.
Definition crc.hpp:137
uint16_t update(const uint8_t *data, size_t len)
Stores the CRC of the specified array using the current internal information.
Definition crc.hpp:151
Base class of the CRC8 calculator.
Definition crc.hpp:24
CRC8(const uint8_t init, const uint8_t polynomial, const bool refIn, const bool refOut, const uint8_t xorout)
Definition crc.hpp:34
uint8_t update(const uint8_t *data, size_t len)
Stores the CRC of the specified array using the current internal information.
Definition crc.hpp:58
uint8_t range(const uint8_t *data, size_t len)
Calculate the CRC of the specified range.
Definition crc.hpp:44
uint8_t value() const
CRC value at the time of the call.
Definition crc.hpp:67
static uint8_t calculate(const uint8_t *data, size_t len, const uint8_t init, const uint8_t polynomial, const bool refIn, const bool refOut, const uint8_t xorout, bool do_finalize=true)
Calculate CRC8.
Definition crc.hpp:82
uint8_t reverseBitOrder(const uint8_t u8)
Reversing the bit order.
Definition misc.hpp:28
Top level namespace of M5.
Definition bit_segment.hpp:17