From 9a7326debd98bfec83227627b74ad44a69856a02 Mon Sep 17 00:00:00 2001 From: Florin Maticu Date: Sat, 26 Feb 2022 21:12:17 +0100 Subject: [PATCH 1/4] CursorManager: Add support for Start and Select buttons for PyGamer. --- .../cursorcontrol_cursormanager.py | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py index e36cf47..4e0fe3a 100755 --- a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py +++ b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py @@ -31,6 +31,8 @@ PYBADGE_BUTTON_DOWN = const(5) PYBADGE_BUTTON_RIGHT = const(4) # PyBadge & PyGamer +PYBADGE_BUTTON_SELECT = const(3) +PYBADGE_BUTTON_START = const(2) PYBADGE_BUTTON_A = const(1) PYBADGE_BUTTON_B = const(0) @@ -45,6 +47,8 @@ def __init__(self, cursor: Cursor) -> None: self._cursor = cursor self._is_clicked = False self._is_alt_clicked = False + self._is_select_clicked = False + self._is_start_clicked = False self._pad_states = 0 self._event = Event() self._init_hardware() @@ -91,7 +95,10 @@ def _init_hardware(self) -> None: elif hasattr(board, "JOYSTICK_X"): self._joystick_x = analogio.AnalogIn(board.JOYSTICK_X) self._joystick_y = analogio.AnalogIn(board.JOYSTICK_Y) - self._pad_btns = {"btn_a": PYBADGE_BUTTON_A, "btn_b": PYBADGE_BUTTON_B} + self._pad_btns = {"btn_a": PYBADGE_BUTTON_A, + "btn_b": PYBADGE_BUTTON_B, + "btn_select": PYBADGE_BUTTON_SELECT, + "btn_start": PYBADGE_BUTTON_START} # Sample the center points of the joystick self._center_x = self._joystick_x.value self._center_y = self._joystick_y.value @@ -109,18 +116,32 @@ def _init_hardware(self) -> None: @property def is_clicked(self) -> bool: - """Returns True if the cursor button was pressed + """Returns True if the cursor A button was pressed during previous call to update() """ return self._is_clicked @property def is_alt_clicked(self) -> bool: - """Returns True if the cursor button was pressed + """Returns True if the cursor B button was pressed during previous call to update() """ return self._is_alt_clicked + @property + def is_select_clicked(self) -> bool: + """Returns True if the Select button was pressed + during previous call to update() + """ + return self._is_select_clicked + + @property + def is_start_clicked(self) -> bool: + """Returns True if the Start button was pressed + during previous call to update() + """ + return self._is_start_clicked + def update(self) -> None: """Updates the cursor object.""" if self._pad.events.get_into(self._event): @@ -136,6 +157,16 @@ def update(self) -> None: elif self._pad_states & (1 << self._pad_btns["btn_b"]): self._is_alt_clicked = True + if self._is_select_clicked: + self._is_select_clicked = False + elif self._pad_states & (1 << self._pad_btns["btn_select"]): + self._is_select_clicked = True + + if self._is_start_clicked: + self._is_start_clicked = False + elif self._pad_states & (1 << self._pad_btns["btn_start"]): + self._is_start_clicked = True + def _read_joystick_x(self, samples: int = 3) -> float: """Read the X analog joystick on the PyGamer. :param int samples: How many samples to read and average. From c0f902db520f43d1b3c6b35b22917ab9cc39a056 Mon Sep 17 00:00:00 2001 From: Florin Maticu Date: Sat, 26 Feb 2022 22:17:22 +0100 Subject: [PATCH 2/4] Disable pylint's attribute instances check. --- adafruit_cursorcontrol/cursorcontrol_cursormanager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py index 4e0fe3a..ed0eb4f 100755 --- a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py +++ b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py @@ -42,6 +42,7 @@ class CursorManager: :param Cursor cursor: The cursor object we are using. """ + # pylint: disable=too-many-instance-attributes def __init__(self, cursor: Cursor) -> None: self._cursor = cursor From 75ec76394cd7b71c0662c306c67531a1724b7d99 Mon Sep 17 00:00:00 2001 From: Florin Maticu Date: Sat, 26 Feb 2022 22:26:17 +0100 Subject: [PATCH 3/4] Fix pylint errors. --- adafruit_cursorcontrol/cursorcontrol_cursormanager.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py index ed0eb4f..d8c83eb 100755 --- a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py +++ b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py @@ -42,6 +42,7 @@ class CursorManager: :param Cursor cursor: The cursor object we are using. """ + # pylint: disable=too-many-instance-attributes def __init__(self, cursor: Cursor) -> None: @@ -96,10 +97,12 @@ def _init_hardware(self) -> None: elif hasattr(board, "JOYSTICK_X"): self._joystick_x = analogio.AnalogIn(board.JOYSTICK_X) self._joystick_y = analogio.AnalogIn(board.JOYSTICK_Y) - self._pad_btns = {"btn_a": PYBADGE_BUTTON_A, - "btn_b": PYBADGE_BUTTON_B, - "btn_select": PYBADGE_BUTTON_SELECT, - "btn_start": PYBADGE_BUTTON_START} + self._pad_btns = { + "btn_a": PYBADGE_BUTTON_A, + "btn_b": PYBADGE_BUTTON_B, + "btn_select": PYBADGE_BUTTON_SELECT, + "btn_start": PYBADGE_BUTTON_START, + } # Sample the center points of the joystick self._center_x = self._joystick_x.value self._center_y = self._joystick_y.value From eb648daa4adfd956dad839ad13aafe35d38f1c7e Mon Sep 17 00:00:00 2001 From: Florin Maticu Date: Sun, 27 Feb 2022 18:39:50 +0100 Subject: [PATCH 4/4] PyBadge: Add select and start button support. --- adafruit_cursorcontrol/cursorcontrol_cursormanager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py index d8c83eb..dd46f9d 100755 --- a/adafruit_cursorcontrol/cursorcontrol_cursormanager.py +++ b/adafruit_cursorcontrol/cursorcontrol_cursormanager.py @@ -92,6 +92,8 @@ def _init_hardware(self) -> None: "btn_down": PYBADGE_BUTTON_DOWN, "btn_a": PYBADGE_BUTTON_A, "btn_b": PYBADGE_BUTTON_B, + "btn_select": PYBADGE_BUTTON_SELECT, + "btn_start": PYBADGE_BUTTON_START, } self._pad_states = 0 elif hasattr(board, "JOYSTICK_X"):