From 6b6bbc8b89b114b56fd1667c6417e15775d31cc8 Mon Sep 17 00:00:00 2001 From: brentru Date: Wed, 24 Jul 2019 11:51:09 -0400 Subject: [PATCH 1/4] update for compat with pybadge/pygamer with cursor instead of touchscreen --- adafruit_pyportal.py | 49 +++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/adafruit_pyportal.py b/adafruit_pyportal.py index b5f976f..5547397 100644 --- a/adafruit_pyportal.py +++ b/adafruit_pyportal.py @@ -50,8 +50,16 @@ import busio from digitalio import DigitalInOut import pulseio -import adafruit_touchscreen import neopixel +try: + import adafruit_touchscreen +except ImportError: + pass +try: + from adafruit_cursorcontrol.cursorcontrol import Cursor + from adafruit_cursorcontrol.cursorcontrol_cursormanager import CursorManager +except ImportError: + pass from adafruit_esp32spi import adafruit_esp32spi, adafruit_esp32spi_wifimanager import adafruit_esp32spi.adafruit_esp32spi_requests as requests @@ -164,6 +172,8 @@ def __init__(self, *, url=None, headers=None, json_path=None, regexp_path=None, self._debug = debug try: + self._backlight = pulseio.PWMOut(board.TFT_LITE) # pylint: disable=no-member + except AttributeError: self._backlight = pulseio.PWMOut(board.TFT_BACKLIGHT) # pylint: disable=no-member except ValueError: self._backlight = None @@ -224,7 +234,10 @@ def __init__(self, *, url=None, headers=None, json_path=None, regexp_path=None, self._speaker_enable = DigitalInOut(board.SPEAKER_ENABLE) self._speaker_enable.switch_to_output(False) - self.audio = audioio.AudioOut(board.AUDIO_OUT) + try: # PyPortal + self.audio = audioio.AudioOut(board.AUDIO_OUT) + except AttributeError: # PyGamer/PyBadge + self.audio = audioio.AudioOut(board.SPEAKER) try: self.play_file("pyportal_startup.wav") except OSError: @@ -347,18 +360,26 @@ def __init__(self, *, url=None, headers=None, json_path=None, regexp_path=None, self._image_position = (0, 0) # default to top corner if not self._image_resize: self._image_resize = (320, 240) # default to full screen - - if self._debug: - print("Init touchscreen") - # pylint: disable=no-member - self.touchscreen = adafruit_touchscreen.Touchscreen(board.TOUCH_XL, board.TOUCH_XR, - board.TOUCH_YD, board.TOUCH_YU, - calibration=((5200, 59000), - (5800, 57000)), - size=(320, 240)) - # pylint: enable=no-member - - self.set_backlight(1.0) # turn on backlight + if hasattr(board, 'TOUCH_XL'): + if self._debug: + print("Init touchscreen") + # pylint: disable=no-member + self.touchscreen = adafruit_touchscreen.Touchscreen(board.TOUCH_XL, board.TOUCH_XR, + board.TOUCH_YD, board.TOUCH_YU, + calibration=((5200, 59000), + (5800, 57000)), + size=(320, 240)) + # pylint: enable=no-member + + self.set_backlight(1.0) # turn on backlight + elif hasattr(board, 'BUTTON_CLOCK'): + if self._debug: + print("Init cursor") + self.mouse_cursor = Cursor(board.DISPLAY, display_group=self.splash, cursor_speed=8) + self.mouse_cursor.hide() + self.cursor = CursorManager(self.mouse_cursor) + else: + raise AttributeError('PyPortal module requires either a touchscreen or gamepad.') gc.collect() From e4aac2f83761528f82c2bfe17e6475d733e2a95f Mon Sep 17 00:00:00 2001 From: brentru Date: Wed, 24 Jul 2019 12:15:35 -0400 Subject: [PATCH 2/4] fix errors on pr per @ladyada review --- adafruit_pyportal.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/adafruit_pyportal.py b/adafruit_pyportal.py index 5547397..ec2c26f 100644 --- a/adafruit_pyportal.py +++ b/adafruit_pyportal.py @@ -51,15 +51,10 @@ from digitalio import DigitalInOut import pulseio import neopixel -try: - import adafruit_touchscreen -except ImportError: - pass -try: - from adafruit_cursorcontrol.cursorcontrol import Cursor - from adafruit_cursorcontrol.cursorcontrol_cursormanager import CursorManager -except ImportError: - pass + +import adafruit_touchscreen +from adafruit_cursorcontrol.cursorcontrol import Cursor +from adafruit_cursorcontrol.cursorcontrol_cursormanager import CursorManager from adafruit_esp32spi import adafruit_esp32spi, adafruit_esp32spi_wifimanager import adafruit_esp32spi.adafruit_esp32spi_requests as requests @@ -171,11 +166,11 @@ def __init__(self, *, url=None, headers=None, json_path=None, regexp_path=None, self._debug = debug - try: - self._backlight = pulseio.PWMOut(board.TFT_LITE) # pylint: disable=no-member - except AttributeError: + if hasattr(board, 'TFT_BACKLIGHT'): self._backlight = pulseio.PWMOut(board.TFT_BACKLIGHT) # pylint: disable=no-member - except ValueError: + elif hasattr(board, 'TFT_LITE'): + self._backlight = pulseio.PWMOut(board.TFT_LITE) # pylint: disable=no-member + else: self._backlight = None self.set_backlight(1.0) # turn on backlight @@ -234,10 +229,12 @@ def __init__(self, *, url=None, headers=None, json_path=None, regexp_path=None, self._speaker_enable = DigitalInOut(board.SPEAKER_ENABLE) self._speaker_enable.switch_to_output(False) - try: # PyPortal + if hasattr(board, 'AUDIO_OUT'): self.audio = audioio.AudioOut(board.AUDIO_OUT) - except AttributeError: # PyGamer/PyBadge + elif hasattr(board, 'SPEAKER'): self.audio = audioio.AudioOut(board.SPEAKER) + else: + raise AttributeError('Board does not have a builtin speaker!') try: self.play_file("pyportal_startup.wav") except OSError: From b50095a9f3d9e47145b4c4ed8636c7b8131571f1 Mon Sep 17 00:00:00 2001 From: brentru Date: Wed, 24 Jul 2019 12:18:05 -0400 Subject: [PATCH 3/4] travis --- adafruit_pyportal.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/adafruit_pyportal.py b/adafruit_pyportal.py index ec2c26f..b4f2668 100644 --- a/adafruit_pyportal.py +++ b/adafruit_pyportal.py @@ -52,12 +52,13 @@ import pulseio import neopixel +from adafruit_esp32spi import adafruit_esp32spi, adafruit_esp32spi_wifimanager +import adafruit_esp32spi.adafruit_esp32spi_requests as requests + import adafruit_touchscreen from adafruit_cursorcontrol.cursorcontrol import Cursor from adafruit_cursorcontrol.cursorcontrol_cursormanager import CursorManager -from adafruit_esp32spi import adafruit_esp32spi, adafruit_esp32spi_wifimanager -import adafruit_esp32spi.adafruit_esp32spi_requests as requests try: from adafruit_display_text.text_area import TextArea # pylint: disable=unused-import print("*** WARNING ***\nPlease update your library bundle to the latest 'adafruit_display_text' version as we've deprecated 'text_area' in favor of 'label'") # pylint: disable=line-too-long From 87a67f47a41be1399bc02d4eae71f5c5a265f348 Mon Sep 17 00:00:00 2001 From: brentru Date: Wed, 24 Jul 2019 12:20:38 -0400 Subject: [PATCH 4/4] fix docs --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 02ae91b..cd3a222 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -23,7 +23,7 @@ autodoc_mock_imports = ["rtc", "supervisor", "pulseio", "audioio", "displayio", "neopixel", "microcontroller", "adafruit_touchscreen", "adafruit_bitmap_font", "adafruit_display_text", "adafruit_esp32spi", "secrets", - "adafruit_sdcard", "storage", "adafruit_io"] + "adafruit_sdcard", "storage", "adafruit_io", "adafruit_cursorcontrol"] intersphinx_mapping = {'python': ('https://docs.python.org/3.4', None),'BusDevice': ('https://circuitpython.readthedocs.io/projects/busdevice/en/latest/', None),'CircuitPython': ('https://circuitpython.readthedocs.io/en/latest/', None)}