Source code for pihat.eeprom.crc

"""CRC-16 algorithm"""

import array
from itertools import repeat

__all__ = ['crc16']

CRC16 = 0xa001


def crctab(poly):
    """Generate CRC lookup table"""
    table = array.array('H', repeat(0, 0x100))
    crc = 0x0001
    i = 0x80
    while i:
        crc = (crc >> 1) ^ (poly if crc & 1 else 0)
        for j in range(0, 0x100, 2 * i):
            table[i ^ j] = crc ^ table[j]
        i >>= 1
    return table


[docs]def crc16(data, crc=0, table=crctab(CRC16)): """Calculate CRC-16""" for x in data: crc = (crc >> 8) ^ table[(x ^ crc) & 0xff] return crc