-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCRC8.cpp
32 lines (26 loc) · 894 Bytes
/
CRC8.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "CRC8.h"
namespace romiserial {
uint8_t CRC8::table_[256];
bool CRC8::table_initialized_ = false;
CRC8::CRC8() : crc_(0)
{
init_table(0x07);
}
void CRC8::init_table(uint8_t poly)
{
if (!table_initialized_) {
do_init_table(poly);
table_initialized_ = true;
}
}
void CRC8::do_init_table(uint8_t poly)
{
uint8_t crc;
for (uint16_t i = 0; i <= UINT8_MAX; i++) {
crc = (uint8_t) i;
for (uint8_t j = 0; j < 8; j++)
crc = (uint8_t) ((uint8_t)(crc << 1) ^ (uint8_t) ((crc & (uint8_t) 0x80) ? poly : 0));
table_[i] = crc;
}
}
}