Zephyr API Documentation
3.7.0
A Scalable Open Source RTOS
|
Enumerations | |
enum | crc_type { CRC4 , CRC4_TI , CRC7_BE , CRC8 , CRC8_CCITT , CRC16 , CRC16_ANSI , CRC16_CCITT , CRC16_ITU_T , CRC24_PGP , CRC32_C , CRC32_IEEE } |
CRC algorithm enumeration. More... | |
Functions | |
uint16_t | crc16 (uint16_t poly, uint16_t seed, const uint8_t *src, size_t len) |
Generic function for computing a CRC-16 without input or output reflection. | |
uint16_t | crc16_reflect (uint16_t poly, uint16_t seed, const uint8_t *src, size_t len) |
Generic function for computing a CRC-16 with input and output reflection. | |
uint8_t | crc8 (const uint8_t *src, size_t len, uint8_t polynomial, uint8_t initial_value, bool reversed) |
Generic function for computing CRC 8. | |
uint16_t | crc16_ccitt (uint16_t seed, const uint8_t *src, size_t len) |
Compute the checksum of a buffer with polynomial 0x1021, reflecting input and output. | |
uint16_t | crc16_itu_t (uint16_t seed, const uint8_t *src, size_t len) |
Compute the checksum of a buffer with polynomial 0x1021, no reflection of input or output. | |
static uint16_t | crc16_ansi (const uint8_t *src, size_t len) |
Compute the ANSI (or Modbus) variant of CRC-16. | |
uint32_t | crc32_ieee (const uint8_t *data, size_t len) |
Generate IEEE conform CRC32 checksum. | |
uint32_t | crc32_ieee_update (uint32_t crc, const uint8_t *data, size_t len) |
Update an IEEE conforming CRC32 checksum. | |
uint32_t | crc32_c (uint32_t crc, const uint8_t *data, size_t len, bool first_pkt, bool last_pkt) |
Calculate CRC32C (Castagnoli) checksum. | |
uint8_t | crc8_ccitt (uint8_t initial_value, const void *buf, size_t len) |
Compute CCITT variant of CRC 8. | |
uint8_t | crc7_be (uint8_t seed, const uint8_t *src, size_t len) |
Compute the CRC-7 checksum of a buffer. | |
uint8_t | crc4_ti (uint8_t seed, const uint8_t *src, size_t len) |
Compute the CRC-4 checksum of a buffer. | |
uint8_t | crc4 (const uint8_t *src, size_t len, uint8_t polynomial, uint8_t initial_value, bool reversed) |
Generic function for computing CRC 4. | |
uint32_t | crc24_pgp (const uint8_t *data, size_t len) |
Generate an OpenPGP CRC-24 checksum as defined in RFC 4880 section 6.1. | |
uint32_t | crc24_pgp_update (uint32_t crc, const uint8_t *data, size_t len) |
Update an OpenPGP CRC-24 checksum. | |
static uint32_t | crc_by_type (enum crc_type type, const uint8_t *src, size_t len, uint32_t seed, uint32_t poly, bool reflect, bool first, bool last) |
Compute a CRC checksum, in a generic way. | |
enum crc_type |
#include <zephyr/sys/crc.h>
CRC algorithm enumeration.
These values should be used with the CRC dispatch function.
Enumerator | |
---|---|
CRC4 | Use crc4. |
CRC4_TI | Use crc4_ti. |
CRC7_BE | Use crc7_be. |
CRC8 | Use crc8. |
CRC8_CCITT | Use crc8_ccitt. |
CRC16 | Use crc16. |
CRC16_ANSI | Use crc16_ansi. |
CRC16_CCITT | Use crc16_ccitt. |
CRC16_ITU_T | Use crc16_itu_t. |
CRC24_PGP | Use crc24_pgp. |
CRC32_C | Use crc32_c. |
CRC32_IEEE | Use crc32_ieee. |
#include <zephyr/sys/crc.h>
Generic function for computing a CRC-16 without input or output reflection.
Compute CRC-16 by passing in the address of the input, the input length and polynomial used in addition to the initial value. This is O(n*8) where n is the length of the buffer provided. No reflection is performed.
poly | The polynomial to use omitting the leading x^16 coefficient |
seed | Initial value for the CRC computation |
src | Input bytes for the computation |
len | Length of the input in bytes |
#include <zephyr/sys/crc.h>
Compute the ANSI (or Modbus) variant of CRC-16.
The ANSI variant of CRC-16 uses 0x8005 (0xA001 reflected) as its polynomial with the initial * value set to 0xffff.
src | Input bytes for the computation |
len | Length of the input in bytes |
#include <zephyr/sys/crc.h>
Compute the checksum of a buffer with polynomial 0x1021, reflecting input and output.
This function is able to calculate any CRC that uses 0x1021 as it polynomial and requires reflecting both the input and the output. It is a fast variant that runs in O(n) time, where n is the length of the input buffer.
The following checksums can, among others, be calculated by this function, depending on the value provided for the initial seed and the value the final calculated CRC is XORed with:
See ITU-T Recommendation V.41 (November 1988).
seed | Value to seed the CRC with |
src | Input bytes for the computation |
len | Length of the input in bytes |
#include <zephyr/sys/crc.h>
Compute the checksum of a buffer with polynomial 0x1021, no reflection of input or output.
This function is able to calculate any CRC that uses 0x1021 as it polynomial and requires no reflection on both the input and the output. It is a fast variant that runs in O(n) time, where n is the length of the input buffer.
The following checksums can, among others, be calculated by this function, depending on the value provided for the initial seed and the value the final calculated CRC is XORed with:
See ITU-T Recommendation V.41 (November 1988) (MSB first).
seed | Value to seed the CRC with |
src | Input bytes for the computation |
len | Length of the input in bytes |
#include <zephyr/sys/crc.h>
Generic function for computing a CRC-16 with input and output reflection.
Compute CRC-16 by passing in the address of the input, the input length and polynomial used in addition to the initial value. This is O(n*8) where n is the length of the buffer provided. Both input and output are reflected.
The following checksums can, among others, be calculated by this function, depending on the value provided for the initial seed and the value the final calculated CRC is XORed with:
poly | The polynomial to use omitting the leading x^16 coefficient. Important: please reflect the poly. For example, use 0xA001 instead of 0x8005 for CRC-16-MODBUS. |
seed | Initial value for the CRC computation |
src | Input bytes for the computation |
len | Length of the input in bytes |
#include <zephyr/sys/crc.h>
Generate an OpenPGP CRC-24 checksum as defined in RFC 4880 section 6.1.
data | A pointer to the data on which the CRC will be calculated. |
len | Data length in bytes. |
#include <zephyr/sys/crc.h>
Update an OpenPGP CRC-24 checksum.
crc | The CRC-24 checksum that needs to be updated. The full 32-bit value of the CRC needs to be used between calls, do not mask the value to keep only the last 24 bits. |
data | A pointer to the data on which the CRC will be calculated. |
len | Data length in bytes. |
#include <zephyr/sys/crc.h>
Calculate CRC32C (Castagnoli) checksum.
crc | CRC32C checksum that needs to be updated. |
data | Pointer to data on which the CRC should be calculated. |
len | Data length. |
first_pkt | Whether this is the first packet in the stream. |
last_pkt | Whether this is the last packet in the stream. |
#include <zephyr/sys/crc.h>
Generate IEEE conform CRC32 checksum.
data | Pointer to data on which the CRC should be calculated. |
len | Data length. |
#include <zephyr/sys/crc.h>
Update an IEEE conforming CRC32 checksum.
crc | CRC32 checksum that needs to be updated. |
data | Pointer to data on which the CRC should be calculated. |
len | Data length. |
uint8_t crc4 | ( | const uint8_t * | src, |
size_t | len, | ||
uint8_t | polynomial, | ||
uint8_t | initial_value, | ||
bool | reversed | ||
) |
#include <zephyr/sys/crc.h>
Generic function for computing CRC 4.
Compute CRC 4 by passing in the address of the input, the input length and polynomial used in addition to the initial value. The input buffer must be aligned to a whole byte. It is guaranteed that 4 most significant bits of the result will be set to zero.
src | Input bytes for the computation |
len | Length of the input in bytes |
polynomial | The polynomial to use omitting the leading x^4 coefficient |
initial_value | Initial value for the CRC computation |
reversed | Should we use reflected/reversed values or not |
#include <zephyr/sys/crc.h>
Compute the CRC-4 checksum of a buffer.
Used by the TMAG5170 sensor. Uses 0x03 as the polynomial with no reflection. 4 most significant bits of the CRC result will be set to zero.
seed | Value to seed the CRC with |
src | Input bytes for the computation |
len | Length of the input in bytes |
#include <zephyr/sys/crc.h>
Compute the CRC-7 checksum of a buffer.
See JESD84-A441. Used by the MMC protocol. Uses 0x09 as the polynomial with no reflection. The CRC is left justified, so bit 7 of the result is bit 6 of the CRC.
seed | Value to seed the CRC with |
src | Input bytes for the computation |
len | Length of the input in bytes |
uint8_t crc8 | ( | const uint8_t * | src, |
size_t | len, | ||
uint8_t | polynomial, | ||
uint8_t | initial_value, | ||
bool | reversed | ||
) |
#include <zephyr/sys/crc.h>
Generic function for computing CRC 8.
Compute CRC 8 by passing in the address of the input, the input length and polynomial used in addition to the initial value.
src | Input bytes for the computation |
len | Length of the input in bytes |
polynomial | The polynomial to use omitting the leading x^8 coefficient |
initial_value | Initial value for the CRC computation |
reversed | Should we use reflected/reversed values or not |
#include <zephyr/sys/crc.h>
Compute CCITT variant of CRC 8.
Normal CCITT variant of CRC 8 is using 0x07.
initial_value | Initial value for the CRC computation |
buf | Input bytes for the computation |
len | Length of the input in bytes |
|
inlinestatic |
#include <zephyr/sys/crc.h>
Compute a CRC checksum, in a generic way.
This is a dispatch function that calls the individual CRC routine determined by type
.
For 7, 8, 16 and 24-bit CRCs, the relevant seed
and poly
values should be passed in via the least-significant byte(s).
Similarly, for 7, 8, 16 and 24-bit CRCs, the relevant result is stored in the least-significant byte(s) of the returned value.
type | CRC algorithm to use. |
src | Input bytes for the computation |
len | Length of the input in bytes |
seed | Value to seed the CRC with |
poly | The polynomial to use omitting the leading coefficient |
reflect | Should we use reflected/reversed values or not |
first | Whether this is the first packet in the stream. |
last | Whether this is the last packet in the stream. |