[wpilib] Add BooleanEvent/Trigger factories on HID classes (#4247)

This commit is contained in:
Starlight220
2022-06-14 08:48:16 +03:00
committed by GitHub
parent 9b1bf5c7f1
commit fd884581e4
24 changed files with 1717 additions and 1 deletions

View File

@@ -8,6 +8,7 @@
#include "frc/DriverStation.h"
#include "frc/Errors.h"
#include "frc/event/BooleanEvent.h"
using namespace frc;
@@ -30,6 +31,11 @@ bool GenericHID::GetRawButtonReleased(int button) {
return DriverStation::GetStickButtonReleased(m_port, button);
}
BooleanEvent GenericHID::Button(int button, EventLoop* loop) const {
return BooleanEvent(loop,
[this, button]() { return this->GetRawButton(button); });
}
double GenericHID::GetRawAxis(int axis) const {
return DriverStation::GetStickAxis(m_port, axis);
}

View File

@@ -9,6 +9,8 @@
#include <hal/FRCUsageReporting.h>
#include <wpi/numbers>
#include "frc/event/BooleanEvent.h"
using namespace frc;
Joystick::Joystick(int port) : GenericHID(port) {
@@ -93,6 +95,10 @@ bool Joystick::GetTriggerReleased() {
return GetRawButtonReleased(Button::kTrigger);
}
BooleanEvent Joystick::Trigger(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetTrigger(); });
}
bool Joystick::GetTop() const {
return GetRawButton(Button::kTop);
}
@@ -105,6 +111,10 @@ bool Joystick::GetTopReleased() {
return GetRawButtonReleased(Button::kTop);
}
BooleanEvent Joystick::Top(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetTop(); });
}
double Joystick::GetMagnitude() const {
return std::sqrt(std::pow(GetX(), 2) + std::pow(GetY(), 2));
}

View File

@@ -6,6 +6,8 @@
#include <hal/FRCUsageReporting.h>
#include "frc/event/BooleanEvent.h"
using namespace frc;
PS4Controller::PS4Controller(int port) : GenericHID(port) {
@@ -48,6 +50,10 @@ bool PS4Controller::GetSquareButtonReleased() {
return GetRawButtonReleased(Button::kSquare);
}
BooleanEvent PS4Controller::Square(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetSquareButton(); });
}
bool PS4Controller::GetCrossButton() const {
return GetRawButton(Button::kCross);
}
@@ -60,6 +66,10 @@ bool PS4Controller::GetCrossButtonReleased() {
return GetRawButtonReleased(Button::kCross);
}
BooleanEvent PS4Controller::Cross(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetCrossButton(); });
}
bool PS4Controller::GetCircleButton() const {
return GetRawButton(Button::kCircle);
}
@@ -72,6 +82,10 @@ bool PS4Controller::GetCircleButtonReleased() {
return GetRawButtonReleased(Button::kCircle);
}
BooleanEvent PS4Controller::Circle(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetCircleButton(); });
}
bool PS4Controller::GetTriangleButton() const {
return GetRawButton(Button::kTriangle);
}
@@ -84,6 +98,10 @@ bool PS4Controller::GetTriangleButtonReleased() {
return GetRawButtonReleased(Button::kTriangle);
}
BooleanEvent PS4Controller::Triangle(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetTriangleButton(); });
}
bool PS4Controller::GetL1Button() const {
return GetRawButton(Button::kL1);
}
@@ -96,6 +114,10 @@ bool PS4Controller::GetL1ButtonReleased() {
return GetRawButtonReleased(Button::kL1);
}
BooleanEvent PS4Controller::L1(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetL1Button(); });
}
bool PS4Controller::GetR1Button() const {
return GetRawButton(Button::kR1);
}
@@ -108,6 +130,10 @@ bool PS4Controller::GetR1ButtonReleased() {
return GetRawButtonReleased(Button::kR1);
}
BooleanEvent PS4Controller::R1(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetR1Button(); });
}
bool PS4Controller::GetL2Button() const {
return GetRawButton(Button::kL2);
}
@@ -120,6 +146,10 @@ bool PS4Controller::GetL2ButtonReleased() {
return GetRawButtonReleased(Button::kL2);
}
BooleanEvent PS4Controller::L2(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetL2Button(); });
}
bool PS4Controller::GetR2Button() const {
return GetRawButton(Button::kR2);
}
@@ -132,6 +162,10 @@ bool PS4Controller::GetR2ButtonReleased() {
return GetRawButtonReleased(Button::kR2);
}
BooleanEvent PS4Controller::R2(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetR2Button(); });
}
bool PS4Controller::GetShareButton() const {
return GetRawButton(Button::kShare);
}
@@ -144,6 +178,10 @@ bool PS4Controller::GetShareButtonReleased() {
return GetRawButtonReleased(Button::kShare);
}
BooleanEvent PS4Controller::Share(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetShareButton(); });
}
bool PS4Controller::GetOptionsButton() const {
return GetRawButton(Button::kOptions);
}
@@ -156,6 +194,10 @@ bool PS4Controller::GetOptionsButtonReleased() {
return GetRawButtonReleased(Button::kOptions);
}
BooleanEvent PS4Controller::Options(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetOptionsButton(); });
}
bool PS4Controller::GetL3Button() const {
return GetRawButton(Button::kL3);
}
@@ -168,6 +210,10 @@ bool PS4Controller::GetL3ButtonReleased() {
return GetRawButtonReleased(Button::kL3);
}
BooleanEvent PS4Controller::L3(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetL3Button(); });
}
bool PS4Controller::GetR3Button() const {
return GetRawButton(Button::kR3);
}
@@ -180,6 +226,10 @@ bool PS4Controller::GetR3ButtonReleased() {
return GetRawButtonReleased(Button::kR3);
}
BooleanEvent PS4Controller::R3(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetR3Button(); });
}
bool PS4Controller::GetPSButton() const {
return GetRawButton(Button::kPS);
}
@@ -192,6 +242,10 @@ bool PS4Controller::GetPSButtonReleased() {
return GetRawButtonReleased(Button::kPS);
}
BooleanEvent PS4Controller::PS(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetPSButton(); });
}
bool PS4Controller::GetTouchpad() const {
return GetRawButton(Button::kTouchpad);
}
@@ -203,3 +257,7 @@ bool PS4Controller::GetTouchpadPressed() {
bool PS4Controller::GetTouchpadReleased() {
return GetRawButtonReleased(Button::kTouchpad);
}
BooleanEvent PS4Controller::Touchpad(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetTouchpad(); });
}

