Skip to content
Permalink
Browse files

cleanup: include/: move crc.h to sys/crc.h

move crc.h to sys/crc.h and
create a shim for backward-compatibility.

No functional changes to the headers.
A warning in the shim can be controlled with CONFIG_COMPAT_INCLUDES.

Related to #16539

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
  • Loading branch information...
nashif committed Jun 25, 2019
1 parent bd977d0 commit 4e48e87fd27ed00376222431d9f5afe18a7d8b24
@@ -1,182 +1,15 @@
/*
* Copyright (c) 2018 Workaround GmbH.
* Copyright (c) 2017 Intel Corporation.
* Copyright (c) 2017 Nordic Semiconductor ASA
* Copyright (c) 2015 Runtime Inc
* Copyright (c) 2018 Google LLC.
* Copyright (c) 2019 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
/** @file
* @brief CRC computation function
*/

#ifndef ZEPHYR_INCLUDE_CRC_H_
#define ZEPHYR_INCLUDE_CRC_H_

#include <zephyr/types.h>
#include <stdbool.h>
#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#ifndef CONFIG_COMPAT_INCLUDES
#warning "This header file has moved, include <sys/crc.h> instead."
#endif

/* Initial value expected to be used at the beginning of the crc8_ccitt
* computation.
*/
#define CRC8_CCITT_INITIAL_VALUE 0xFF

/**
* @defgroup checksum Checksum
*/

/**
* @defgroup crc CRC
* @ingroup checksum
* @{
*/

/**
* @brief Generic function for computing CRC 16
*
* Compute CRC 16 by passing in the address of the input, the input length
* and polynomial used in addition to the initial value.
*
* @param src Input bytes for the computation
* @param len Length of the input in bytes
* @param polynomial The polynomial to use omitting the leading x^16
* coefficient
* @param initial_value Initial value for the CRC computation
* @param pad Adds padding with zeros at the end of input bytes
*
* @return The computed CRC16 value
*/
u16_t crc16(const u8_t *src, size_t len, u16_t polynomial,
u16_t initial_value, bool pad);

/**
* @brief Compute the CRC-16/CCITT checksum of a buffer.
*
* See ITU-T Recommendation V.41 (November 1988). Uses 0x1021 as the
* polynomial, reflects the input, and reflects the output.
*
* To calculate the CRC across non-contiguous blocks use the return
* value from block N-1 as the seed for block N.
*
* For CRC-16/CCITT, use 0 as the initial seed. Other checksums in
* the same family can be calculated by changing the seed and/or
* XORing the final value. Examples include:
*
* - X-25 (used in PPP): seed=0xffff, xor=0xffff, residual=0xf0b8
*
* @note API changed in Zephyr 1.11.
*
* @param seed Value to seed the CRC with
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC16 value
*/
u16_t crc16_ccitt(u16_t seed, const u8_t *src, size_t len);

/**
* @brief Compute the CRC-16/XMODEM checksum of a buffer.
*
* The MSB first version of ITU-T Recommendation V.41 (November 1988).
* Uses 0x1021 as the polynomial with no reflection.
*
* To calculate the CRC across non-contiguous blocks use the return
* value from block N-1 as the seed for block N.
*
* For CRC-16/XMODEM, use 0 as the initial seed. Other checksums in
* the same family can be calculated by changing the seed and/or
* XORing the final value. Examples include:
*
* - CCIITT-FALSE: seed=0xffff
* - GSM: seed=0, xorout=0xffff, residue=0x1d0f
*
* @param seed Value to seed the CRC with
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC16 value
*/
u16_t crc16_itu_t(u16_t seed, const u8_t *src, size_t len);

/**
* @brief Compute ANSI variant of CRC 16
*
* ANSI variant of CRC 16 is using 0x8005 as its polynomial with the initial
* value set to 0xffff.
*
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC16 value
*/
static inline u16_t crc16_ansi(const u8_t *src, size_t len)
{
return crc16(src, len, 0x8005, 0xffff, true);
}

/**
* @brief Generate IEEE conform CRC32 checksum.
*
* @param *data Pointer to data on which the CRC should be calculated.
* @param len Data length.
*
* @return CRC32 value.
*
*/
u32_t crc32_ieee(const u8_t *data, size_t len);

/**
* @brief Update an IEEE conforming CRC32 checksum.
*
* @param crc CRC32 checksum that needs to be updated.
* @param *data Pointer to data on which the CRC should be calculated.
* @param len Data length.
*
* @return CRC32 value.
*
*/
u32_t crc32_ieee_update(u32_t crc, const u8_t *data, size_t len);

/**
* @brief Compute CCITT variant of CRC 8
*
* Normal CCITT variant of CRC 8 is using 0x07.
*
* @param initial_value Initial value for the CRC computation
* @param buf Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC8 value
*/
u8_t crc8_ccitt(u8_t initial_value, const void *buf, size_t len);
#include <sys/crc.h>

/**
* @brief 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.
*
* @param seed Value to seed the CRC with
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC7 value
*/
u8_t crc7_be(u8_t seed, const u8_t *src, size_t len);

/**
* @}
*/

#ifdef __cplusplus
}
#endif

