| /* |
| * Copyright 2018 NXP |
| * All rights reserved. |
| * |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef _CRC_H_ |
| #define _CRC_H_ |
| |
| #include "fsl_common.h" |
| |
| /*! |
| * @addtogroup CRC_Adapter |
| * @{ |
| */ |
| |
| /************************************************************************************ |
| ************************************************************************************* |
| * Include |
| ************************************************************************************* |
| ***********************************************************************************/ |
| |
| /************************************************************************************ |
| ************************************************************************************* |
| * Public types |
| ************************************************************************************* |
| ************************************************************************************/ |
| /*! @brief crcRefIn definitions. */ |
| typedef enum _hal_crc_cfg_refin |
| { |
| KHAL_CrcInputNoRef = 0U, /*!< Do not manipulate input data stream. */ |
| KHAL_CrcRefInput = 1U /*!< Reflect each byte in the input stream bitwise. */ |
| } hal_crc_cfg_refin_t; |
| |
| /*! @brief crcRefOut definitions. */ |
| typedef enum _hal_crc_cfg_refout |
| { |
| KHAL_CrcOutputNoRef = 0U, /*!< Do not manipulate CRC result. */ |
| KHAL_CrcRefOutput = 1U /*!< CRC result is to be reflected bitwise (operated on entire word). */ |
| } hal_crc_cfg_refout_t; |
| |
| /*! @brief crcByteOrder definitions. */ |
| typedef enum _hal_crc_cfg_byteord |
| { |
| KHAL_CrcLSByteFirst = 0U, /*!< Byte order of the CRC LS Byte first. */ |
| KHAL_CrcMSByteFirst = 1U /*!< Bit order of the CRC MS Byte first. */ |
| } hal_crc_cfg_byteord_t; |
| |
| /*! @brief CRC polynomials to use. */ |
| typedef enum _hal_crc_polynomial |
| { |
| KHAL_CrcPolynomial_CRC_8_CCITT = 0x103, /*!< x^8+x^2+x^1+1 */ |
| KHAL_CrcPolynomial_CRC_16 = 0x1021, /*!< x^16+x^12+x^5+1 */ |
| KHAL_CrcPolynomial_CRC_32 = 0x4C11DB7U, /*!< x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 */ |
| } hal_crc_polynomial_t; |
| |
| /*! @brief CRC configuration structure. */ |
| typedef struct _hal_crc_config |
| { |
| hal_crc_cfg_refin_t crcRefIn; /*!< CRC reflect input. See "hal_crc_cfg_refin_t". */ |
| hal_crc_cfg_refout_t crcRefOut; /*!< CRC reflect output. See "hal_crc_cfg_refout_t". */ |
| hal_crc_cfg_byteord_t crcByteOrder; /*!< CRC byte order. See "hal_crc_cfg_byteord_t". */ |
| uint32_t crcSeed; /*!< CRC Seed value. Initial value for CRC LFSR. */ |
| uint32_t crcPoly; /*!< CRC Polynomial value. */ |
| uint32_t crcXorOut; /*!< XOR mask for CRC result (for no mask, should be 0). */ |
| uint8_t complementChecksum; /*!< wether output the complement checksum. */ |
| uint8_t crcSize; /*!< Number of CRC octets, 2 mean use CRC16, 4 mean use CRC32. */ |
| uint8_t crcStartByte; /*!< Start CRC with this byte position. Byte #0 is the first byte of Sync Address. */ |
| } hal_crc_config_t; |
| |
| /************************************************************************************ |
| ************************************************************************************* |
| * Public prototypes |
| ************************************************************************************* |
| ************************************************************************************/ |
| |
| #if defined(__cplusplus) |
| extern "C" { |
| #endif |
| |
| /*! |
| * @name CRC |
| * @{ |
| */ |
| |
| /*! |
| * @brief Compute CRC function. |
| * |
| * The function computes the CRC. |
| * |
| * @code |
| * config = (hal_crc_config_t) { |
| * .crcSize = 4, |
| * .crcStartByte = 0, |
| * .crcRefIn = KHAL_CrcInputNoRef, |
| * .crcRefOut = KHAL_CrcOutputNoRef, |
| * .crcByteOrder = KHAL_CrcMSByteFirst, |
| * .complementChecksum = true, |
| * .crcSeed = 0xFFFFFFFF, |
| * .crcPoly = KHAL_CrcPolynomial_CRC_32, |
| * .crcXorOut = 0xFFFFFFFF, |
| * }; |
| * |
| * res = HAL_CrcCompute(&config, (uint8_t *) pattern, strlen(pattern)); |
| * @endcode |
| * |
| * @note The settings for compute CRC are taken from the passed CRC_config_t structure. |
| * |
| * @param crcConfig configuration structure. |
| * @param dataIn input data buffer. |
| * @param length input data buffer size. |
| * |
| * @retval Computed CRC value. |
| */ |
| uint32_t HAL_CrcCompute(hal_crc_config_t *crcConfig, uint8_t *dataIn, uint32_t length); |
| |
| /*! @} */ |
| |
| #if defined(__cplusplus) |
| } |
| #endif |
| |
| /*! @} */ |
| |
| #endif /* _CRC_H_ */ |