Skip to content

Commit a7e3aa0

Browse files
authored
Merge pull request #48 from FoamyGuy/remove_gamepad_usage
Remove gamepad usage
2 parents 8e12355 + cefca9d commit a7e3aa0

File tree

9 files changed

+161
-91
lines changed

9 files changed

+161
-91
lines changed

adafruit_pybadger/clue.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,11 @@
2727

2828
from collections import namedtuple
2929
import board
30-
import digitalio
3130
import audiopwmio
32-
from gamepad import GamePad
31+
import keypad
3332
import adafruit_lsm6ds.lsm6ds33
3433
import neopixel
35-
from adafruit_pybadger.pybadger_base import PyBadgerBase
34+
from adafruit_pybadger.pybadger_base import PyBadgerBase, KeyStates
3635

3736
__version__ = "0.0.0-auto.0"
3837
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PyBadger.git"
@@ -59,10 +58,10 @@ def __init__(self):
5958
board.NEOPIXEL, self._neopixel_count, brightness=1, pixel_order=neopixel.GRB
6059
)
6160

62-
self._buttons = GamePad(
63-
digitalio.DigitalInOut(board.BUTTON_A),
64-
digitalio.DigitalInOut(board.BUTTON_B),
61+
self._keys = keypad.Keys(
62+
[board.BUTTON_A, board.BUTTON_B], value_when_pressed=False, pull=True
6563
)
64+
self._buttons = KeyStates(self._keys)
6665

6766
@property
6867
def button(self):
@@ -80,10 +79,11 @@ def button(self):
8079
elif pybadger.button.b:
8180
print("Button B")
8281
"""
83-
button_values = self._buttons.get_pressed()
84-
return Buttons(
85-
button_values & PyBadgerBase.BUTTON_B, button_values & PyBadgerBase.BUTTON_A
82+
self._buttons.update()
83+
button_values = tuple(
84+
self._buttons.was_pressed(i) for i in range(self._keys.key_count)
8685
)
86+
return Buttons(button_values[0], button_values[1])
8787

8888
@property
8989
def _unsupported(self):

adafruit_pybadger/cpb_gizmo.py

+11-10
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@
3232
import analogio
3333
import busio
3434
import audiopwmio
35+
import keypad
3536
from adafruit_gizmo import tft_gizmo
36-
from gamepad import GamePad
3737
import adafruit_lis3dh
3838
import neopixel
39-
from adafruit_pybadger.pybadger_base import PyBadgerBase
39+
from adafruit_pybadger.pybadger_base import PyBadgerBase, KeyStates
4040

4141
__version__ = "0.0.0-auto.0"
4242
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PyBadger.git"
@@ -66,11 +66,11 @@ def __init__(self):
6666
self._neopixels = neopixel.NeoPixel(
6767
board.NEOPIXEL, self._neopixel_count, brightness=1, pixel_order=neopixel.GRB
6868
)
69-
_a_btn = digitalio.DigitalInOut(board.BUTTON_A)
70-
_a_btn.switch_to_input(pull=digitalio.Pull.DOWN)
71-
_b_btn = digitalio.DigitalInOut(board.BUTTON_B)
72-
_b_btn.switch_to_input(pull=digitalio.Pull.DOWN)
73-
self._buttons = GamePad(_a_btn, _b_btn)
69+
70+
self._keys = keypad.Keys(
71+
[board.BUTTON_A, board.BUTTON_B], value_when_pressed=True, pull=True
72+
)
73+
self._buttons = KeyStates(self._keys)
7474
self._light_sensor = analogio.AnalogIn(board.LIGHT)
7575

7676
@property
@@ -89,10 +89,11 @@ def button(self):
8989
elif pybadger.button.b:
9090
print("Button B")
9191
"""
92-
button_values = self._buttons.get_pressed()
93-
return Buttons(
94-
button_values & PyBadgerBase.BUTTON_B, button_values & PyBadgerBase.BUTTON_A
92+
self._buttons.update()
93+
button_values = tuple(
94+
self._buttons.was_pressed(i) for i in range(self._keys.key_count)
9595
)
96+
return Buttons(button_values[0], button_values[1])
9697

9798
@property
9899
def _unsupported(self):

adafruit_pybadger/mag_tag.py

-15
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@
2727

2828
from collections import namedtuple
2929
import board
30-
31-
# import digitalio
32-
# from gamepad import GamePad
3330
import neopixel
3431
from adafruit_pybadger.pybadger_base import PyBadgerBase
3532

@@ -52,13 +49,6 @@ def __init__(self):
5249
board.NEOPIXEL, self._neopixel_count, brightness=1, pixel_order=neopixel.GRB
5350
)
5451

55-
# self._buttons = GamePad(
56-
# ,
57-
# digitalio.DigitalInOut(board.BUTTON_B),
58-
# digitalio.DigitalInOut(board.BUTTON_C),
59-
# digitalio.DigitalInOut(board.BUTTON_D),
60-
# )
61-
6252
@property
6353
def button(self):
6454
"""The buttons on the board.
@@ -75,11 +65,6 @@ def button(self):
7565
elif pybadger.button.b:
7666
print("Button B")
7767
"""
78-
# button_values = self._buttons.get_pressed()
79-
# return Buttons(
80-
# button_values & PyBadgerBase.BUTTON_B, button_values & PyBadgerBase.BUTTON_A,
81-
# button_values & PyBadgerBase.BUTTON_START, button_values & PyBadgerBase.BUTTON_SELECT
82-
# )
8368

8469
@property
8570
def _unsupported(self):

adafruit_pybadger/pewpewm4.py

+27-24
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@
2727

2828
from collections import namedtuple
2929
import board
30-
import digitalio
3130
import audioio
32-
from gamepad import GamePad
33-
from adafruit_pybadger.pybadger_base import PyBadgerBase
31+
import keypad
32+
from adafruit_pybadger.pybadger_base import PyBadgerBase, KeyStates
3433

3534
__version__ = "0.0.0-auto.0"
3635
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PyBadger.git"
@@ -47,16 +46,22 @@ class PewPewM4(PyBadgerBase):
4746
def __init__(self):
4847
super().__init__()
4948

50-
self._buttons = GamePad(
51-
digitalio.DigitalInOut(board.BUTTON_O),
52-
digitalio.DigitalInOut(board.BUTTON_X),
53-
digitalio.DigitalInOut(board.BUTTON_Z),
54-
digitalio.DigitalInOut(board.BUTTON_RIGHT),
55-
digitalio.DigitalInOut(board.BUTTON_DOWN),
56-
digitalio.DigitalInOut(board.BUTTON_UP),
57-
digitalio.DigitalInOut(board.BUTTON_LEFT),
49+
self._keys = keypad.Keys(
50+
[
51+
board.BUTTON_O,
52+
board.BUTTON_X,
53+
board.BUTTON_Z,
54+
board.BUTTON_RIGHT,
55+
board.BUTTON_DOWN,
56+
board.BUTTON_UP,
57+
board.BUTTON_LEFT,
58+
],
59+
value_when_pressed=False,
60+
pull=True,
5861
)
5962

63+
self._buttons = KeyStates(self._keys)
64+
6065
@property
6166
def button(self):
6267
"""The buttons on the board.
@@ -73,20 +78,18 @@ def button(self):
7378
elif pybadger.button.o:
7479
print("Button O")
7580
"""
76-
button_values = self._buttons.get_pressed()
81+
self._buttons.update()
82+
button_values = tuple(
83+
self._buttons.was_pressed(i) for i in range(self._keys.key_count)
84+
)
7785
return Buttons(
78-
*[
79-
button_values & button
80-
for button in (
81-
PyBadgerBase.BUTTON_B,
82-
PyBadgerBase.BUTTON_A,
83-
PyBadgerBase.BUTTON_START,
84-
PyBadgerBase.BUTTON_SELECT,
85-
PyBadgerBase.BUTTON_RIGHT,
86-
PyBadgerBase.BUTTON_DOWN,
87-
PyBadgerBase.BUTTON_UP,
88-
)
89-
]
86+
button_values[0],
87+
button_values[1],
88+
button_values[2],
89+
button_values[3],
90+
button_values[4],
91+
button_values[5],
92+
button_values[6],
9093
)
9194

9295
@property

adafruit_pybadger/pybadge.py

+21-20
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@
3535
import digitalio
3636
import analogio
3737
import audioio
38-
from gamepadshift import GamePadShift
38+
import keypad
3939
import adafruit_lis3dh
4040
import neopixel
41-
from adafruit_pybadger.pybadger_base import PyBadgerBase
41+
from adafruit_pybadger.pybadger_base import PyBadgerBase, KeyStates
4242

4343
__version__ = "0.0.0-auto.0"
4444
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PyBadger.git"
@@ -77,11 +77,14 @@ def __init__(self):
7777
board.NEOPIXEL, self._neopixel_count, brightness=1, pixel_order=neopixel.GRB
7878
)
7979

80-
self._buttons = GamePadShift(
81-
digitalio.DigitalInOut(board.BUTTON_CLOCK),
82-
digitalio.DigitalInOut(board.BUTTON_OUT),
83-
digitalio.DigitalInOut(board.BUTTON_LATCH),
80+
self._keys = keypad.ShiftRegisterKeys(
81+
clock=board.BUTTON_CLOCK,
82+
data=board.BUTTON_OUT,
83+
latch=board.BUTTON_LATCH,
84+
key_count=8,
85+
value_when_pressed=True,
8486
)
87+
self._buttons = KeyStates(self._keys)
8588

8689
self._light_sensor = analogio.AnalogIn(board.A7)
8790

@@ -106,21 +109,19 @@ def button(self):
106109
print("Button select")
107110
108111
"""
109-
button_values = self._buttons.get_pressed()
112+
self._buttons.update()
113+
button_values = tuple(
114+
self._buttons.was_pressed(i) for i in range(self._keys.key_count)
115+
)
110116
return Buttons(
111-
*[
112-
button_values & button
113-
for button in (
114-
PyBadgerBase.BUTTON_B,
115-
PyBadgerBase.BUTTON_A,
116-
PyBadgerBase.BUTTON_START,
117-
PyBadgerBase.BUTTON_SELECT,
118-
PyBadgerBase.BUTTON_RIGHT,
119-
PyBadgerBase.BUTTON_DOWN,
120-
PyBadgerBase.BUTTON_UP,
121-
PyBadgerBase.BUTTON_LEFT,
122-
)
123-
]
117+
button_values[0],
118+
button_values[1],
119+
button_values[2],
120+
button_values[3],
121+
button_values[4],
122+
button_values[5],
123+
button_values[6],
124+
button_values[7],
124125
)
125126

126127

adafruit_pybadger/pybadger_base.py

+43
Original file line numberDiff line numberDiff line change
@@ -761,3 +761,46 @@ def play_file(self, file_name):
761761
while audio.playing:
762762
pass
763763
self._enable_speaker(enable=True)
764+
765+
766+
class KeyStates:
767+
"""Convert `keypad.Event` information from the given `keypad` scanner into key-pressed state.
768+
769+
:param scanner: a `keypad` scanner, such as `keypad.Keys`
770+
"""
771+
772+
def __init__(self, scanner):
773+
self._scanner = scanner
774+
self._pressed = [False] * self._scanner.key_count
775+
self.update()
776+
777+
def update(self):
778+
"""Update key information based on pending scanner events."""
779+
780+
# If the event queue overflowed, discard any pending events,
781+
# and assume all keys are now released.
782+
if self._scanner.events.overflowed:
783+
self._scanner.events.clear()
784+
self._scanner.reset()
785+
self._pressed = [False] * self._scanner.key_count
786+
787+
self._was_pressed = self._pressed.copy()
788+
789+
while True:
790+
event = self._scanner.events.get()
791+
if not event:
792+
# Event queue is now empty.
793+
break
794+
self._pressed[event.key_number] = event.pressed
795+
if event.pressed:
796+
self._was_pressed[event.key_number] = True
797+
798+
def was_pressed(self, key_number):
799+
"""True if key was down at any time since the last `update()`,
800+
even if it was later released.
801+
"""
802+
return self._was_pressed[key_number]
803+
804+
def pressed(self, key_number):
805+
"""True if key is currently pressed, as of the last `update()`."""
806+
return self._pressed[key_number]

adafruit_pybadger/pygamer.py

+17-11
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
import digitalio
3232
import audioio
3333
import neopixel
34-
from gamepadshift import GamePadShift
34+
import keypad
3535
import adafruit_lis3dh
36-
from adafruit_pybadger.pybadger_base import PyBadgerBase
36+
from adafruit_pybadger.pybadger_base import PyBadgerBase, KeyStates
3737

3838
__version__ = "0.0.0-auto.0"
3939
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PyBadger.git"
@@ -65,11 +65,14 @@ def __init__(self):
6565
board.NEOPIXEL, self._neopixel_count, brightness=1, pixel_order=neopixel.GRB
6666
)
6767

68-
self._buttons = GamePadShift(
69-
digitalio.DigitalInOut(board.BUTTON_CLOCK),
70-
digitalio.DigitalInOut(board.BUTTON_OUT),
71-
digitalio.DigitalInOut(board.BUTTON_LATCH),
68+
self._keys = keypad.ShiftRegisterKeys(
69+
clock=board.BUTTON_CLOCK,
70+
data=board.BUTTON_OUT,
71+
latch=board.BUTTON_LATCH,
72+
key_count=4,
73+
value_when_pressed=True,
7274
)
75+
self._buttons = KeyStates(self._keys)
7376

7477
self._pygamer_joystick_x = analogio.AnalogIn(board.JOYSTICK_X)
7578
self._pygamer_joystick_y = analogio.AnalogIn(board.JOYSTICK_Y)
@@ -97,13 +100,16 @@ def button(self):
97100
print("Button select")
98101
99102
"""
100-
button_values = self._buttons.get_pressed()
103+
self._buttons.update()
104+
button_values = tuple(
105+
self._buttons.was_pressed(i) for i in range(self._keys.key_count)
106+
)
101107
x, y = self.joystick
102108
return Buttons(
103-
button_values & PyBadgerBase.BUTTON_B,
104-
button_values & PyBadgerBase.BUTTON_A,
105-
button_values & PyBadgerBase.BUTTON_START,
106-
button_values & PyBadgerBase.BUTTON_SELECT,
109+
button_values[0],
110+
button_values[1],
111+
button_values[2],
112+
button_values[3],
107113
x > 50000, # RIGHT
108114
y > 50000, # DOWN
109115
y < 15000, # UP

docs/conf.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import sys
99

1010
sys.path.insert(0, os.path.abspath(".."))
11+
sys.path.insert(0, os.path.abspath("mocks"))
1112

1213
# -- General configuration ------------------------------------------------
1314

@@ -28,13 +29,11 @@
2829
autodoc_mock_imports = [
2930
"audioio",
3031
"displayio",
31-
"gamepadshift",
3232
"neopixel",
3333
"analogio",
3434
"terminalio",
3535
"adafruit_lis3dh",
3636
"adafruit_lsm6ds",
37-
"gamepad",
3837
"audiocore",
3938
"audiopwmio",
4039
"micropython",

0 commit comments

Comments
 (0)