#endif
#endif /* ZEPHYR_INCLUDE_CRC_H_ */
@@ -0,0 +1,182 @@
/*
* Copyright (c) 2018 Workaround GmbH.
* Copyright (c) 2017 Intel Corporation.
* Copyright (c) 2017 Nordic Semiconductor ASA
* Copyright (c) 2015 Runtime Inc
* Copyright (c) 2018 Google LLC.
*
* SPDX-License-Identifier: Apache-2.0
*/
/** @file
* @brief CRC computation function
*/

#ifndef ZEPHYR_INCLUDE_SYS_CRC_H_
#define ZEPHYR_INCLUDE_SYS_CRC_H_

#include <zephyr/types.h>
#include <stdbool.h>
#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Initial value expected to be used at the beginning of the crc8_ccitt
* computation.
*/
#define CRC8_CCITT_INITIAL_VALUE 0xFF

/**
* @defgroup checksum Checksum
*/

/**
* @defgroup crc CRC
* @ingroup checksum
* @{
*/

/**
* @brief Generic function for computing CRC 16
*
* Compute CRC 16 by passing in the address of the input, the input length
* and polynomial used in addition to the initial value.
*
* @param src Input bytes for the computation
* @param len Length of the input in bytes
* @param polynomial The polynomial to use omitting the leading x^16
* coefficient
* @param initial_value Initial value for the CRC computation
* @param pad Adds padding with zeros at the end of input bytes
*
* @return The computed CRC16 value
*/
u16_t crc16(const u8_t *src, size_t len, u16_t polynomial,
u16_t initial_value, bool pad);

/**
* @brief Compute the CRC-16/CCITT checksum of a buffer.
*
* See ITU-T Recommendation V.41 (November 1988). Uses 0x1021 as the
* polynomial, reflects the input, and reflects the output.
*
* To calculate the CRC across non-contiguous blocks use the return
* value from block N-1 as the seed for block N.
*
* For CRC-16/CCITT, use 0 as the initial seed. Other checksums in
* the same family can be calculated by changing the seed and/or
* XORing the final value. Examples include:
*
* - X-25 (used in PPP): seed=0xffff, xor=0xffff, residual=0xf0b8
*
* @note API changed in Zephyr 1.11.
*
* @param seed Value to seed the CRC with
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC16 value
*/
u16_t crc16_ccitt(u16_t seed, const u8_t *src, size_t len);

/**
* @brief Compute the CRC-16/XMODEM checksum of a buffer.
*
* The MSB first version of ITU-T Recommendation V.41 (November 1988).
* Uses 0x1021 as the polynomial with no reflection.
*
* To calculate the CRC across non-contiguous blocks use the return
* value from block N-1 as the seed for block N.
*
* For CRC-16/XMODEM, use 0 as the initial seed. Other checksums in
* the same family can be calculated by changing the seed and/or
* XORing the final value. Examples include:
*
* - CCIITT-FALSE: seed=0xffff
* - GSM: seed=0, xorout=0xffff, residue=0x1d0f
*
* @param seed Value to seed the CRC with
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC16 value
*/
u16_t crc16_itu_t(u16_t seed, const u8_t *src, size_t len);

/**
* @brief Compute ANSI variant of CRC 16
*
* ANSI variant of CRC 16 is using 0x8005 as its polynomial with the initial
* value set to 0xffff.
*
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC16 value
*/
static inline u16_t crc16_ansi(const u8_t *src, size_t len)
{
return crc16(src, len, 0x8005, 0xffff, true);
}

/**
* @brief Generate IEEE conform CRC32 checksum.
*
* @param *data Pointer to data on which the CRC should be calculated.
* @param len Data length.
*
* @return CRC32 value.
*
*/
u32_t crc32_ieee(const u8_t *data, size_t len);

/**
* @brief Update an IEEE conforming CRC32 checksum.
*
* @param crc CRC32 checksum that needs to be updated.
* @param *data Pointer to data on which the CRC should be calculated.
* @param len Data length.
*
* @return CRC32 value.
*
*/
u32_t crc32_ieee_update(u32_t crc, const u8_t *data, size_t len);

/**
* @brief Compute CCITT variant of CRC 8
*
* Normal CCITT variant of CRC 8 is using 0x07.
*
* @param initial_value Initial value for the CRC computation
* @param buf Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC8 value
*/
u8_t crc8_ccitt(u8_t initial_value, const void *buf, size_t len);

/**
* @brief 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.
*
* @param seed Value to seed the CRC with
* @param src Input bytes for the computation
* @param len Length of the input in bytes
*
* @return The computed CRC7 value
*/
u8_t crc7_be(u8_t seed, const u8_t *src, size_t len);

/**
* @}
*/

#ifdef __cplusplus
}
#endif

#endif
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

#include <crc.h>
#include <sys/crc.h>

u16_t crc16(const u8_t *src, size_t len, u16_t polynomial,
u16_t initial_value, bool pad)
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

#include <crc.h>
#include <sys/crc.h>

u32_t crc32_ieee(const u8_t *data, size_t len)
{
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

#include <crc.h>
#include <sys/crc.h>

u8_t crc7_be(u8_t seed, const u8_t *src, size_t len)
{

0 comments on commit 4e48e87

Please sign in to comment.
You can’t perform that action at this time.