summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-01-27 21:44:52 -0500
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-01-27 21:44:52 -0500
commit20c0715af72b3a089f3aa17fa6f0da5992dc9f29 (patch)
treebc49688dbffe23e8f910cd4960eecb9f23674818
parent130adae48814f84fe538e2d7e53090366cef19b4 (diff)
Clean up Xbox360Controller
-rw-r--r--src/org/usfirst/frc/team4272/robotlib/Xbox360Controller.java239
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) {}
}