omw  0.2.0
checksum.h
1 /*
2 author Oliver Blaser
3 date 25.01.2022
4 copyright MIT - Copyright (c) 2022 Oliver Blaser
5 */
6 
7 #ifndef IG_OMW_CHECKSUM_H
8 #define IG_OMW_CHECKSUM_H
9 
10 #include <cstddef>
11 #include <cstdint>
12 #include <vector>
13 
14 //#define OMWi_CHECKSUM_CRC_PREVIEW (1) // def/undef
15 
16 namespace omw
17 {
22 #ifdef OMWi_CHECKSUM_CRC_PREVIEW
23  template <class UI>
24  class CrcParameter
25  {
26  public:
27  constexpr CrcParameter(UI init, UI poly, bool refIn, bool refOut, UI xorOut)
28  : m_init(init), m_poly(poly), m_refIn(refIn), m_refOut(refOut), m_xorOut(xorOut)
29  {}
30 
31  constexpr UI init() const { return m_init; }
32  constexpr UI poly() const { return m_poly; }
33  constexpr bool refIn() const { return m_refIn; }
34  constexpr bool refOut() const { return m_refOut; }
35  constexpr UI xorOut() const { return m_xorOut; }
36 
37  private:
38  UI m_init;
39  UI m_poly;
40  bool m_refIn;
41  bool m_refOut;
42  UI m_xorOut;
43  };
44 
45  namespace crc16
46  {
47  constexpr omw::CrcParameter<uint16_t> kermitParam(0x0000, 0x1021, true, true, 0x0000);
48  constexpr omw::CrcParameter<uint16_t> modbusParam(0xFFFF, 0x8005, true, true, 0x0000);
49 
50  constexpr size_t tableSize = 256;
51  extern const uint16_t tableKermit[tableSize];
52  extern const uint16_t tableModbus[tableSize];
53 
54  uint16_t kermit(const uint8_t* data, size_t count);
55  uint16_t kermit(const std::vector<uint8_t>& data, std::vector<uint8_t>::size_type pos = 0, std::vector<uint8_t>::size_type count = -1);
56 
57  uint16_t modbus(const uint8_t* data, size_t count);
58  uint16_t modbus(const std::vector<uint8_t>& data, std::vector<uint8_t>::size_type pos = 0, std::vector<uint8_t>::size_type count = -1);
59  }
60 #endif // OMWi_CHECKSUM_CRC_PREVIEW
61 
62  uint8_t parityWord(const uint8_t* data, size_t count);
63  //uint8_t parityWord(const uint8_t* data, size_t count, uint8_t init);
64  uint8_t parityWord(const std::vector<uint8_t>& data, std::vector<uint8_t>::size_type pos = 0, std::vector<uint8_t>::size_type count = -1);
65  //uint8_t parityWord(const std::vector<uint8_t>& data, std::vector<uint8_t>::size_type pos = 0, std::vector<uint8_t>::size_type count = -1, uint8_t init);
66 
68 }
69 
70 #endif // IG_OMW_CHECKSUM_H
omw::parityWord
uint8_t parityWord(const uint8_t *data, size_t count)
Definition: checksum.cpp:87
omw
Main namespace.