diff --git a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java index 9e8cb7f240..f4734d94ce 100644 --- a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java +++ b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java @@ -204,6 +204,20 @@ public class DriverStation implements RobotState.Interface { } } + /** + * Returns the number of axis on a given joystick port + * + * @param stick The joystick port number + */ + public int getStickAxisCount(int stick){ + + if(stick < 0 || stick >= kJoystickPorts) { + throw new RuntimeException("Joystick index is out of range, should be 0-5"); + } + + return FRCNetworkCommunicationsLibrary.HALGetJoystickAxes((byte)stick).length; + } + /** * Get the state of a POV on the joystick. * @@ -228,6 +242,20 @@ public class DriverStation implements RobotState.Interface { return joystickPOVs[pov]; } + /** + * Returns the number of POVs on a given joystick port + * + * @param stick The joystick port number + */ + public int getStickPOVCount(int stick){ + + if(stick < 0 || stick >= kJoystickPorts) { + throw new RuntimeException("Joystick index is out of range, should be 0-5"); + } + + return FRCNetworkCommunicationsLibrary.HALGetJoystickPOVs((byte)stick).length; + } + /** * The state of the buttons on the joystick. * 12 buttons (4 msb are unused) from the joystick. @@ -251,6 +279,24 @@ public class DriverStation implements RobotState.Interface { return ((0x1 << (button - 1)) & buttons) != 0; } + /** + * Gets the number of buttons on a joystick + * + * @param stick the joystick port number + */ + public int getStickButtonCount(int stick){ + + if(stick < 0 || stick >= kJoystickPorts) { + throw new RuntimeException("Joystick index is out of range, should be 0-3"); + } + + ByteBuffer countBuffer = ByteBuffer.allocateDirect(1); + + int buttons = FRCNetworkCommunicationsLibrary.HALGetJoystickButtons((byte)stick, countBuffer); + byte count = countBuffer.get(); + return count; + } + /** * Gets a value indicating whether the Driver Station requires the * robot to be enabled. diff --git a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Joystick.java b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Joystick.java index 110f8b995a..c17e76216a 100644 --- a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Joystick.java +++ b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Joystick.java @@ -262,6 +262,13 @@ public class Joystick extends GenericHID { } } + /** + * For the current joystick, return the number of axis + */ + public int getAxisCount(){ + return m_ds.getStickAxisCount(m_port); + } + /** * Read the state of the trigger on the joystick. * @@ -310,6 +317,13 @@ public class Joystick extends GenericHID { return m_ds.getStickButton(m_port, (byte)button); } + /** + * For the current joystick, return the number of buttons + */ + public int getButtonCount(){ + return m_ds.getStickButtonCount(m_port); + } + /** * Get the state of a POV on the joystick. * @@ -319,6 +333,13 @@ public class Joystick extends GenericHID { return m_ds.getStickPOV(m_port, pov); } + /** + * For the current joystick, return the number of POVs + */ + public int getPOVCount(){ + return m_ds.getStickPOVCount(m_port); + } + /** * Get buttons based on an enumerated type. *