Documentation
Tools for embedded systems
Loading...
Searching...
No Matches
crc.hpp
1
9#ifndef QLIBS_CRC
10#define QLIBS_CRC
11
12#include <include/qlibs_types.hpp>
13
17namespace qlibs {
27 enum crcMode {
28 CRC8 = 0,
31 };
32
33 class crc {
34 private:
35 static uint32_t reflect( uint32_t xData,
36 const uint8_t nBits ) noexcept;
37 crc() = default;
38 public:
39
55 static uint32_t generic( crcMode mode,
56 const void * const pData,
57 const size_t length,
58 uint32_t poly,
59 const uint32_t init = 0U,
60 bool refIn = false,
61 bool refOut = false,
62 uint32_t xorOut = 0U ) noexcept;
63
71 static inline uint8_t crc8( const void * const pData, const size_t length ) noexcept
72 {
73 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x07U ) );
74 }
75
83 static inline uint8_t crc8_CDMA2000( const void * const pData, const size_t length ) noexcept
84 {
85 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x9BU, 0xFFU ) );
86 }
87
95 static inline uint8_t crc8_DARC( const void * const pData, const size_t length ) noexcept
96 {
97 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x39U, 0U, true, true ) );
98 }
99
107 static inline uint8_t crc8_DVS_S2( const void * const pData, const size_t length ) noexcept
108 {
109 return static_cast<uint8_t>( generic( CRC8, pData, length, 0xD5U ) );
110 }
111
119 static inline uint8_t crc8_EBU( const void * const pData, const size_t length ) noexcept
120 {
121 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x1DU, 0xFFU, true, true ) );
122 }
123
131 static inline uint8_t crc8_I_CODE( const void * const pData, const size_t length ) noexcept
132 {
133 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x1DU, 0xFDU ) );
134 }
135
143 static inline uint8_t crc8_ITU( const void * const pData, const size_t length ) noexcept
144 {
145 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x07U, 0U, false, false, 0x55U ) );
146 }
147
155 static inline uint8_t crc8_MAXIM( const void * const pData, const size_t length ) noexcept
156 {
157 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x31U, 0U, true, true ) );
158 }
159
167 static inline uint8_t crc8_ROHC( const void * const pData, const size_t length ) noexcept
168 {
169 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x07U, 0xFFU, true, true ) );
170 }
171
179 static inline uint8_t crc8_WCDMA( const void * const pData, const size_t length ) noexcept
180 {
181 return static_cast<uint8_t>( generic( CRC8, pData, length, 0x9BU, 0U, true, true ) );
182 }
183
191 static inline uint16_t crc16_CCITT_FALSE( const void * const pData, const size_t length ) noexcept
192 {
193 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0xFFFFU ) );
194 }
195
203 static inline uint16_t crc16_ARC( const void * const pData, const size_t length ) noexcept
204 {
205 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x8005U, 0U, true, true ) );
206 }
207
215 static inline uint16_t crc16_AUG_CCITT( const void * const pData, const size_t length ) noexcept
216 {
217 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0x1D0FU ) );
218 }
219
227 static inline uint16_t crc16_BUYPASS( const void * const pData, const size_t length ) noexcept
228 {
229 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x8005U ) );
230 }
231
239 static inline uint16_t crc16_CDMA2000( const void * const pData, const size_t length ) noexcept
240 {
241 return static_cast<uint16_t>( generic( CRC16, pData, length, 0xC867U, 0xFFFFU ) );
242 }
243
251 static inline uint16_t crc16_DDS_110( const void * const pData, const size_t length ) noexcept
252 {
253 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x8005U, 0x800DU ) );
254 }
255
263 static inline uint16_t crc16_DECT_R( const void * const pData, const size_t length ) noexcept
264 {
265 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x0589U, 0U, false, false, 0x0001U ) );
266 }
267
275 static inline uint16_t crc16_DECT_X( const void * const pData, const size_t length ) noexcept
276 {
277 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x0589U ) );
278 }
279
287 static inline uint16_t crc16_DNP( const void * const pData, const size_t length ) noexcept
288 {
289 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x3D65U, 0U, true, true, 0xFFFFU ) );
290 }
291
299 static inline uint16_t crc16_EN_13757( const void * const pData, const size_t length ) noexcept
300 {
301 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x3D65U, 0U, false, false, 0xFFFFU ) );
302 }
303
311 static inline uint16_t crc16_GENIBUS( const void * const pData, const size_t length ) noexcept
312 {
313 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0xFFFFU, false, false, 0xFFFFU ) );
314 }
315
323 static inline uint16_t crc16_MAXIM( const void * const pData, const size_t length ) noexcept
324 {
325 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x8005U, 0U, true, true, 0xFFFFU ) );
326 }
327
335 static inline uint16_t crc16_MCRF4XX( const void * const pData, const size_t length ) noexcept
336 {
337 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0xFFFFU, true, true ) );
338 }
339
347 static inline uint16_t crc16_RIELLO( const void * const pData, const size_t length ) noexcept
348 {
349 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0xB2AAU, true, true ) );
350 }
351
359 static inline uint16_t crc16_T10_DIF( const void * const pData, const size_t length ) noexcept
360 {
361 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x8BB7U ) );
362 }
363
371 static inline uint16_t crc16_TELEDISK( const void * const pData, const size_t length ) noexcept
372 {
373 return static_cast<uint16_t>( generic( CRC16, pData, length, 0xA097U ) );
374 }
375
383 static inline uint16_t crc16_TMS37157( const void * const pData, const size_t length ) noexcept
384 {
385 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0x89ECU, true, true ) );
386 }
387
395 static inline uint16_t crc16_USB( const void * const pData, const size_t length ) noexcept
396 {
397 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x8005U, 0xFFFFU, true, true, 0xFFFFU ) );
398 }
399
407 static inline uint16_t crc16_A( const void * const pData, const size_t length ) noexcept
408 {
409 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0xc6c6U, true, true ) );
410 }
411
419 static inline uint16_t crc16_KERMIT( const void * const pData, const size_t length ) noexcept
420 {
421 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0U, true, true ) );
422 }
423
431 static inline uint16_t crc16_MODBUS( const void * const pData, const size_t length ) noexcept
432 {
433 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x8005U, 0xFFFFU, true, true ) );
434 }
435
443 static inline uint16_t crc16_X_25( const void * const pData, const size_t length ) noexcept
444 {
445 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U, 0xFFFFU, true, true, 0xFFFFU ) );
446 }
447
455 static inline uint16_t crc16_XMODEM( const void * const pData, const size_t length ) noexcept
456 {
457 return static_cast<uint16_t>( generic( CRC16, pData, length, 0x1021U ) );
458 }
459
467 static inline uint32_t crc32( const void * const pData, const size_t length ) noexcept
468 {
469 return generic( CRC32, pData, length, 0x04C11DB7U, 0xFFFFFFFFU, true, true, 0xFFFFFFFFU );
470 }
471
479 static inline uint32_t crc32_BZIP2( const void * const pData, const size_t length ) noexcept
480 {
481 return generic( CRC32, pData, length, 0x04C11DB7U, 0xFFFFFFFFU, false, false, 0xFFFFFFFFU );
482 }
483
491 static inline uint32_t crc32_C( const void * const pData, const size_t length ) noexcept
492 {
493 return generic( CRC32, pData, length, 0x1EDC6F41U, 0xFFFFFFFFU, true, true, 0xFFFFFFFFU );
494 }
495
503 static inline uint32_t crc32_D( const void * const pData, const size_t length ) noexcept
504 {
505 return generic( CRC32, pData, length, 0xA833982BU, 0xFFFFFFFFU, true, true, 0xFFFFFFFFU );
506 }
507
515 static inline uint32_t crc32_JAMCRC( const void * const pData, const size_t length ) noexcept
516 {
517 return generic( CRC32, pData, length, 0x04C11DB7U, 0xFFFFFFFFU, true, true );
518 }
519
527 static inline uint32_t crc32_MPEG2( const void * const pData, const size_t length ) noexcept
528 {
529 return generic( CRC32, pData, length, 0x04C11DB7U, 0xFFFFFFFFU );
530 }
531
539 static inline uint32_t crc32_POSIX( const void * const pData, const size_t length ) noexcept
540 {
541 return generic( CRC32, pData, length, 0x04C11DB7U, 0U, false, false, 0xFFFFFFFFU );
542 }
543
551 static inline uint32_t crc32_Q( const void * const pData, const size_t length ) noexcept
552 {
553 return generic( CRC32, pData, length, 0x814141ABU );
554 }
555
563 static inline uint32_t crc32_XFER( const void * const pData, const size_t length ) noexcept
564 {
565 return generic( CRC32, pData, length, 0x000000AFU );
566 }
567 };
568
570}
571
572
573
574#endif /*QLIBS_CRC*/
Definition crc.hpp:33
static uint8_t crc8_WCDMA(const void *const pData, const size_t length) noexcept
CRC-8/WCDMA with poly = 0x9B init = 0x00 refIn = true refOut = true xorOut= 0x00.
Definition crc.hpp:179
static uint8_t crc8_CDMA2000(const void *const pData, const size_t length) noexcept
CRC-8/CDMA2000 with poly = 0x9B init = 0xFF refIn = false refOut = false xorOut= 0x00.
Definition crc.hpp:83
static uint8_t crc8_DVS_S2(const void *const pData, const size_t length) noexcept
CRC-8/DVS-S2 with poly = 0xD5 init = 0x00 refIn = false refOut = false xorOut= 0x00.
Definition crc.hpp:107
static uint16_t crc16_CDMA2000(const void *const pData, const size_t length) noexcept
CRC-16/CDMA2000 with poly = 0xC867 init = 0xFFFF refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:239
static uint16_t crc16_TELEDISK(const void *const pData, const size_t length) noexcept
CRC-16/TELEDISK with poly = 0xA097 init = 0x0000 refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:371
static uint32_t crc32_C(const void *const pData, const size_t length) noexcept
CRC-32C with poly = 0x1EDC6F41 init = 0xFFFFFFFF refIn = true refOut = true xorOut= 0xFFFFFFFF.
Definition crc.hpp:491
static uint8_t crc8(const void *const pData, const size_t length) noexcept
CRC-8 with poly = 0x07 init = 0x00 refIn = false refOut = false xorOut= 0x00.
Definition crc.hpp:71
static uint16_t crc16_TMS37157(const void *const pData, const size_t length) noexcept
CRC-16/TMS37157 with poly = 0x1021 init = 0x89EC refIn = true refOut = true xorOut= 0x000.
Definition crc.hpp:383
static uint32_t crc32_XFER(const void *const pData, const size_t length) noexcept
CRC-32/XFER with poly = 0x000000AF init = 0x00000000 refIn = false refOut = false xorOut= 0x00000000.
Definition crc.hpp:563
static uint16_t crc16_X_25(const void *const pData, const size_t length) noexcept
CRC-16/X-25 with poly = 0x1021 init = 0xFFFF refIn = true refOut = true xorOut= 0xFFFF.
Definition crc.hpp:443
static uint16_t crc16_ARC(const void *const pData, const size_t length) noexcept
CRC-16/ARC with poly = 0x8005 init = 0x0000 refIn = true refOut = true xorOut= 0x0000.
Definition crc.hpp:203
static uint16_t crc16_XMODEM(const void *const pData, const size_t length) noexcept
CRC-16/XMODEM with poly = 0x1021 init = 0x0000 refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:455
static uint16_t crc16_MODBUS(const void *const pData, const size_t length) noexcept
CRC-16/MODBUS with poly = 0x8005 init = 0xFFFF refIn = true refOut = true xorOut= 0x0000.
Definition crc.hpp:431
static uint16_t crc16_DDS_110(const void *const pData, const size_t length) noexcept
CRC-16/DDS-110 with poly = 0x8005 init = 0x800D refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:251
static uint8_t crc8_EBU(const void *const pData, const size_t length) noexcept
CRC-8/EBU with poly = 0x1D init = 0xFF refIn = true refOut = true xorOut= 0x00.
Definition crc.hpp:119
static uint16_t crc16_MAXIM(const void *const pData, const size_t length) noexcept
CRC-16/MAXIM with poly = 0x8005 init = 0x0000 refIn = true refOut = true xorOut= 0xFFFF.
Definition crc.hpp:323
static uint16_t crc16_DECT_X(const void *const pData, const size_t length) noexcept
CRC-16/DECT-X with poly = 0x0589 init = 0x0000 refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:275
static uint16_t crc16_EN_13757(const void *const pData, const size_t length) noexcept
CRC-16/EN-13757 with poly = 0x3D65 init = 0x0000 refIn = false refOut = false xorOut= 0xFFFF.
Definition crc.hpp:299
static uint16_t crc16_T10_DIF(const void *const pData, const size_t length) noexcept
CRC-16/DECT-X with poly = 0x8bb7 init = 0x0000 refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:359
static uint32_t crc32_MPEG2(const void *const pData, const size_t length) noexcept
CRC-32/MPEG2 with poly = 0x04C11DB7 init = 0xFFFFFFFF refIn = false refOut = false xorOut= 0x00000000...
Definition crc.hpp:527
static uint8_t crc8_MAXIM(const void *const pData, const size_t length) noexcept
CRC-8/MAXIM with poly = 0x31 init = 0x00 refIn = true refOut = true xorOut= 0x00.
Definition crc.hpp:155
static uint16_t crc16_CCITT_FALSE(const void *const pData, const size_t length) noexcept
CRC-16/CCITT-FALSE with poly = 0x1021 init = 0xFFFF refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:191
static uint16_t crc16_BUYPASS(const void *const pData, const size_t length) noexcept
CRC-16/BUYPASS with poly = 0x8005 init = 0x0000 refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:227
static uint32_t crc32_JAMCRC(const void *const pData, const size_t length) noexcept
CRC-32/JAMCRC with poly = 0x04C11DB7 init = 0xFFFFFFFF refIn = true refOut = true xorOut= 0x00000000.
Definition crc.hpp:515
static uint16_t crc16_A(const void *const pData, const size_t length) noexcept
CRC-A with poly = 0x1021 init = 0xC6C6 refIn = true refOut = true xorOut= 0x0000.
Definition crc.hpp:407
static uint16_t crc16_GENIBUS(const void *const pData, const size_t length) noexcept
CRC-16/GENIBUS with poly = 0x1021 init = 0xFFFF refIn = false refOut = false xorOut= 0xFFFF.
Definition crc.hpp:311
static uint32_t crc32_BZIP2(const void *const pData, const size_t length) noexcept
CRC-32/BZIP2 with poly = 0x04C11DB7 init = 0xFFFFFFFF refIn = false refOut = false xorOut= 0xFFFFFFFF...
Definition crc.hpp:479
static uint32_t crc32_D(const void *const pData, const size_t length) noexcept
CRC-32D with poly = 0xA833982B init = 0xFFFFFFFF refIn = true refOut = true xorOut= 0xFFFFFFFF.
Definition crc.hpp:503
static uint8_t crc8_ROHC(const void *const pData, const size_t length) noexcept
CRC-8/ROHC with poly = 0x07 init = 0xFF refIn = true refOut = true xorOut= 0x00.
Definition crc.hpp:167
static uint16_t crc16_AUG_CCITT(const void *const pData, const size_t length) noexcept
CRC-16/AUG-CCITT with poly = 0x1021 init = 0x1D0F refIn = false refOut = false xorOut= 0x0000.
Definition crc.hpp:215
static uint32_t crc32(const void *const pData, const size_t length) noexcept
CRC-32 with poly = 0x04C11DB7 init = 0xFFFFFFFF refIn = true refOut = true xorOut= 0xFFFFFFFF.
Definition crc.hpp:467
static uint16_t crc16_DNP(const void *const pData, const size_t length) noexcept
CRC-16/DNP with poly = 0x3D98 init = 0x0000 refIn = true refOut = true xorOut= 0xFFFF.
Definition crc.hpp:287
static uint32_t crc32_Q(const void *const pData, const size_t length) noexcept
CRC-32Q with poly = 0x814141AB init = 0x00000000 refIn = false refOut = false xorOut= 0x00000000.
Definition crc.hpp:551
static uint8_t crc8_ITU(const void *const pData, const size_t length) noexcept
CRC-8/ITU with poly = 0x07 init = 0x00 refIn = false refOut = false xorOut= 0x55.
Definition crc.hpp:143
static uint8_t crc8_DARC(const void *const pData, const size_t length) noexcept
CRC-8/DARC with poly = 0x39 init = 0x00 refIn = true refOut = true xorOut= 0x00.
Definition crc.hpp:95
static uint16_t crc16_RIELLO(const void *const pData, const size_t length) noexcept
CRC-16/RIELLO with poly = 0x1021 init = 0xB2AA refIn = true refOut = true xorOut= 0x0000.
Definition crc.hpp:347
static uint32_t crc32_POSIX(const void *const pData, const size_t length) noexcept
CRC-32/POSIX with poly = 0x04C11DB7 init = 0x00000000 refIn = false refOut = false xorOut= 0xFFFFFFFF...
Definition crc.hpp:539
static uint8_t crc8_I_CODE(const void *const pData, const size_t length) noexcept
CRC-8/I-CODE with poly = 0x1D init = 0xFD refIn = false refOut = false xorOut= 0x00.
Definition crc.hpp:131
static uint16_t crc16_DECT_R(const void *const pData, const size_t length) noexcept
CRC-16/DECT-R with poly = 0x0589 init = 0x0000 refIn = false refOut = false xorOut= 0x0001.
Definition crc.hpp:263
static uint16_t crc16_KERMIT(const void *const pData, const size_t length) noexcept
CRC-16/KERMIT with poly = 0x1021 init = 0x0000 refIn = true refOut = true xorOut= 0x000.
Definition crc.hpp:419
static uint16_t crc16_USB(const void *const pData, const size_t length) noexcept
CRC-16/USB with poly = 0x8005 init = 0xFFFF refIn = true refOut = true xorOut= 0xFFFF.
Definition crc.hpp:395
static uint16_t crc16_MCRF4XX(const void *const pData, const size_t length) noexcept
CRC-16/MCRF4XX with poly = 0x1021 init = 0xFFFF refIn = true refOut = true xorOut= 0x0000.
Definition crc.hpp:335
crcMode
Enumeration with all the supported cyclic redundancy checks.
Definition crc.hpp:27
@ CRC8
Definition crc.hpp:28
@ CRC32
Definition crc.hpp:30
@ CRC16
Definition crc.hpp:29
The qLibs++ library namespace.
Definition fp16.cpp:4