# validated: 2024-01-20 DS 92aecab2ef05 button/CommandJoystick.java
from typing import Optional
from wpilib import Joystick
from wpilib.event import EventLoop
from ..commandscheduler import CommandScheduler
from .commandgenerichid import CommandGenericHID
from .trigger import Trigger
[docs]
class CommandJoystick(CommandGenericHID):
"""
A version of :class:`wpilib.Joystick` with :class:`.Trigger` factories for command-based.
"""
_hid: Joystick
def __init__(self, port: int):
"""
Construct an instance of a controller.
:param port: The port index on the Driver Station that the controller is plugged into.
"""
super().__init__(port)
self._hid = Joystick(port)
[docs]
def getHID(self) -> Joystick:
"""
Get the underlying GenericHID object.
:returns: the wrapped GenericHID object
"""
return self._hid
[docs]
def trigger(self, loop: Optional[EventLoop] = None) -> Trigger:
"""
Constructs an event instance around the trigger button's digital signal.
:param loop: the event loop instance to attach the event to, defaults
to :func:`commands2.CommandScheduler.getDefaultButtonLoop`
:returns: an event instance representing the trigger button's digital signal attached to the
given loop.
"""
if loop is None:
loop = CommandScheduler.getInstance().getDefaultButtonLoop()
return Trigger(loop, lambda: self._hid.getTrigger())
[docs]
def top(self, loop: Optional[EventLoop] = None) -> Trigger:
"""
Constructs an event instance around the top button's digital signal.
:param loop: the event loop instance to attach the event to, defaults
to :func:`commands2.CommandScheduler.getDefaultButtonLoop`
:returns: an event instance representing the top button's digital signal attached to the given
loop.
"""
if loop is None:
loop = CommandScheduler.getInstance().getDefaultButtonLoop()
return Trigger(loop, lambda: self._hid.getTop())
[docs]
def setXChannel(self, channel: int):
"""
Set the channel associated with the X axis.
:param channel: The channel to set the axis to.
"""
self._hid.setXChannel(channel)
[docs]
def setYChannel(self, channel: int):
"""
Set the channel associated with the Y axis.
:param channel: The channel to set the axis to.
"""
self._hid.setYChannel(channel)
[docs]
def setZChannel(self, channel: int):
"""
Set the channel associated with the Z axis.
:param channel: The channel to set the axis to.
"""
self._hid.setZChannel(channel)
[docs]
def setThrottleChannel(self, channel: int):
"""
Set the channel associated with the throttle axis.
:param channel: The channel to set the axis to.
"""
self._hid.setThrottleChannel(channel)
[docs]
def setTwistChannel(self, channel: int):
"""
Set the channel associated with the twist axis.
:param channel: The channel to set the axis to.
"""
self._hid.setTwistChannel(channel)
[docs]
def getXChannel(self) -> int:
"""
Get the channel currently associated with the X axis.
:returns: The channel for the axis.
"""
return self._hid.getXChannel()
[docs]
def getYChannel(self) -> int:
"""
Get the channel currently associated with the Y axis.
:returns: The channel for the axis.
"""
return self._hid.getYChannel()
[docs]
def getZChannel(self) -> int:
"""
Get the channel currently associated with the Z axis.
:returns: The channel for the axis.
"""
return self._hid.getZChannel()
[docs]
def getTwistChannel(self) -> int:
"""
Get the channel currently associated with the twist axis.
:returns: The channel for the axis.
"""
return self._hid.getTwistChannel()
[docs]
def getThrottleChannel(self) -> int:
"""
Get the channel currently associated with the throttle axis.
:returns: The channel for the axis.
"""
return self._hid.getThrottleChannel()
[docs]
def getX(self) -> float:
"""
Get the x position of the HID.
:returns: the x position
"""
return self._hid.getX()
[docs]
def getY(self) -> float:
"""
Get the y position of the HID.
:returns: the y position
"""
return self._hid.getY()
[docs]
def getZ(self) -> float:
"""
Get the z position of the HID.
:returns: the z position
"""
return self._hid.getZ()
[docs]
def getTwist(self) -> float:
"""
Get the twist value of the current joystick. This depends on the mapping of the joystick
connected to the current port.
:returns: The Twist value of the joystick.
"""
return self._hid.getTwist()
[docs]
def getThrottle(self) -> float:
"""
Get the throttle value of the current joystick. This depends on the mapping of the joystick
connected to the current port.
:returns: The Throttle value of the joystick.
"""
return self._hid.getThrottle()
[docs]
def getMagnitude(self) -> float:
"""
Get the magnitude of the direction vector formed by the joystick's current position relative to
its origin.
:returns: The magnitude of the direction vector
"""
return self._hid.getMagnitude()
[docs]
def getDirectionRadians(self) -> float:
"""
Get the direction of the vector formed by the joystick and its origin in radians.
:returns: The direction of the vector in radians
"""
return self._hid.getDirectionRadians()
[docs]
def getDirectionDegrees(self) -> float:
"""
Get the direction of the vector formed by the joystick and its origin in degrees.
:returns: The direction of the vector in degrees
"""
return self._hid.getDirectionDegrees()