# validated: 2024-01-20 DS 92149efa11fa button/CommandGamepad.java
from typing import Optional, Union
from wpilib import DriverStation, EventLoop, Gamepad
from .commandgenerichid import CommandGenericHID
from .trigger import Trigger
def _enum_value(value) -> int:
try:
return int(value)
except TypeError:
return value.value
[docs]
class CommandGamepad:
"""
A version of :class:`wpilib.Gamepad` with :class:`.Trigger` factories for command-based.
"""
_hid: CommandGenericHID
_gamepad: Gamepad
def __init__(self, hid: Union[int, Gamepad]):
"""
Construct an instance of a controller.
:param hid: The port index on the Driver Station that the controller is plugged into,
or the Gamepad object to use for this controller.
"""
if isinstance(hid, int):
self._hid = CommandGenericHID.get_command_generic_hid(hid)
self._gamepad = DriverStation.get_gamepad(hid)
else:
self._hid = CommandGenericHID(hid.get_hid())
self._gamepad = hid
def __getattr__(self, name: str):
return getattr(self._hid, name)
[docs]
def get_hid(self) -> CommandGenericHID:
"""
Get the underlying CommandGenericHID object.
:returns: the wrapped CommandGenericHID object
"""
return self._hid
[docs]
def get_gamepad(self) -> Gamepad:
"""
Get the underlying Gamepad object.
:returns: the wrapped Gamepad object
"""
return self._gamepad
[docs]
def face_down(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.FACE_DOWN, loop)
[docs]
def face_right(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.FACE_RIGHT, loop)
[docs]
def face_left(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.FACE_LEFT, loop)
[docs]
def face_up(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.FACE_UP, loop)
[docs]
def back(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.BACK, loop)
[docs]
def guide(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.GUIDE, loop)
[docs]
def start(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.START, loop)
[docs]
def left_stick(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.LEFT_STICK, loop)
[docs]
def right_stick(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.RIGHT_STICK, loop)
[docs]
def left_bumper(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.LEFT_BUMPER, loop)
[docs]
def right_bumper(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.RIGHT_BUMPER, loop)
[docs]
def dpad_up(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.DPAD_UP, loop)
[docs]
def dpad_down(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.DPAD_DOWN, loop)
[docs]
def dpad_left(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.DPAD_LEFT, loop)
[docs]
def dpad_right(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.DPAD_RIGHT, loop)
[docs]
def misc1(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.MISC_1, loop)
[docs]
def right_paddle1(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.RIGHT_PADDLE_1, loop)
[docs]
def left_paddle1(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.LEFT_PADDLE_1, loop)
[docs]
def right_paddle2(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.RIGHT_PADDLE_2, loop)
[docs]
def left_paddle2(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.LEFT_PADDLE_2, loop)
[docs]
def touchpad(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.TOUCHPAD, loop)
[docs]
def misc2(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.MISC_2, loop)
[docs]
def misc3(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.MISC_3, loop)
[docs]
def misc4(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.MISC_4, loop)
[docs]
def misc5(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.MISC_5, loop)
[docs]
def misc6(self, loop: Optional[EventLoop] = None) -> Trigger:
return self.button(Gamepad.Button.MISC_6, loop)
[docs]
def left_trigger(
self, threshold: float = 0.5, loop: Optional[EventLoop] = None
) -> Trigger:
return self.axis_greater_than(Gamepad.Axis.LEFT_TRIGGER, threshold, loop)
[docs]
def right_trigger(
self, threshold: float = 0.5, loop: Optional[EventLoop] = None
) -> Trigger:
return self.axis_greater_than(Gamepad.Axis.RIGHT_TRIGGER, threshold, loop)
[docs]
def axis_less_than(
self, axis, threshold: float, loop: Optional[EventLoop] = None
) -> Trigger:
return self._hid.axis_less_than(_enum_value(axis), threshold, loop)
[docs]
def axis_greater_than(
self, axis, threshold: float, loop: Optional[EventLoop] = None
) -> Trigger:
return self._hid.axis_greater_than(_enum_value(axis), threshold, loop)
[docs]
def axis_magnitude_greater_than(
self, axis, threshold: float, loop: Optional[EventLoop] = None
) -> Trigger:
return self._hid.axis_magnitude_greater_than(_enum_value(axis), threshold, loop)
[docs]
def get_axis(self, axis) -> float:
"""
Get the value of the axis.
:param axis: the axis index or :class:`wpilib.Gamepad.Axis`
"""
return self._hid.get_raw_axis(_enum_value(axis))
[docs]
def get_left_x(self) -> float:
return self._gamepad.get_left_x()
[docs]
def get_left_y(self) -> float:
return self._gamepad.get_left_y()
[docs]
def get_right_x(self) -> float:
return self._gamepad.get_right_x()
[docs]
def get_right_y(self) -> float:
return self._gamepad.get_right_y()
[docs]
def get_left_trigger_axis(self) -> float:
return self._gamepad.get_left_trigger_axis()
[docs]
def get_right_trigger_axis(self) -> float:
return self._gamepad.get_right_trigger_axis()