embkernel
 All Classes Functions Variables Typedefs Groups Pages
LibCrc16.hpp
1 //------------------------------------------------------------------------------
2 //This file is part of embKernel.
3 //See license.txt for the full license governing this code.
4 //------------------------------------------------------------------------------
5 
6 #ifndef LIBCRC16_HPP_
7 #define LIBCRC16_HPP_
8 
9 #include <stdint.h>
10 #include <stddef.h>
11 
12 class LibCrc16 {
13 private:
14  const static uint8_t CRC_LOOKUP_HI[];
15  const static uint8_t CRC_LOOKUP_LO[];
16 
17 public:
18  static inline void update(uint8_t value, uint8_t* crcHi, uint8_t* crcLo) {
19  unsigned int idx = *crcLo ^ value; // calculate the CRC
20  *crcLo = *crcHi ^ CRC_LOOKUP_HI[idx];
21  *crcHi = CRC_LOOKUP_LO[idx];
22  }
23 
24  static void compute(const uint8_t* src, size_t len, uint8_t* crcHi, uint8_t* crcLo);
25 
26  static uint16_t compute(const uint8_t* src, size_t len);
27 };
28 
29 #endif /* LIBCRC16_HPP_ */