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)
 
  92     """I2C Class for QT Py 2if"""
 
  94     def __init__(self, scl, sda, *, frequency=100000):
 
  96         if scl.id == 25 and sda.id == 24:
 
  98         if scl.id == 23 and sda.id == 22:
 
 101             raise ValueError("I2C not found on specified pins.")
 
 104         super().__init__(index, frequency=frequency)
 
 107 class I2C_ItsyBitsy(I2C):
 
 108     """I2C Class for ItsyBitsy u2if"""
 
 110     def __init__(self, scl, sda, *, frequency=100000):
 
 112         if scl.id == 3 and sda.id == 2:
 
 115             raise ValueError("I2C not found on specified pins.")
 
 118         super().__init__(index, frequency=frequency)
 
 121 class I2C_MacroPad(I2C):
 
 122     """I2C Class for MacroPad u2if"""
 
 124     def __init__(self, scl, sda, *, frequency=100000):
 
 126         if scl.id == 21 and sda.id == 20:
 
 129             raise ValueError("I2C not found on specified pins.")
 
 131         super().__init__(index, frequency=frequency)
 
 134 class I2C_QT2040_Trinkey(I2C):
 
 135     """I2C Class for QT2040 Trinkey u2if"""
 
 137     def __init__(self, scl, sda, *, frequency=100000):
 
 139         if scl.id == 17 and sda.id == 16:
 
 142             raise ValueError("I2C not found on specified pins.")
 
 145         super().__init__(index, frequency=frequency)