1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
 
   3 # SPDX-License-Identifier: MIT
 
   5 `analogio` - Analog input and output control
 
   6 =================================================
 
   7 See `CircuitPython:analogio` in CircuitPython for more details.
 
   8 * Author(s): Carter Nelson
 
  10 from adafruit_blinka import ContextManaged
 
  11 from .rp2040_u2if import rp2040_u2if
 
  14 class AnalogIn(ContextManaged):
 
  15     """AnalogIn Base Class for RP2040 u2if"""
 
  17     def __init__(self, pin):
 
  19         rp2040_u2if.adc_init_pin(self.pin_id)
 
  23         """Read the ADC and return the value"""
 
  24         return rp2040_u2if.adc_get_value(self.pin_id) << 4
 
  26     # pylint: disable=no-self-use
 
  28     def value(self, value):
 
  29         # emulate what CircuitPython does
 
  30         raise AttributeError("'AnalogIn' object has no attribute 'value'")
 
  32     # pylint: enable=no-self-use
 
  38 class AnalogIn_Pico(AnalogIn):
 
  39     """AnalogIn Base Class for Pico u2if"""
 
  41     def __init__(self, pin):
 
  42         # per their pinout, why only two?
 
  43         if pin.id not in (26, 27):
 
  44             raise ValueError("Pin does not support ADC.")
 
  48 class AnalogIn_Feather(AnalogIn):
 
  49     """AnalogIn Base Class for Feather u2if"""
 
  51     def __init__(self, pin):
 
  52         if pin.id not in (26, 27, 28):
 
  53             raise ValueError("Pin does not support ADC.")
 
  57 class AnalogIn_QTPY(AnalogIn):
 
  58     """AnalogIn Base Class for QT Py 2040 u2if"""
 
  60     def __init__(self, pin):
 
  61         if pin.id not in (26, 27, 28):
 
  62             raise ValueError("Pin does not support ADC.")
 
  66 class AnalogIn_ItsyBitsy(AnalogIn):
 
  67     """AnalogIn Base Class for ItsyBitsy 2040 u2if"""
 
  69     def __init__(self, pin):
 
  70         if pin.id not in (26, 27, 28):
 
  71             raise ValueError("Pin does not support ADC.")