diff --git a/wpilibc/src/main/native/cpp/buttons/POVButton.cpp b/wpilibc/src/main/native/cpp/buttons/POVButton.cpp new file mode 100644 index 0000000000..672992306f --- /dev/null +++ b/wpilibc/src/main/native/cpp/buttons/POVButton.cpp @@ -0,0 +1,15 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "frc/buttons/POVButton.h" + +using namespace frc; + +POVButton::POVButton(GenericHID& joystick, int angle, int povNumber) + : m_joystick(&joystick), m_angle(angle), m_povNumber(povNumber) {} + +bool POVButton::Get() { return m_joystick->GetPOV(m_povNumber) == m_angle; } diff --git a/wpilibc/src/main/native/include/frc/buttons/POVButton.h b/wpilibc/src/main/native/include/frc/buttons/POVButton.h new file mode 100644 index 0000000000..15c4bf834a --- /dev/null +++ b/wpilibc/src/main/native/include/frc/buttons/POVButton.h @@ -0,0 +1,36 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +#include "frc/GenericHID.h" +#include "frc/buttons/Button.h" + +namespace frc { +class POVButton : public Button { + public: + /** + * Creates a POV button for triggering commands. + * + * @param joystick The GenericHID object that has the POV + * @param angle The desired angle in degrees (e.g. 90, 270) + * @param povNumber The POV number (@see GenericHID#GetPOV) + */ + POVButton(GenericHID& joystick, int angle, int povNumber = 0); + virtual ~POVButton() = default; + + POVButton(POVButton&&) = default; + POVButton& operator=(POVButton&&) = default; + + bool Get() override; + + private: + GenericHID* m_joystick; + int m_angle; + int m_povNumber; +}; +} // namespace frc diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/buttons/POVButton.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/buttons/POVButton.java new file mode 100644 index 0000000000..abf8ca7244 --- /dev/null +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/buttons/POVButton.java @@ -0,0 +1,53 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.first.wpilibj.buttons; + +import edu.wpi.first.wpilibj.GenericHID; + +/** + * A {@link Button} that gets its state from a POV on a {@link GenericHID}. + */ +public class POVButton extends Button { + private final GenericHID m_joystick; + private final int m_angle; + private final int m_povNumber; + + /** + * Creates a POV button for triggering commands. + * + * @param joystick The GenericHID object that has the POV + * @param angle The desired angle in degrees (e.g. 90, 270) + * @param povNumber The POV number (see {@link GenericHID#getPOV(int)}) + */ + public POVButton(GenericHID joystick, int angle, int povNumber) { + m_joystick = joystick; + m_angle = angle; + m_povNumber = povNumber; + } + + /** + * Creates a POV button for triggering commands. + * By default, acts on POV 0 + * + * @param joystick The GenericHID object that has the POV + * @param angle The desired angle (e.g. 90, 270) + */ + public POVButton(GenericHID joystick, int angle) { + this(joystick, angle, 0); + } + + /** + * Checks whether the current value of the POV is the target angle. + * + * @return Whether the value of the POV matches the target angle + */ + @Override + public boolean get() { + return m_joystick.getPOV(m_povNumber) == m_angle; + } +}