Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

## Elixir Cross Referencer

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68``` ```/* * Copyright (c) 2017 Intel Corporation. * * SPDX-License-Identifier: Apache-2.0 */ /** @file * @brief CRC 16 computation function */ #ifndef __CRC16_H #define __CRC16_H #include #include #include /** * @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 CCITT variant of CRC 16 * * CCITT variant of CRC 16 is using 0x1021 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_ccitt(const u8_t *src, size_t len) { return crc16(src, len, 0x1021, 0xffff, true); } /** * @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); } #endif ```