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 //#include "sdk_common.h"
41 //#if NRF_MODULE_ENABLED(CRC16)
42 #include "crc16.h"
43
44 #include <stdlib.h>
45
util_crc16_compute(uint8_t const * p_data,uint32_t size,uint16_t const * p_crc)46 uint16_t util_crc16_compute(uint8_t const *p_data, uint32_t size, uint16_t const *p_crc)
47 {
48 uint16_t crc = (p_crc == NULL) ? 0xFFFF : *p_crc;
49
50 for (uint32_t i = 0; i < size; i++)
51 {
52 crc = (uint8_t)(crc >> 8) | (crc << 8);
53 crc ^= p_data[i];
54 crc ^= (uint8_t)(crc & 0xFF) >> 4;
55 crc ^= (crc << 8) << 4;
56 crc ^= ((crc & 0xFF) << 4) << 1;
57 }
58
59 return crc;
60 }
61
util_crc16_ccitt(uint8_t const * p_data,uint32_t size,uint16_t const * p_crc)62 uint16_t util_crc16_ccitt(uint8_t const *p_data, uint32_t size, uint16_t const *p_crc)
63 {
64 uint16_t crc = (p_crc == NULL) ? 0xFFFF : *p_crc;
65 uint8_t b = 0;
66
67 if (p_crc == NULL)
68 {
69 b = 0;
70 }
71
72 for (uint32_t i = 0; i < size; i++)
73 {
74 for (uint8_t j = 0; j < 8; j++)
75 {
76 b = ((p_data[i] << j) & 0x80) ^ ((crc & 0x8000) >> 8);
77 crc <<= 1;
78 if (b != 0)
79 {
80 crc ^= 0x1021;
81 }
82 }
83 }
84
85 return crc;
86 }
87
88 //#endif //NRF_MODULE_ENABLED(CRC16)
89