Files
2022NoWayHome/src/main/java/frc4388/utility/controller/XboxControllerRaw.java
T
2022-01-15 15:52:38 -07:00

104 lines
2.9 KiB
Java

package frc4388.utility.controller;
import java.nio.ByteBuffer;
import edu.wpi.first.hal.HAL;
public class XboxControllerRaw implements IHandController {
public static final int LEFT_X_AXIS = 0;
public static final int LEFT_Y_AXIS = 1;
public static final int LEFT_TRIGGER_AXIS = 2;
public static final int RIGHT_TRIGGER_AXIS = 3;
public static final int RIGHT_X_AXIS = 4;
public static final int RIGHT_Y_AXIS = 5;
public static final int LEFT_RIGHT_DPAD_AXIS = 6;
public static final int TOP_BOTTOM_DPAD_AXIS = 6;
public static final int A_BUTTON = 0;
public static final int B_BUTTON = 1;
public static final int X_BUTTON = 2;
public static final int Y_BUTTON = 3;
public static final int LEFT_BUMPER_BUTTON = 4;
public static final int RIGHT_BUMPER_BUTTON = 5;
public static final int BACK_BUTTON = 6;
public static final int START_BUTTON = 7;
public static final int LEFT_JOYSTICK_BUTTON = 8;
public static final int RIGHT_JOYSTICK_BUTTON = 9;
private static final double DEADZONE = 0.08;
private int m_ID;
private int m_buttons = 0;
private int m_numButtons;
private ByteBuffer m_buttonCountBuffer = ByteBuffer.allocateDirect(1);
float[] m_axes = new float[HAL.kMaxJoystickAxes];
public XboxControllerRaw(int id) {
m_ID = id;
}
public void updateInput() {
HAL.getJoystickAxes((byte) m_ID, m_axes);
m_buttons = HAL.getJoystickButtons((byte) m_ID, m_buttonCountBuffer);
m_numButtons = m_buttonCountBuffer.get(0);
}
public int getNumButtons() {
return m_numButtons;
}
public boolean getButton(int index) {
return (m_buttons & 1 << index) > 0;
}
/**
* Checks if the input falls within the deadzone.
* @param input from an axis on the controller
* @return true if input falls in deadzone, false if input falls outside deadzone
*/
public static boolean inDeadZone(double input){
return (Math.abs(input) < DEADZONE);
}
/**
* Updates an input to have a deadzone around the 0 position
* @param input from an axis on the controller
* @return updated input
*/
private double getAxisWithDeadZoneCheck(double input){
if(inDeadZone(input)){
return 0.0;
} else {
return input;
}
}
public double getLeftXAxis() {
return getAxisWithDeadZoneCheck(m_axes[LEFT_X_AXIS]);
}
public double getLeftYAxis() {
return getAxisWithDeadZoneCheck(m_axes[LEFT_Y_AXIS]);
}
public double getRightXAxis() {
return getAxisWithDeadZoneCheck(m_axes[RIGHT_X_AXIS]);
}
public double getRightYAxis() {
return getAxisWithDeadZoneCheck(m_axes[RIGHT_Y_AXIS]);
}
public double getLeftTriggerAxis() {
return getAxisWithDeadZoneCheck(m_axes[LEFT_TRIGGER_AXIS]);
}
public double getRightTriggerAxis() {
return getAxisWithDeadZoneCheck(m_axes[RIGHT_TRIGGER_AXIS]);
}
public int getDpadAngle() {
return -1;
}
}