1 /** 2 * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA 3 * 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without modification, 7 * are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice, this 10 * list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form, except as embedded into a Nordic 13 * Semiconductor ASA integrated circuit in a product or a software update for 14 * such product, must reproduce the above copyright notice, this list of 15 * conditions and the following disclaimer in the documentation and/or other 16 * materials provided with the distribution. 17 * 18 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its 19 * contributors may be used to endorse or promote products derived from this 20 * software without specific prior written permission. 21 * 22 * 4. This software, with or without modification, must only be used with a 23 * Nordic Semiconductor ASA integrated circuit. 24 * 25 * 5. Any software provided in binary form under this license must not be reverse 26 * engineered, decompiled, modified and/or disassembled. 27 * 28 * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS 29 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 30 * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE 31 * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE 32 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 33 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 34 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 37 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 38 * 39 */ 40 /** @file 41 * 42 * @defgroup crc16 CRC16 compute 43 * @{ 44 * @ingroup hci_transport 45 * 46 * @brief This module implements CRC-16-CCITT (polynomial 0x1021) with 0xFFFF initial value. 47 * The data can be passed in multiple blocks. 48 */ 49 50 #ifndef CRC16_H__ 51 #define CRC16_H__ 52 53 #include <stdint.h> 54 55 #ifdef __cplusplus 56 extern "C" 57 { 58 #endif 59 60 /**@brief Function for calculating CRC-16 in blocks. 61 * 62 * Feed each consecutive data block into this function, along with the current value of p_crc as 63 * returned by the previous call of this function. The first call of this function should pass NULL 64 * as the initial value of the crc in p_crc. 65 * 66 * @param[in] p_data The input data block for computation. 67 * @param[in] size The size of the input data block in bytes. 68 * @param[in] p_crc The previous calculated CRC-16 value or NULL if first call. 69 * 70 * @return The updated CRC-16 value, based on the input supplied. 71 */ 72 uint16_t util_crc16_compute(uint8_t const *p_data, uint32_t size, uint16_t const *p_crc); 73 74 /**@brief Function for calculating CRC-16-CCITT in blocks. 75 * 76 * Feed each consecutive data block into this function, along with the current value of p_crc as 77 * returned by the previous call of this function. The first call of this function should pass NULL 78 * as the initial value of the crc in p_crc. 79 * 80 * @param[in] p_data The input data block for computation. 81 * @param[in] size The size of the input data block in bytes. 82 * @param[in] p_crc The previous calculated CRC-16 value or NULL if first call. 83 * 84 * @return The updated CRC-16-CCITT value, based on the input supplied. 85 */ 86 uint16_t util_crc16_ccitt(uint8_t const *p_data, uint32_t size, uint16_t const *p_crc); 87 88 #ifdef __cplusplus 89 } 90 #endif 91 92 #endif // CRC16_H__ 93 94 /** @} */ 95