You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
641 B
30 lines
641 B
|
|
def _gen_crc8_table(poly: int) -> list[int]:
|
|
table = []
|
|
for i in range(256):
|
|
crc = i
|
|
for _ in range(8):
|
|
if crc & 0x80:
|
|
crc = ((crc << 1) ^ poly) & 0xFF
|
|
else:
|
|
crc = (crc << 1) & 0xFF
|
|
table.append(crc)
|
|
return table
|
|
|
|
|
|
def _gen_crc16_table(poly: int) -> list[int]:
|
|
table = []
|
|
for i in range(256):
|
|
crc = i << 8
|
|
for _ in range(8):
|
|
if crc & 0x8000:
|
|
crc = ((crc << 1) ^ poly) & 0xFFFF
|
|
else:
|
|
crc = (crc << 1) & 0xFFFF
|
|
table.append(crc)
|
|
return table
|
|
|
|
|
|
CRC8H2F = _gen_crc8_table(0x2F)
|
|
CRC8J1850 = _gen_crc8_table(0x1D)
|
|
CRC16_XMODEM = _gen_crc16_table(0x1021)
|
|
|