Parent directory

crc.h

1316 bytes
 1/* Copyright 2021 QMK
 2 *
 3 * This program is free software: you can redistribute it and/or modify
 4 * it under the terms of the GNU General Public License as published by
 5 * the Free Software Foundation, either version 2 of the License, or
 6 * (at your option) any later version.
 7 *
 8 * This program is distributed in the hope that it will be useful,
 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include <stddef.h>
20#include <stdint.h>
21
22/**
23 * The type of the CRC values.
24 *
25 * This type must be big enough to contain at least 8 bits.
26 */
27#if defined(CRC8_OPTIMIZE_SPEED)
28typedef uint_fast8_t crc_t;
29#else
30typedef uint_least8_t crc_t;
31#endif
32
33/**
34 * Initialize crc subsystem.
35 */
36__attribute__((weak)) void crc_init(void);
37
38/**
39 * Generate CRC8 value from given data.
40 *
41 * \param[in] data     Pointer to a buffer of \a data_len bytes.
42 * \param[in] data_len Number of bytes in the \a data buffer.
43 * \return             The calculated crc value.
44 */
45__attribute__((weak)) uint8_t crc8(const void *data, size_t data_len);