rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
crc8hondak.cpp
Go to the documentation of this file.
1#include <stddef.h>
2#include <stdint.h>
3
4#include "crc8hondak.h"
5
6static inline uint8_t crc_init(void)
7{
8 return 0xff;
9}
10
11static inline uint8_t crc_next(uint8_t crc, uint8_t data)
12{
13 uint8_t eor;
14 unsigned int i = 8;
15
16 crc ^= data;
17 do {
18 /* This might produce branchless code */
19 eor = crc & 1 ? 0xb8 : 0;
20 crc >>= 1;
21 crc ^= eor;
22 } while (--i);
23
24 return crc;
25}
26
27static inline uint8_t crc_final(uint8_t crc) {
28 return ~crc;
29}
30
31uint8_t crc_hondak_calc(const uint8_t *data, size_t len) {
32 uint8_t crc = crc_init();
33
34 if (len) do {
35 crc = crc_next(crc, *data++);
36 } while (--len);
37
38 return crc_final(crc);
39}
static uint8_t crc_init(void)
Definition crc8hondak.cpp:6
static uint8_t crc_final(uint8_t crc)
static uint8_t crc_next(uint8_t crc, uint8_t data)
uint8_t crc_hondak_calc(const uint8_t *data, size_t len)