diff options
-rw-r--r-- | src/org/usfirst/frc/team4272/robotlib/Xbox360Controller.java | 239 |
1 files changed, 131 insertions, 108 deletions
diff --git a/src/org/usfirst/frc/team4272/robotlib/Xbox360Controller.java b/src/org/usfirst/frc/team4272/robotlib/Xbox360Controller.java index e8fff71..8c54b5f 100644 --- a/src/org/usfirst/frc/team4272/robotlib/Xbox360Controller.java +++ b/src/org/usfirst/frc/team4272/robotlib/Xbox360Controller.java @@ -33,21 +33,23 @@ */ package org.usfirst.frc.team4272.robotlib; +import edu.wpi.first.wpilibj.GenericHID; +import edu.wpi.first.wpilibj.GenericHID.Hand; import edu.wpi.first.wpilibj.Joystick; /** * Handle input from a wired Xbox 360 controller connected to the * Driver Station. */ -public class Xbox360Controller extends Joystick { +public class Xbox360Controller extends GenericHID { /* Constants ************************************************/ /** * Represents an analog axis on an Xbox 360 controller. */ public static enum Axis { - LX(0), LY(1), /** left trigger */ LT(2), - RX(4), RY(5), /** right trigger */ RT(3), + LX(0), LY(1), LTrigger(2), + RX(4), RY(5), RTrigger(3), /** D-Pad X */ DX(6), /** D-Pad Y */ DY(7); private final int id; @@ -61,108 +63,148 @@ public class Xbox360Controller extends Joystick { public static enum Button { A(0), B(1), X(2), Y(3), - /** left bumper */ LB(4), /** right bumper */RB( 5), + LBumper(4), RBumper( 5), Back(6), Start(7), /*Home(8),*/ - /** left thumb */ LT(8), /** right thumb */ RT(9); + LThumb(8), RThumb(9); public final int id; private Button(int id) { this.id = id+1; } } /* Constructor **********************************************/ + private final Joystick joystick; /** * Construct an instance of a joystick. - * The joystick index is the USB port on the drivers station. + * The joystick index is the USB port on the Driver Station. * - * @param port The port on the driver station that the joystick is plugged into. + * @param port The port on the driver station that the joystick is plugged into */ public Xbox360Controller(final int port) { - super(port); + joystick = new Joystick(port); } /* Core functions *******************************************/ /** + * Get the raw axis + *$ + * @param axis Index of the axis + * @return The raw value of the selected axis + */ + @Override + public double getRawAxis(int axis) { + return joystick.getRawAxis(axis); + } + + /** + * Is the given button pressed + *$ + * @param button Index of the button + * @return True if the button is pressed + */ + @Override + public boolean getRawButton(int button) { + return joystick.getRawButton(button); + } + + /** * Get the value of an axis base on an enumerated type. * - * @param axis The axis to read. - * @return The value of the axis. + * @param axis The axis to read + * @return The value of the axis */ - public double getAxis(Axis axis) { + public double getAxis(final Axis axis) { return getRawAxis(axis.id); } /** * Get buttons based on an enumerated type. * - * @param button The button to read. - * @return The state of the button. + * @param button The button to read + * @return The state of the button */ - public boolean getButton(Button button) { + public boolean getButton(final Button button) { return getRawButton(button.id); } + /** + * Ask the Driver Station if this USB joystick is in fact an + * Xbox controller. + * + * @return Whether the controller is an Xbox controller + */ + public boolean getIsXbox() { + return joystick.getIsXbox(); + } - /* The actual code is done. The rest is boilerplate. See, - * this is why Java is terrible. Just 30% of the file - * actually doing useful stuff, the rest just filling - * interfaces. */ - /* Stupid little wrappers ***********************************/ + /* TODO: Outputs? (Rumble, LEDs) */ + + /* Stupid little mathy wrappers *****************************/ /** - * Get the X value of a thumb-stick. + * Get the magnitude of the direction vector formed by the thumb-stick's + * current position relative to its origin * * @param hand Left stick or right? - * @return The X value of the joystick. + * @return The magnitude of the direction vector */ - public double getX(final Hand hand) { - if (hand.value == Hand.kLeft.value) - return getAxis(Axis.LX); - if (hand.value == Hand.kRight.value) - return getAxis(Axis.RX); - return 0.0; + public double getMagnitude(Hand hand) { + return Math.sqrt(Math.pow(getX(hand), 2) + Math.pow(getY(hand), 2)); } /** - * Get the Y value of a thumb-stick. + * Get the direction of the vector formed by the thumb-stick and its origin + * in radians + * + * @param hand Left stick or right? + * @return The direction of the vector in radians + */ + public double getDirectionRadians(Hand hand) { + return Math.atan2(getX(hand), -getY(hand)); + } + /** + * Get the direction of the vector formed by the thumb-stick and its origin + * in degrees + * + * uses acos(-1) to represent Pi due to absence of readily accessable Pi + * constant in C++ + * * @param hand Left stick or right? - * @return The Y value of the joystick. + * @return The direction of the vector in degrees */ - public double getY(final Hand hand) { - if (hand.value == Hand.kLeft.value) - return getAxis(Axis.LY); - if (hand.value == Hand.kRight.value) - return getAxis(Axis.RY); - return 0.0; + public double getDirectionDegrees(Hand hand) { + return Math.toDegrees(getDirectionRadians(hand)); } + /* Stupid aliases for getAxis/getButton *********************/ + /** - * Get the value of a trigger. + * Get the state of a trigger; whether it is mostly pressed or + * not. * * @param hand Left trigger or right? - * @return The trigger value. + * @return The state of the trigger. */ - public double getZ(final Hand hand) { - if (hand.value == Hand.kLeft.value) - return getAxis(Axis.LT); - if (hand.value == Hand.kRight.value) - return getAxis(Axis.RT); - return 0.0; + @Override + public boolean getTrigger(Hand hand) { + return getZ(hand) > 0.75; } /** * Get the state of a bumper. * - * @param hand Left trigger or right? - * @return the state of the bumper. + * @param hand Left bumper or right? + * @return Whether the bumper is pressed + * @deprecated This method is only here to complete the {@link GenericHID} abstract class. */ + @Override public boolean getBumper(Hand hand) { if (hand.value == Hand.kLeft.value) - return getButton(Button.LB); + return getButton(Button.LBumper); if (hand.value == Hand.kRight.value) - return getButton(Button.RB); + return getButton(Button.RBumper); return false; } @@ -172,106 +214,87 @@ public class Xbox360Controller extends Joystick { * @param hand Left trigger or right? * @return the state of the button. */ + @Override public boolean getTop(Hand hand) { if (hand.value == Hand.kLeft.value) - return getButton(Button.LT); + return getButton(Button.LThumb); if (hand.value == Hand.kRight.value) - return getButton(Button.RB); + return getButton(Button.RThumb); return false; } /** - * Get the state of a trigger; whether it is more than - * half-way pressed or not. + * Get the X value of a thumb-stick. * - * @param hand Left trigger or right? - * @return The state of the trigger. + * @param hand Left stick or right? + * @return The X value of the thumb-stick. */ - public boolean getTrigger(Hand hand) { - return getZ(hand) > 0.75; + @Override + public double getX(final Hand hand) { + if (hand.value == Hand.kLeft.value) + return getAxis(Axis.LX); + if (hand.value == Hand.kRight.value) + return getAxis(Axis.RX); + return 0.0; } /** - * Get the magnitude of the direction vector formed by the thumb-stick's - * current position relative to its origin - * - * @return The magnitude of the direction vector - */ - public double getMagnitude(Hand hand) { - return Math.sqrt(Math.pow(getX(hand), 2) + Math.pow(getY(hand), 2)); - } - - public double getMagnitude() { - return getMagnitude(Hand.kRight); - } + * Get the Y value of a thumb-stick. - /** - * Get the direction of the vector formed by the thumb-stick and its origin - * in radians - * - * @return The direction of the vector in radians + * @param hand Left stick or right? + * @return The Y value of the thumb-stick. */ - public double getDirectionRadians(Hand hand) { - return Math.atan2(getX(hand), -getY(hand)); - } - - public double getDirectionRadians() { - return getDirectionRadians(Hand.kRight); + @Override + public double getY(final Hand hand) { + if (hand.value == Hand.kLeft.value) + return getAxis(Axis.LY); + if (hand.value == Hand.kRight.value) + return getAxis(Axis.RY); + return 0.0; } /** - * Get the direction of the vector formed by the thumb-stick and its origin - * in degrees - * - * uses acos(-1) to represent Pi due to absence of readily accessable Pi - * constant in C++ + * Get the value of a trigger. * - * @return The direction of the vector in degrees + * @param hand Left trigger or right? + * @return The trigger value. */ - public double getDirectionDegrees(Hand hand) { - return Math.toDegrees(getDirectionRadians(hand)); - } - - public double getDirectionDegrees() { - return Math.toDegrees(getDirectionRadians(Hand.kRight)); + @Override + public double getZ(final Hand hand) { + if (hand.value == Hand.kLeft.value) + return getAxis(Axis.LTrigger); + if (hand.value == Hand.kRight.value) + return getAxis(Axis.RTrigger); + return 0.0; } - - /* Unused wrappers for GenericHID/Joystick ******************/ + /* Stupid things I have to implement ************************/ /** - * This method is only here to complete the GenericHID interface. - * * @return Always 0.0 + * @deprecated This method is only here to complete the {@link GenericHID} abstract class. */ + @Override public double getTwist() { return 0.0; } /** - * This method is only here to complete the GenericHID interface. - * * @return Always 0.0 + * @deprecated This method is only here to complete the {@link GenericHID} abstract class. */ + @Override public double getThrottle() { return 0.0; } /** - * This method is only here to complete the Joystick interface. - * - * @param axis unused + * @param pov Unused * @return Always 0 + * @deprecated This method is only here to complete the {@link GenericHID} abstract class. */ - public int getAxisChannel(AxisType axis) { + @Override + public int getPOV(int pov) { return 0; } - - /** - * This method is only here to complete the Joystick interface. - * - * @param axis unused - * @param channel unused - */ - public void setAxisChannel(AxisType axis, int channel) {} } |