aboutsummaryrefslogtreecommitdiff
path: root/circuitpython/lib/nrfutil/nordicsemi/dfu/crc16.py
diff options
context:
space:
mode:
Diffstat (limited to 'circuitpython/lib/nrfutil/nordicsemi/dfu/crc16.py')
-rw-r--r--circuitpython/lib/nrfutil/nordicsemi/dfu/crc16.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/circuitpython/lib/nrfutil/nordicsemi/dfu/crc16.py b/circuitpython/lib/nrfutil/nordicsemi/dfu/crc16.py
new file mode 100644
index 0000000..2db4af6
--- /dev/null
+++ b/circuitpython/lib/nrfutil/nordicsemi/dfu/crc16.py
@@ -0,0 +1,44 @@
+# Copyright (c) 2015, Nordic Semiconductor
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# * Neither the name of Nordic Semiconductor ASA nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+def calc_crc16(binary_data, crc=0xffff):
+ """
+ Calculates CRC16 on binary_data
+
+ :param int crc: CRC value to start calculation with
+ :param bytearray binary_data: Array with data to run CRC16 calculation on
+ :return int: Calculated CRC value of binary_data
+ """
+
+ for b in binary_data:
+ crc = (crc >> 8 & 0x00FF) | (crc << 8 & 0xFF00)
+ crc ^= ord(b)
+ crc ^= (crc & 0x00FF) >> 4
+ crc ^= (crc << 8) << 4
+ crc ^= ((crc & 0x00FF) << 4) << 1
+ return crc & 0xFFFF