From 3b3f5967ec2ecfdf390cf7c6d17c9501ce4dd916 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Wed, 8 Jul 2026 20:43:12 -0700 Subject: [PATCH] rm crcmod-plus (#38309) * rm crcmod-plus * cleanup --- openpilot/system/qcomgpsd/modemdiag.py | 30 ++++++++++++++++++++++---- pyproject.toml | 1 - uv.lock | 18 ---------------- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/openpilot/system/qcomgpsd/modemdiag.py b/openpilot/system/qcomgpsd/modemdiag.py index 5d72aeba9e..453084f4c8 100644 --- a/openpilot/system/qcomgpsd/modemdiag.py +++ b/openpilot/system/qcomgpsd/modemdiag.py @@ -1,8 +1,31 @@ import select from serial import Serial -from crcmod import mkCrcFun from struct import pack, unpack_from, calcsize + +def _gen_crc16_reflected_table(poly: int) -> list[int]: + # poly is the reflected form (e.g. 0x8408 for CRC-16 poly 0x1021) + table = [] + for i in range(256): + crc = i + for _ in range(8): + if crc & 1: + crc = (crc >> 1) ^ poly + else: + crc >>= 1 + table.append(crc) + return table + +# CRC-16/IBM-SDLC (aka X-25 / ISO-HDLC): poly 0x1021, refin/refout, init/xor 0xFFFF +_CRC16_X25_TABLE = _gen_crc16_reflected_table(0x8408) + +def crc16_x25(data: bytes) -> int: + crc = 0xFFFF + for b in data: + crc = _CRC16_X25_TABLE[(crc ^ b) & 0xFF] ^ (crc >> 8) + return crc ^ 0xFFFF + + class ModemDiag: def __init__(self): self.serial = self.open_serial() @@ -15,12 +38,11 @@ class ModemDiag: serial.reset_output_buffer() return serial - ccitt_crc16 = mkCrcFun(0x11021, initCrc=0, xorOut=0xffff) ESCAPE_CHAR = b'\x7d' TRAILER_CHAR = b'\x7e' def hdlc_encapsulate(self, payload): - payload += pack('