From d9f856be7076e2227f69e52313d6a3fa84d25b71 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 4 Oct 2025 17:54:00 -0700 Subject: [PATCH] Remove spidev2 support from SPI implementation (#2287) * Remove spidev2 support from SPI implementation Removed support for spidev2 and related transfer methods. * Remove spidev2 from dependencies Remove spidev2 dependency for Linux platform. --- pyproject.toml | 3 +-- python/spi.py | 56 +------------------------------------------------- 2 files changed, 2 insertions(+), 57 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 660fc3e6..3586313b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,6 @@ dev = [ "mypy", "setuptools", "spidev; platform_system == 'Linux'", - "spidev2; platform_system == 'Linux'", ] [build-system] @@ -73,4 +72,4 @@ addopts = "-Werror --strict-config --strict-markers --durations=10 --ignore-glob python_files = "test_*.py" testpaths = [ "tests/" -] \ No newline at end of file +] diff --git a/python/spi.py b/python/spi.py index 8ee5aecb..d7944071 100644 --- a/python/spi.py +++ b/python/spi.py @@ -16,10 +16,6 @@ try: import spidev except ImportError: spidev = None -try: - import spidev2 -except ImportError: - spidev2 = None # Constants SYNC = 0x5A @@ -121,8 +117,6 @@ class PandaSpiHandle(BaseHandle): def __init__(self) -> None: self.dev = SpiDevice() - if spidev2 is not None and "SPI2" in os.environ: - self._spi2 = spidev2.SPIBus("/dev/spidev0.0", "w+b", bits_per_word=8, speed_hz=50_000_000) # helpers def _calc_checksum(self, data: bytes) -> int: @@ -183,52 +177,6 @@ class PandaSpiHandle(BaseHandle): return dat[3:-1] - def _transfer_spidev2(self, spi, endpoint: int, data, timeout: int, max_rx_len: int = USBPACKET_MAX_SIZE, expect_disconnect: bool = False) -> bytes: - max_rx_len = max(USBPACKET_MAX_SIZE, max_rx_len) - - header = self.HEADER.pack(SYNC, endpoint, len(data), max_rx_len) - - header_ack = bytearray(1) - - # ACK + <2 bytes for response length> + data + checksum - data_rx = bytearray(3+max_rx_len+1) - - self._spi2.submitTransferList(spidev2.SPITransferList(( - # header - {'tx_buf': header + bytes([self._calc_checksum(header), ]), 'delay_usecs': 0, 'cs_change': True}, - {'rx_buf': header_ack, 'delay_usecs': 0, 'cs_change': True}, - - # send data - {'tx_buf': bytes([*data, self._calc_checksum(data)]), 'delay_usecs': 0, 'cs_change': True}, - {'rx_buf': data_rx, 'delay_usecs': 0, 'cs_change': True}, - ))) - - if header_ack[0] != HACK: - raise PandaSpiMissingAck - - if expect_disconnect: - logger.debug("- expecting disconnect, returning") - return b"" - else: - dat = bytes(data_rx) - if dat[0] != DACK: - if dat[0] == NACK: - raise PandaSpiNackResponse - - print("trying again") - dat = self._wait_for_ack(spi, DACK, timeout, 0x13, length=3 + max_rx_len) - - # get response length, then response - response_len = struct.unpack(" max_rx_len: - raise PandaSpiException(f"response length greater than max ({max_rx_len} {response_len})") - - dat = dat[:3 + response_len + 1] - if self._calc_checksum(dat) != 0: - raise PandaSpiBadChecksum - - return dat[3:-1] - def _transfer(self, endpoint: int, data, timeout: int, max_rx_len: int = 1000, expect_disconnect: bool = False) -> bytes: logger.debug("starting transfer: endpoint=%d, max_rx_len=%d", endpoint, max_rx_len) logger.debug("==============================================") @@ -241,9 +189,7 @@ class PandaSpiHandle(BaseHandle): logger.debug("\ntry #%d", n) with self.dev.acquire() as spi: try: - fn = self._transfer_spidev - #fn = self._transfer_spidev2 - return fn(spi, endpoint, data, timeout, max_rx_len, expect_disconnect) + return self._transfer_spidev(spi, endpoint, data, timeout, max_rx_len, expect_disconnect) except PandaSpiException as e: exc = e logger.debug("SPI transfer failed, retrying", exc_info=True)