mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
[wpilib] Add PS4Controller, remove Hand from GenericHID/XboxController (#3345)
- GenericHID is now concrete, and has only getRawAxis/Button(int) functionality - getXxx() has been moved into Joystick as that's the only place where it makes sense - Hand (and therefore getXxx(Hand)) has been removed, replaced by specific getLeft/RightXxx() methods in XboxController and the new PS4Controller class - C++ ::Button:: and ::Axis:: enums have been converted to identically-namespaced static constexpr ints
This commit is contained in:
@@ -4,30 +4,17 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define AXIS_TEST(JoystickType, AxisName) \
|
||||
TEST(JoystickType##Tests, Set##HandType##AxisName##Axis) { \
|
||||
JoystickType joy{2}; \
|
||||
sim::JoystickType##Sim joysim{joy}; \
|
||||
joysim.Set##AxisName(0.35); \
|
||||
joysim.NotifyNewData(); \
|
||||
ASSERT_NEAR(joy.Get##AxisName(), 0.35, 0.001); \
|
||||
#define AXIS_TEST(JoystickType, AxisName) \
|
||||
TEST(JoystickType##Test, Get##AxisName) { \
|
||||
JoystickType joy{2}; \
|
||||
sim::JoystickType##Sim joysim{joy}; \
|
||||
joysim.Set##AxisName(0.35); \
|
||||
joysim.NotifyNewData(); \
|
||||
ASSERT_NEAR(joy.Get##AxisName(), 0.35, 0.001); \
|
||||
}
|
||||
|
||||
#define HANDED_AXIS_TEST_IMPL(JoystickType, HandType, AxisName) \
|
||||
TEST(JoystickType##Tests, Set##HandType##AxisName##Axis) { \
|
||||
JoystickType joy{2}; \
|
||||
sim::JoystickType##Sim joysim{joy}; \
|
||||
joysim.Set##AxisName(JoystickType::HandType, 0.35); \
|
||||
joysim.NotifyNewData(); \
|
||||
ASSERT_NEAR(joy.Get##AxisName(JoystickType::HandType), 0.35, 0.001); \
|
||||
}
|
||||
|
||||
#define HANDED_AXIS_TEST(JoystickType, AxisName) \
|
||||
HANDED_AXIS_TEST_IMPL(JoystickType, kLeftHand, AxisName) \
|
||||
HANDED_AXIS_TEST_IMPL(JoystickType, kRightHand, AxisName)
|
||||
|
||||
#define BUTTON_TEST(JoystickType, ButtonName) \
|
||||
TEST(JoystickType##Tests, Set##ButtonName##Button) { \
|
||||
TEST(JoystickType##Test, Get##ButtonName) { \
|
||||
JoystickType joy{1}; \
|
||||
sim::JoystickType##Sim joysim{joy}; \
|
||||
\
|
||||
@@ -50,32 +37,3 @@
|
||||
ASSERT_FALSE(joy.Get##ButtonName##Pressed()); \
|
||||
ASSERT_TRUE(joy.Get##ButtonName##Released()); \
|
||||
}
|
||||
|
||||
#define HANDED_BUTTON_TEST_IMPL(JoystickType, HandType, ButtonName) \
|
||||
TEST(JoystickType##Tests, Get##HandType##ButtonName##Button) { \
|
||||
JoystickType joy{1}; \
|
||||
sim::JoystickType##Sim joysim{joy}; \
|
||||
\
|
||||
joysim.Set##ButtonName(JoystickType::HandType, false); \
|
||||
joysim.NotifyNewData(); \
|
||||
ASSERT_FALSE(joy.Get##ButtonName(JoystickType::HandType)); \
|
||||
/* need to call pressed and released to clear flags */ \
|
||||
joy.Get##ButtonName##Pressed(JoystickType::HandType); \
|
||||
joy.Get##ButtonName##Released(JoystickType::HandType); \
|
||||
\
|
||||
joysim.Set##ButtonName(JoystickType::HandType, true); \
|
||||
joysim.NotifyNewData(); \
|
||||
ASSERT_TRUE(joy.Get##ButtonName(JoystickType::HandType)); \
|
||||
ASSERT_TRUE(joy.Get##ButtonName##Pressed(JoystickType::HandType)); \
|
||||
ASSERT_FALSE(joy.Get##ButtonName##Released(JoystickType::HandType)); \
|
||||
\
|
||||
joysim.Set##ButtonName(JoystickType::HandType, false); \
|
||||
joysim.NotifyNewData(); \
|
||||
ASSERT_FALSE(joy.Get##ButtonName(JoystickType::HandType)); \
|
||||
ASSERT_FALSE(joy.Get##ButtonName##Pressed(JoystickType::HandType)); \
|
||||
ASSERT_TRUE(joy.Get##ButtonName##Released(JoystickType::HandType)); \
|
||||
}
|
||||
|
||||
#define HANDED_BUTTON_TEST(JoystickType, ButtonName) \
|
||||
HANDED_BUTTON_TEST_IMPL(JoystickType, kLeftHand, ButtonName) \
|
||||
HANDED_BUTTON_TEST_IMPL(JoystickType, kRightHand, ButtonName)
|
||||
|
||||
37
wpilibc/src/test/native/cpp/PS4ControllerTest.cpp
Normal file
37
wpilibc/src/test/native/cpp/PS4ControllerTest.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
// Copyright (c) FIRST and other WPILib contributors.
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
#include "frc/PS4Controller.h" // NOLINT(build/include_order)
|
||||
|
||||
#include "JoystickTestMacros.h"
|
||||
#include "frc/simulation/PS4ControllerSim.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace frc;
|
||||
|
||||
BUTTON_TEST(PS4Controller, SquareButton)
|
||||
BUTTON_TEST(PS4Controller, CrossButton)
|
||||
BUTTON_TEST(PS4Controller, CircleButton)
|
||||
BUTTON_TEST(PS4Controller, TriangleButton)
|
||||
|
||||
BUTTON_TEST(PS4Controller, L1Button)
|
||||
BUTTON_TEST(PS4Controller, R1Button)
|
||||
BUTTON_TEST(PS4Controller, L2Button)
|
||||
BUTTON_TEST(PS4Controller, R2Button)
|
||||
|
||||
BUTTON_TEST(PS4Controller, ShareButton)
|
||||
BUTTON_TEST(PS4Controller, OptionsButton)
|
||||
|
||||
BUTTON_TEST(PS4Controller, L3Button)
|
||||
BUTTON_TEST(PS4Controller, R3Button)
|
||||
|
||||
BUTTON_TEST(PS4Controller, PSButton)
|
||||
BUTTON_TEST(PS4Controller, Touchpad)
|
||||
|
||||
AXIS_TEST(PS4Controller, LeftX)
|
||||
AXIS_TEST(PS4Controller, RightX)
|
||||
AXIS_TEST(PS4Controller, LeftY)
|
||||
AXIS_TEST(PS4Controller, RightY)
|
||||
AXIS_TEST(PS4Controller, L2Axis)
|
||||
AXIS_TEST(PS4Controller, R2Axis)
|
||||
@@ -10,8 +10,11 @@
|
||||
|
||||
using namespace frc;
|
||||
|
||||
HANDED_BUTTON_TEST(XboxController, Bumper)
|
||||
HANDED_BUTTON_TEST(XboxController, StickButton)
|
||||
BUTTON_TEST(XboxController, LeftBumper)
|
||||
BUTTON_TEST(XboxController, RightBumper)
|
||||
|
||||
BUTTON_TEST(XboxController, LeftStickButton)
|
||||
BUTTON_TEST(XboxController, RightStickButton)
|
||||
|
||||
BUTTON_TEST(XboxController, AButton)
|
||||
BUTTON_TEST(XboxController, BButton)
|
||||
@@ -20,6 +23,10 @@ BUTTON_TEST(XboxController, YButton)
|
||||
BUTTON_TEST(XboxController, BackButton)
|
||||
BUTTON_TEST(XboxController, StartButton)
|
||||
|
||||
HANDED_AXIS_TEST(XboxController, X)
|
||||
HANDED_AXIS_TEST(XboxController, Y)
|
||||
HANDED_AXIS_TEST(XboxController, TriggerAxis)
|
||||
AXIS_TEST(XboxController, LeftX)
|
||||
AXIS_TEST(XboxController, RightX)
|
||||
AXIS_TEST(XboxController, LeftY)
|
||||
AXIS_TEST(XboxController, RightY)
|
||||
|
||||
AXIS_TEST(XboxController, LeftTriggerAxis)
|
||||
AXIS_TEST(XboxController, RightTriggerAxis)
|
||||
|
||||
Reference in New Issue
Block a user