[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:
Starlight220
2021-08-14 20:00:46 +03:00
committed by GitHub
parent 25f6f478a5
commit 031962608b
82 changed files with 2548 additions and 934 deletions

View File

@@ -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)