View File

@@ -6,6 +6,8 @@
#include <hal/FRCUsageReporting.h>
#include "frc/event/BooleanEvent.h"
using namespace frc;
XboxController::XboxController(int port) : GenericHID(port) {
@@ -60,6 +62,14 @@ bool XboxController::GetRightBumperReleased() {
return GetRawButtonReleased(Button::kRightBumper);
}
BooleanEvent XboxController::LeftBumper(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetLeftBumper(); });
}
BooleanEvent XboxController::RightBumper(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetRightBumper(); });
}
bool XboxController::GetLeftStickButton() const {
return GetRawButton(Button::kLeftStick);
}
@@ -84,6 +94,14 @@ bool XboxController::GetRightStickButtonReleased() {
return GetRawButtonReleased(Button::kRightStick);
}
BooleanEvent XboxController::LeftStick(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetLeftStickButton(); });
}
BooleanEvent XboxController::RightStick(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetRightStickButton(); });
}
bool XboxController::GetAButton() const {
return GetRawButton(Button::kA);
}
@@ -96,6 +114,10 @@ bool XboxController::GetAButtonReleased() {
return GetRawButtonReleased(Button::kA);
}
BooleanEvent XboxController::A(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetAButton(); });
}
bool XboxController::GetBButton() const {
return GetRawButton(Button::kB);
}
@@ -108,6 +130,10 @@ bool XboxController::GetBButtonReleased() {
return GetRawButtonReleased(Button::kB);
}
BooleanEvent XboxController::B(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetBButton(); });
}
bool XboxController::GetXButton() const {
return GetRawButton(Button::kX);
}
@@ -120,6 +146,10 @@ bool XboxController::GetXButtonReleased() {
return GetRawButtonReleased(Button::kX);
}
BooleanEvent XboxController::X(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetXButton(); });
}
bool XboxController::GetYButton() const {
return GetRawButton(Button::kY);
}
@@ -132,6 +162,10 @@ bool XboxController::GetYButtonReleased() {
return GetRawButtonReleased(Button::kY);
}
BooleanEvent XboxController::Y(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetYButton(); });
}
bool XboxController::GetBackButton() const {
return GetRawButton(Button::kBack);
}
@@ -144,6 +178,10 @@ bool XboxController::GetBackButtonReleased() {
return GetRawButtonReleased(Button::kBack);
}
BooleanEvent XboxController::Back(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetBackButton(); });
}
bool XboxController::GetStartButton() const {
return GetRawButton(Button::kStart);
}
@@ -155,3 +193,7 @@ bool XboxController::GetStartButtonPressed() {
bool XboxController::GetStartButtonReleased() {
return GetRawButtonReleased(Button::kStart);
}
BooleanEvent XboxController::Start(EventLoop* loop) const {
return BooleanEvent(loop, [this]() { return this->GetStartButton(); });
}

View File

@@ -10,7 +10,8 @@
namespace frc {
class DriverStation;
class BooleanEvent;
class EventLoop;
/**
* Handle input from standard HID devices connected to the Driver Station.
@@ -91,6 +92,16 @@ class GenericHID {
*/
bool GetRawButtonReleased(int button);
/**
* Constructs an event instance around this button's digital signal.
*
* @param button the button index
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the button's digital signal attached
* to the given loop.
*/
BooleanEvent Button(int button, EventLoop* loop) const;
/**
* Get the value of the axis.
*

View File

@@ -172,6 +172,15 @@ class Joystick : public GenericHID {
*/
bool GetTriggerReleased();
/**
* Constructs an event instance around the trigger button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the trigger button's digital signal
* attached to the given loop.
*/
BooleanEvent Trigger(EventLoop* loop) const;
/**
* Read the state of the top button on the joystick.
*
@@ -195,6 +204,15 @@ class Joystick : public GenericHID {
*/
bool GetTopReleased();
/**
* Constructs an event instance around the top button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the top button's digital signal
* attached to the given loop.
*/
BooleanEvent Top(EventLoop* loop) const;
/**
* Get the magnitude of the direction vector formed by the joystick's
* current position relative to its origin.

View File

@@ -98,6 +98,15 @@ class PS4Controller : public GenericHID {
*/
bool GetSquareButtonReleased();
/**
* Constructs an event instance around the square button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the square button's digital signal
* attached to the given loop.
*/
BooleanEvent Square(EventLoop* loop) const;
/**
* Read the value of the Cross button on the controller.
*
@@ -119,6 +128,15 @@ class PS4Controller : public GenericHID {
*/
bool GetCrossButtonReleased();
/**
* Constructs an event instance around the cross button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the cross button's digital signal
* attached to the given loop.
*/
BooleanEvent Cross(EventLoop* loop) const;
/**
* Read the value of the Circle button on the controller.
*
@@ -140,6 +158,15 @@ class PS4Controller : public GenericHID {
*/
bool GetCircleButtonReleased();
/**
* Constructs an event instance around the circle button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the circle button's digital signal
* attached to the given loop.
*/
BooleanEvent Circle(EventLoop* loop) const;
/**
* Read the value of the Triangle button on the controller.
*
@@ -161,6 +188,15 @@ class PS4Controller : public GenericHID {
*/
bool GetTriangleButtonReleased();
/**
* Constructs an event instance around the triangle button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the triangle button's digital signal
* attached to the given loop.
*/
BooleanEvent Triangle(EventLoop* loop) const;
/**
* Read the value of the L1 button on the controller.
*
@@ -182,6 +218,15 @@ class PS4Controller : public GenericHID {
*/
bool GetL1ButtonReleased();
/**
* Constructs an event instance around the L1 button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the L1 button's digital signal
* attached to the given loop.
*/
BooleanEvent L1(EventLoop* loop) const;
/**
* Read the value of the R1 button on the controller.
*
@@ -203,6 +248,15 @@ class PS4Controller : public GenericHID {
*/
bool GetR1ButtonReleased();
/**
* Constructs an event instance around the R1 button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the R1 button's digital signal
* attached to the given loop.
*/
BooleanEvent R1(EventLoop* loop) const;
/**
* Read the value of the L2 button on the controller.
*
@@ -224,6 +278,15 @@ class PS4Controller : public GenericHID {
*/
bool GetL2ButtonReleased();
/**
* Constructs an event instance around the L2 button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the L2 button's digital signal
* attached to the given loop.
*/
BooleanEvent L2(EventLoop* loop) const;
/**
* Read the value of the R2 button on the controller.
*
@@ -245,6 +308,15 @@ class PS4Controller : public GenericHID {
*/
bool GetR2ButtonReleased();
/**
* Constructs an event instance around the R2 button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the R2 button's digital signal
* attached to the given loop.
*/
BooleanEvent R2(EventLoop* loop) const;
/**
* Read the value of the Share button on the controller.
*
@@ -266,6 +338,15 @@ class PS4Controller : public GenericHID {
*/
bool GetShareButtonReleased();
/**
* Constructs an event instance around the share button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the share button's digital signal
* attached to the given loop.
*/
BooleanEvent Share(EventLoop* loop) const;
/**
* Read the value of the Options button on the controller.
*
@@ -287,6 +368,15 @@ class PS4Controller : public GenericHID {
*/
bool GetOptionsButtonReleased();
/**
* Constructs an event instance around the options button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the options button's digital signal
* attached to the given loop.
*/
BooleanEvent Options(EventLoop* loop) const;
/**
* Read the value of the L3 button (pressing the left analog stick) on the
* controller.
@@ -309,6 +399,15 @@ class PS4Controller : public GenericHID {
*/
bool GetL3ButtonReleased();
/**
* Constructs an event instance around the L3 button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the L3 button's digital signal
* attached to the given loop.
*/
BooleanEvent L3(EventLoop* loop) const;
/**
* Read the value of the R3 button (pressing the right analog stick) on the
* controller.
@@ -331,6 +430,15 @@ class PS4Controller : public GenericHID {
*/
bool GetR3ButtonReleased();
/**
* Constructs an event instance around the R3 button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the R3 button's digital signal
* attached to the given loop.
*/
BooleanEvent R3(EventLoop* loop) const;
/**
* Read the value of the PS button on the controller.
*
@@ -352,6 +460,15 @@ class PS4Controller : public GenericHID {
*/
bool GetPSButtonReleased();
/**
* Constructs an event instance around the PS button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the PS button's digital signal
* attached to the given loop.
*/
BooleanEvent PS(EventLoop* loop) const;
/**
* Read the value of the touchpad button on the controller.
*
@@ -373,6 +490,15 @@ class PS4Controller : public GenericHID {
*/
bool GetTouchpadReleased();
/**
* Constructs an event instance around the touchpad's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the touchpad's digital signal
* attached to the given loop.
*/
BooleanEvent Touchpad(EventLoop* loop) const;
struct Button {
static constexpr int kSquare = 1;
static constexpr int kCross = 2;

View File

@@ -96,6 +96,24 @@ class XboxController : public GenericHID {
*/
bool GetRightBumperReleased();
/**
* Constructs an event instance around the left bumper's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the left bumper's digital signal
* attached to the given loop.
*/
BooleanEvent LeftBumper(EventLoop* loop) const;
/**
* Constructs an event instance around the right bumper's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the right bumper's digital signal
* attached to the given loop.
*/
BooleanEvent RightBumper(EventLoop* loop) const;
/**
* Read the value of the left stick button (LSB) on the controller.
*/
@@ -126,6 +144,24 @@ class XboxController : public GenericHID {
*/
bool GetRightStickButtonReleased();
/**
* Constructs an event instance around the left stick's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the left stick's digital signal
* attached to the given loop.
*/
BooleanEvent LeftStick(EventLoop* loop) const;
/**
* Constructs an event instance around the right stick's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the right stick's digital signal
* attached to the given loop.
*/
BooleanEvent RightStick(EventLoop* loop) const;
/**
* Read the value of the A button on the controller.
*
@@ -147,6 +183,15 @@ class XboxController : public GenericHID {
*/
bool GetAButtonReleased();
/**
* Constructs an event instance around the A button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the A button's digital signal
* attached to the given loop.
*/
BooleanEvent A(EventLoop* loop) const;
/**
* Read the value of the B button on the controller.
*
@@ -168,6 +213,15 @@ class XboxController : public GenericHID {
*/
bool GetBButtonReleased();
/**
* Constructs an event instance around the B button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the B button's digital signal
* attached to the given loop.
*/
BooleanEvent B(EventLoop* loop) const;
/**
* Read the value of the X button on the controller.
*
@@ -189,6 +243,15 @@ class XboxController : public GenericHID {
*/
bool GetXButtonReleased();
/**
* Constructs an event instance around the X button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the X button's digital signal
* attached to the given loop.
*/
BooleanEvent X(EventLoop* loop) const;
/**
* Read the value of the Y button on the controller.
*
@@ -210,6 +273,15 @@ class XboxController : public GenericHID {
*/
bool GetYButtonReleased();
/**
* Constructs an event instance around the Y button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the Y button's digital signal
* attached to the given loop.
*/
BooleanEvent Y(EventLoop* loop) const;
/**
* Whether the Y button was released since the last check.
*
@@ -231,6 +303,15 @@ class XboxController : public GenericHID {
*/
bool GetBackButtonReleased();
/**
* Constructs an event instance around the back button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the back button's digital signal
* attached to the given loop.
*/
BooleanEvent Back(EventLoop* loop) const;
/**
* Read the value of the start button on the controller.
*
@@ -252,6 +333,15 @@ class XboxController : public GenericHID {
*/
bool GetStartButtonReleased();
/**
* Constructs an event instance around the start button's digital signal.
*
* @param loop the event loop instance to attach the event to.
* @return an event instance representing the start button's digital signal
* attached to the given loop.
*/
BooleanEvent Start(EventLoop* loop) const;
struct Button {
static constexpr int kLeftBumper = 5;
static constexpr int kRightBumper = 6;