VSM C++ SDK
Vehicle Specific Modules SDK
crc32.h
1 // Copyright (c) 2017, Smart Projects Holdings Ltd
2 // All rights reserved.
3 // See LICENSE file for license details.
4 
5 #ifndef SRC_CRC32_H_
6 #define SRC_CRC32_H_
7 
8 #include <stdint.h>
9 #include <stddef.h>
10 
11 namespace ugcs {
12 namespace vsm {
13 
14 class Crc32
15 {
16 public:
17 
18  void
19  Reset()
20  {
21  crc = 0xFFFFFFFF;
22  }
23 
24  uint32_t
25  Add_byte(uint8_t b)
26  {
27  crc = crc_tab[(crc ^ b) & 0xff] ^ (crc >> 8);
28  return ~crc;
29  }
30 
31  uint32_t
32  Add_short(uint16_t b)
33  {
34  return Add_buffer(&b, 2);
35  }
36 
37  uint32_t
38  Add_int(uint32_t b)
39  {
40  return Add_buffer(&b, 4);
41  }
42 
43  uint32_t
44  Add_buffer(void* b, size_t len)
45  {
46  auto buf = static_cast<uint8_t*>(b);
47  for (; len; --len, ++buf ) {
48  crc = crc_tab[(crc ^ (*buf)) & 0xff] ^ (crc >> 8);
49  }
50  return ~crc;
51  }
52 
53  uint32_t
54  Get()
55  {
56  return ~crc;
57  }
58 
59 private:
60 
61  uint32_t crc = 0xFFFFFFFF;
62  static uint32_t crc_tab[];
63 };
64 
65 } /* namespace vsm */
66 } /* namespace ugcs */
67 
68 #endif /* SRC_CRC32_H_ */
UGCS root namespace.
Definition: android-linux/ugcs/vsm/platform_sockets.h:27
Definition: crc32.h:14