diff --git a/wpilibc/src/main/native/cpp/GenericHID.cpp b/wpilibc/src/main/native/cpp/GenericHID.cpp index bee557a20a..39db699cc4 100644 --- a/wpilibc/src/main/native/cpp/GenericHID.cpp +++ b/wpilibc/src/main/native/cpp/GenericHID.cpp @@ -134,15 +134,17 @@ void GenericHID::SetOutputs(int value) { } void GenericHID::SetRumble(RumbleType type, double value) { - if (value < 0) { - value = 0; - } else if (value > 1) { - value = 1; - } + value = std::clamp(value, 0.0, 1.0); + double rumbleValue = value * 65535; + if (type == kLeftRumble) { - m_leftRumble = value * 65535; + m_leftRumble = rumbleValue; + } else if (type == kRightRumble) { + m_rightRumble = rumbleValue; } else { - m_rightRumble = value * 65535; + m_leftRumble = rumbleValue; + m_rightRumble = rumbleValue; } + HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble); } diff --git a/wpilibc/src/main/native/include/frc/GenericHID.h b/wpilibc/src/main/native/include/frc/GenericHID.h index ee9daf621b..a2a96cdc6e 100644 --- a/wpilibc/src/main/native/include/frc/GenericHID.h +++ b/wpilibc/src/main/native/include/frc/GenericHID.h @@ -23,7 +23,7 @@ class EventLoop; */ class GenericHID { public: - enum RumbleType { kLeftRumble, kRightRumble }; + enum RumbleType { kLeftRumble, kRightRumble, kBothRumble }; enum HIDType { kUnknown = -1, diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java index 2d62841c4d..686dd88ad6 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/GenericHID.java @@ -5,6 +5,7 @@ package edu.wpi.first.wpilibj; import edu.wpi.first.hal.DriverStationJNI; +import edu.wpi.first.math.MathUtil; import edu.wpi.first.wpilibj.event.BooleanEvent; import edu.wpi.first.wpilibj.event.EventLoop; import java.util.HashMap; @@ -21,7 +22,8 @@ public class GenericHID { /** Represents a rumble output on the JoyStick. */ public enum RumbleType { kLeftRumble, - kRightRumble + kRightRumble, + kBothRumble } public enum HIDType { @@ -397,16 +399,24 @@ public class GenericHID { * @param value The normalized value (0 to 1) to set the rumble to */ public void setRumble(RumbleType type, double value) { - if (value < 0) { - value = 0; - } else if (value > 1) { - value = 1; + value = MathUtil.clamp(value, 0, 1); + short rumbleValue = (short) (value * 65535); + + switch (type) { + case kLeftRumble: + this.m_leftRumble = rumbleValue; + break; + case kRightRumble: + this.m_rightRumble = rumbleValue; + break; + case kBothRumble: + default: + this.m_leftRumble = rumbleValue; + this.m_rightRumble = rumbleValue; + break; } - if (type == RumbleType.kLeftRumble) { - m_leftRumble = (short) (value * 65535); - } else { - m_rightRumble = (short) (value * 65535); - } - DriverStationJNI.setJoystickOutputs((byte) m_port, m_outputs, m_leftRumble, m_rightRumble); + + DriverStationJNI.setJoystickOutputs( + (byte) this.m_port, this.m_outputs, this.m_leftRumble, this.m_rightRumble); } }