Squashed 'third_party/pycrc/' content from commit cb91196b9
Change-Id: Iaed6f7d683e3c11395f10f0724f973363aad2cdb
git-subtree-dir: third_party/pycrc
git-subtree-split: cb91196b920d1f892c05941ed470c7a80cba7596
diff --git a/pycrc/models.py b/pycrc/models.py
new file mode 100644
index 0000000..d12c91c
--- /dev/null
+++ b/pycrc/models.py
@@ -0,0 +1,334 @@
+# pycrc -- parameterisable CRC calculation utility and C source code generator
+#
+# Copyright (c) 2006-2017 Thomas Pircher <tehpeh-web@tty1.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+
+"""
+Collection of CRC models. This module contains the CRC models known to pycrc.
+
+To print the parameters of a particular model:
+
+ from pycrc.models import CrcModels
+
+ models = CrcModels()
+ print(", ".join(models.names()))
+ m = models.get_params("crc-32")
+ if m != None:
+ print("Width: {width:d}".format(**m))
+ print("Poly: {poly:#x}".format(**m))
+ print("ReflectIn: {reflect_in}".format(**m))
+ print("XorIn: {xor_in:#x}".format(**m))
+ print("ReflectOut: {reflect_out}".format(**m))
+ print("XorOut: {xor_out:#x}".format(**m))
+ print("Check: {check:#x}".format(**m))
+ else:
+ print("model not found.")
+"""
+
+
+
+class CrcModels(object):
+ """
+ CRC Models.
+
+ All models are defined as constant class variables.
+ """
+
+ models = []
+
+ models.append({
+ 'name': 'crc-5',
+ 'width': 5,
+ 'poly': 0x05,
+ 'reflect_in': True,
+ 'xor_in': 0x1f,
+ 'reflect_out': True,
+ 'xor_out': 0x1f,
+ 'check': 0x19,
+ })
+ models.append({
+ 'name': 'crc-8',
+ 'width': 8,
+ 'poly': 0x07,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0xf4,
+ })
+ models.append({
+ 'name': 'dallas-1-wire',
+ 'width': 8,
+ 'poly': 0x31,
+ 'reflect_in': True,
+ 'xor_in': 0x0,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0xa1,
+ })
+ models.append({
+ 'name': 'crc-12-3gpp',
+ 'width': 12,
+ 'poly': 0x80f,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0xdaf,
+ })
+ models.append({
+ 'name': 'crc-15',
+ 'width': 15,
+ 'poly': 0x4599,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0x59e,
+ })
+ models.append({
+ 'name': 'crc-16',
+ 'width': 16,
+ 'poly': 0x8005,
+ 'reflect_in': True,
+ 'xor_in': 0x0,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0xbb3d,
+ })
+ models.append({
+ 'name': 'crc-16-usb',
+ 'width': 16,
+ 'poly': 0x8005,
+ 'reflect_in': True,
+ 'xor_in': 0xffff,
+ 'reflect_out': True,
+ 'xor_out': 0xffff,
+ 'check': 0xb4c8,
+ })
+ models.append({
+ 'name': 'crc-16-modbus',
+ 'width': 16,
+ 'poly': 0x8005,
+ 'reflect_in': True,
+ 'xor_in': 0xffff,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0x4b37,
+ })
+ models.append({
+ 'name': 'crc-16-genibus',
+ 'width': 16,
+ 'poly': 0x1021,
+ 'reflect_in': False,
+ 'xor_in': 0xffff,
+ 'reflect_out': False,
+ 'xor_out': 0xffff,
+ 'check': 0xd64e,
+ })
+ models.append({
+ 'name': 'crc-16-ccitt',
+ 'width': 16,
+ 'poly': 0x1021,
+ 'reflect_in': False,
+ 'xor_in': 0x1d0f,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0xe5cc,
+ })
+ models.append({
+ 'name': 'r-crc-16',
+ 'width': 16,
+ 'poly': 0x0589,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': False,
+ 'xor_out': 0x0001,
+ 'check': 0x007e,
+ })
+ models.append({
+ 'name': 'kermit',
+ 'width': 16,
+ 'poly': 0x1021,
+ 'reflect_in': True,
+ 'xor_in': 0x0,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0x2189,
+ })
+ models.append({
+ 'name': 'x-25',
+ 'width': 16,
+ 'poly': 0x1021,
+ 'reflect_in': True,
+ 'xor_in': 0xffff,
+ 'reflect_out': True,
+ 'xor_out': 0xffff,
+ 'check': 0x906e,
+ })
+ models.append({
+ 'name': 'xmodem',
+ 'width': 16,
+ 'poly': 0x1021,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0x31c3,
+ })
+ models.append({
+ 'name': 'zmodem',
+ 'width': 16,
+ 'poly': 0x1021,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0x31c3,
+ })
+ models.append({
+ 'name': 'crc-24',
+ 'width': 24,
+ 'poly': 0x864cfb,
+ 'reflect_in': False,
+ 'xor_in': 0xb704ce,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0x21cf02,
+ })
+ models.append({
+ 'name': 'crc-32',
+ 'width': 32,
+ 'poly': 0x4c11db7,
+ 'reflect_in': True,
+ 'xor_in': 0xffffffff,
+ 'reflect_out': True,
+ 'xor_out': 0xffffffff,
+ 'check': 0xcbf43926,
+ })
+ models.append({
+ 'name': 'crc-32c',
+ 'width': 32,
+ 'poly': 0x1edc6f41,
+ 'reflect_in': True,
+ 'xor_in': 0xffffffff,
+ 'reflect_out': True,
+ 'xor_out': 0xffffffff,
+ 'check': 0xe3069283,
+ })
+ models.append({
+ 'name': 'crc-32-mpeg',
+ 'width': 32,
+ 'poly': 0x4c11db7,
+ 'reflect_in': False,
+ 'xor_in': 0xffffffff,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0x0376e6e7,
+ })
+ models.append({
+ 'name': 'crc-32-bzip2',
+ 'width': 32,
+ 'poly': 0x04c11db7,
+ 'reflect_in': False,
+ 'xor_in': 0xffffffff,
+ 'reflect_out': False,
+ 'xor_out': 0xffffffff,
+ 'check': 0xfc891918,
+ })
+ models.append({
+ 'name': 'posix',
+ 'width': 32,
+ 'poly': 0x4c11db7,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': False,
+ 'xor_out': 0xffffffff,
+ 'check': 0x765e7680,
+ })
+ models.append({
+ 'name': 'jam',
+ 'width': 32,
+ 'poly': 0x4c11db7,
+ 'reflect_in': True,
+ 'xor_in': 0xffffffff,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0x340bc6d9,
+ })
+ models.append({
+ 'name': 'xfer',
+ 'width': 32,
+ 'poly': 0x000000af,
+ 'reflect_in': False,
+ 'xor_in': 0x0,
+ 'reflect_out': False,
+ 'xor_out': 0x0,
+ 'check': 0xbd0be338,
+ })
+ models.append({
+ 'name': 'crc-64',
+ 'width': 64,
+ 'poly': 0x000000000000001b,
+ 'reflect_in': True,
+ 'xor_in': 0x0,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0x46a5a9388a5beffe,
+ })
+ models.append({
+ 'name': 'crc-64-jones',
+ 'width': 64,
+ 'poly': 0xad93d23594c935a9,
+ 'reflect_in': True,
+ 'xor_in': 0xffffffffffffffff,
+ 'reflect_out': True,
+ 'xor_out': 0x0,
+ 'check': 0xcaa717168609f281,
+ })
+ models.append({
+ 'name': 'crc-64-xz',
+ 'width': 64,
+ 'poly': 0x42f0e1eba9ea3693,
+ 'reflect_in': True,
+ 'xor_in': 0xffffffffffffffff,
+ 'reflect_out': True,
+ 'xor_out': 0xffffffffffffffff,
+ 'check': 0x995dc9bbdf1939fa,
+ })
+
+
+ def names(self):
+ """
+ This function returns the list of supported CRC models.
+ """
+ return [model['name'] for model in self.models]
+
+
+ def get_params(self, model):
+ """
+ This function returns the parameters of a given model.
+ """
+ model = model.lower()
+ for i in self.models:
+ if i['name'] == model:
+ return i
+ return None