From: Melissa LeBlanc-Williams Date: Fri, 4 Mar 2022 19:09:51 +0000 (-0800) Subject: Fix cyclic import and Pin class type X-Git-Tag: 7.1.0^2~2 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/1b0f8f8ec96aadfb7fd106677f3b5b0be24cec85 Fix cyclic import and Pin class type --- diff --git a/src/adafruit_blinka/microcontroller/esp8266/pin.py b/src/adafruit_blinka/microcontroller/esp8266/pin.py index dbc14c1..5f57036 100755 --- a/src/adafruit_blinka/microcontroller/esp8266/pin.py +++ b/src/adafruit_blinka/microcontroller/esp8266/pin.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT """ESP8266 pin names""" -from microcontroller import Pin +from ..generic_micropython import Pin GPIO0 = Pin(0) GPIO1 = Pin(1) diff --git a/src/adafruit_blinka/microcontroller/generic_micropython/__init__.py b/src/adafruit_blinka/microcontroller/generic_micropython/__init__.py index e69de29..cb3683c 100644 --- a/src/adafruit_blinka/microcontroller/generic_micropython/__init__.py +++ b/src/adafruit_blinka/microcontroller/generic_micropython/__init__.py @@ -0,0 +1,33 @@ +# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries +# +# SPDX-License-Identifier: MIT +"""Genereic Pin class for use with MicroPython boards""" +from adafruit_blinka import Enum + + +class Pin(Enum): + """ + Identifies an IO pin on the microcontroller. + + They are fixed by the hardware so they cannot be constructed on demand. Instead, use board or + microcontroller.pin to reference the desired pin. + """ + + def __init__(self, pin_id): + """Identifier for pin, referencing platform-specific pin id""" + self.id = pin_id + + def __repr__(self): + # pylint: disable=import-outside-toplevel, cyclic-import + import board + import microcontroller.pin + + for key in dir(board): + if getattr(board, key) is self: + return "board.{}".format(key) + # pylint: enable=import-outside-toplevel, cyclic-import + + for key in dir(microcontroller.pin): + if getattr(microcontroller.pin, key) is self: + return "microcontroller.pin.{}".format(key) + return repr(self) diff --git a/src/adafruit_blinka/microcontroller/rp2040/pin.py b/src/adafruit_blinka/microcontroller/rp2040/pin.py index 309008c..518090d 100755 --- a/src/adafruit_blinka/microcontroller/rp2040/pin.py +++ b/src/adafruit_blinka/microcontroller/rp2040/pin.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT """RP2040 pins""" -from microcontroller import Pin +from ..generic_micropython import Pin GP0 = Pin(0) GP1 = Pin(1) diff --git a/src/adafruit_blinka/microcontroller/stm32/stm32f405/pin.py b/src/adafruit_blinka/microcontroller/stm32/stm32f405/pin.py index da57d0b..f967b2b 100755 --- a/src/adafruit_blinka/microcontroller/stm32/stm32f405/pin.py +++ b/src/adafruit_blinka/microcontroller/stm32/stm32f405/pin.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT """STM32F405 pins""" -from microcontroller import Pin +from ...generic_micropython import Pin A0 = Pin("A0") A1 = Pin("A1") diff --git a/src/microcontroller/__init__.py b/src/microcontroller/__init__.py index cb38486..3d71f8a 100755 --- a/src/microcontroller/__init__.py +++ b/src/microcontroller/__init__.py @@ -12,9 +12,9 @@ import sys import time from adafruit_platformdetect.constants import chips as ap_chip -from adafruit_blinka import Enum from adafruit_blinka.agnostic import board_id, chip_id -import microcontroller.pin +from microcontroller import pin # pylint: disable=unused-import +from microcontroller.pin import Pin # pylint: disable=unused-import def delay_us(delay): @@ -22,33 +22,6 @@ def delay_us(delay): time.sleep(delay / 1e6) -class Pin(Enum): - """ - Identifies an IO pin on the microcontroller. - - They are fixed by the hardware so they cannot be constructed on demand. Instead, use board or - microcontroller.pin to reference the desired pin. - """ - - def __init__(self, pin_id): - """Identifier for pin, referencing platform-specific pin id""" - self.id = pin_id - - def __repr__(self): - # pylint: disable=import-outside-toplevel, cyclic-import - import board - - for key in dir(board): - if getattr(board, key) is self: - return "board.{}".format(key) - # pylint: enable=import-outside-toplevel, cyclic-import - - for key in dir(microcontroller.pin): - if getattr(microcontroller.pin, key) is self: - return "microcontroller.pin.{}".format(key) - return repr(self) - - # We intentionally are patching into this namespace so skip the wildcard check. # pylint: disable=unused-wildcard-import,wildcard-import,ungrouped-imports