1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
 
   3 # SPDX-License-Identifier: MIT
 
   4 """I2C Classes for RP2040s with u2if firmware"""
 
   5 from .rp2040_u2if import rp2040_u2if
 
   9     """I2C Base Class for RP2040 u2if"""
 
  11     def __init__(self, index, *, frequency=100000):
 
  13         rp2040_u2if.i2c_set_port(self._index)
 
  14         rp2040_u2if.i2c_configure(frequency)
 
  17         """Perform an I2C Device Scan"""
 
  18         rp2040_u2if.i2c_set_port(self._index)
 
  19         return rp2040_u2if.i2c_scan()
 
  21     # pylint: disable=unused-argument
 
  22     def writeto(self, address, buffer, *, start=0, end=None, stop=True):
 
  23         """Write data from the buffer to an address"""
 
  24         rp2040_u2if.i2c_set_port(self._index)
 
  25         rp2040_u2if.i2c_writeto(address, buffer, start=start, end=end)
 
  27     def readfrom_into(self, address, buffer, *, start=0, end=None, stop=True):
 
  28         """Read data from an address and into the buffer"""
 
  29         rp2040_u2if.i2c_set_port(self._index)
 
  30         rp2040_u2if.i2c_readfrom_into(address, buffer, start=start, end=end)
 
  32     def writeto_then_readfrom(
 
  44         """Write data from buffer_out to an address and then
 
  45         read data from an address and into buffer_in
 
  47         rp2040_u2if.i2c_set_port(self._index)
 
  48         rp2040_u2if.i2c_writeto_then_readfrom(
 
  58     # pylint: enable=unused-argument
 
  62     """I2C Class for Pico u2if"""
 
  64     def __init__(self, scl, sda, *, frequency=100000):
 
  66         if scl.id == 5 and sda.id == 4:
 
  68         if scl.id == 15 and sda.id == 14:
 
  71             raise ValueError("I2C not found on specified pins.")
 
  74         super().__init__(index, frequency=frequency)
 
  77 class I2C_Feather(I2C):
 
  78     """I2C Class for Feather u2if"""
 
  80     def __init__(self, scl, sda, *, frequency=100000):
 
  82         if scl.id == 3 and sda.id == 2:
 
  85             raise ValueError("I2C not found on specified pins.")
 
  88         super().__init__(index, frequency=frequency)
 
  91 class I2C_Feather_CAN(I2C):
 
  92     """I2C Class for Feather EPD u2if"""
 
  94     def __init__(self, scl, sda, *, frequency=100000):
 
  96         if scl.id == 3 and sda.id == 2:
 
  99             raise ValueError("I2C not found on specified pins.")
 
 102         super().__init__(index, frequency=frequency)
 
 105 class I2C_Feather_EPD(I2C):
 
 106     """I2C Class for Feather EPD u2if"""
 
 108     def __init__(self, scl, sda, *, frequency=100000):
 
 110         if scl.id == 3 and sda.id == 2:
 
 113             raise ValueError("I2C not found on specified pins.")
 
 116         super().__init__(index, frequency=frequency)
 
 119 class I2C_Feather_RFM(I2C):
 
 120     """I2C Class for Feather EPD u2if"""
 
 122     def __init__(self, scl, sda, *, frequency=100000):
 
 124         if scl.id == 3 and sda.id == 2:
 
 127             raise ValueError("I2C not found on specified pins.")
 
 130         super().__init__(index, frequency=frequency)
 
 134     """I2C Class for QT Py 2if"""
 
 136     def __init__(self, scl, sda, *, frequency=100000):
 
 138         if scl.id == 25 and sda.id == 24:
 
 140         if scl.id == 23 and sda.id == 22:
 
 143             raise ValueError("I2C not found on specified pins.")
 
 146         super().__init__(index, frequency=frequency)
 
 149 class I2C_ItsyBitsy(I2C):
 
 150     """I2C Class for ItsyBitsy u2if"""
 
 152     def __init__(self, scl, sda, *, frequency=100000):
 
 154         if scl.id == 3 and sda.id == 2:
 
 157             raise ValueError("I2C not found on specified pins.")
 
 160         super().__init__(index, frequency=frequency)
 
 163 class I2C_MacroPad(I2C):
 
 164     """I2C Class for MacroPad u2if"""
 
 166     def __init__(self, scl, sda, *, frequency=100000):
 
 168         if scl.id == 21 and sda.id == 20:
 
 171             raise ValueError("I2C not found on specified pins.")
 
 173         super().__init__(index, frequency=frequency)
 
 176 class I2C_QT2040_Trinkey(I2C):
 
 177     """I2C Class for QT2040 Trinkey u2if"""
 
 179     def __init__(self, scl, sda, *, frequency=100000):
 
 181         if scl.id == 17 and sda.id == 16:
 
 184             raise ValueError("I2C not found on specified pins.")
 
 187         super().__init__(index, frequency=frequency)
 
 190 class I2C_KB2040(I2C):
 
 191     """I2C Class for KB2040 u2if"""
 
 193     def __init__(self, scl, sda, *, frequency=100000):
 
 195         if scl.id == 13 and sda.id == 12:
 
 198             raise ValueError("I2C not found on specified pins.")
 
 201         super().__init__(index, frequency=frequency)