1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
 
   3 # SPDX-License-Identifier: MIT
 
   4 """SPI Classes for RP2040s with u2if firmware"""
 
   5 from .rp2040_u2if import rp2040_u2if
 
   7 # pylint: disable=protected-access, no-self-use
 
   9     """SPI Base Class for RP2040 u2if"""
 
  13     def __init__(self, index, *, baudrate=100000):
 
  15         self._frequency = baudrate
 
  16         rp2040_u2if.spi_set_port(self._index)
 
  17         rp2040_u2if.spi_configure(self._frequency)
 
  19     # pylint: disable=too-many-arguments,unused-argument
 
  31         """Initialize the Port"""
 
  32         self._frequency = baudrate
 
  33         rp2040_u2if.spi_set_port(self._index)
 
  34         rp2040_u2if.spi_configure(self._frequency)
 
  36     # pylint: enable=too-many-arguments
 
  40         """Return the current frequency"""
 
  41         return self._frequency
 
  43     def write(self, buf, start=0, end=None):
 
  44         """Write data from the buffer to SPI"""
 
  45         rp2040_u2if.spi_write(buf, start=start, end=end)
 
  47     def readinto(self, buf, start=0, end=None, write_value=0):
 
  48         """Read data from SPI and into the buffer"""
 
  49         rp2040_u2if.spi_readinto(buf, start=start, end=end, write_value=write_value)
 
  51     # pylint: disable=too-many-arguments
 
  53         self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None
 
  55         """Perform a half-duplex write from buffer_out and then
 
  56         read data into buffer_in
 
  58         rp2040_u2if.spi_write_readinto(
 
  67     # pylint: enable=too-many-arguments
 
  71     """SPI Class for Pico u2if"""
 
  73     def __init__(self, clock, *, baudrate=100000):
 
  80             raise ValueError("No SPI port on specified pin.")
 
  81         super().__init__(index, baudrate=baudrate)
 
  84 class SPI_Feather(SPI):
 
  85     """SPI Class for Feather u2if"""
 
  87     def __init__(self, clock, *, baudrate=100000):
 
  92             raise ValueError("No SPI port on specified pin.")
 
  93         super().__init__(index, baudrate=baudrate)
 
  97     """SPI Class for QT Py u2if"""
 
  99     def __init__(self, clock, *, baudrate=100000):
 
 104             raise ValueError("No SPI port on specified pin.")
 
 105         super().__init__(index, baudrate=baudrate)
 
 108 class SPI_ItsyBitsy(SPI):
 
 109     """SPI Class for ItsyBitsy u2if"""
 
 111     def __init__(self, clock, *, baudrate=100000):
 
 116             raise ValueError("No SPI port on specified pin.")
 
 117         super().__init__(index, baudrate=baudrate)
 
 120 class SPI_MacroPad(SPI):
 
 121     """SPI Class for MacroPad u2if"""
 
 123     def __init__(self, clock, *, baudrate=100000):
 
 128             raise ValueError("No SPI port on specified pin.")
 
 129         super().__init__(index, baudrate=baudrate)