From 45d4ed5bca100ae531c21e06484e22401379aaec Mon Sep 17 00:00:00 2001 From: PJ Reiniger Date: Sun, 21 Jun 2026 22:29:19 -0400 Subject: [PATCH] [wpilibc] Change DriverStationSim to use a C++ enum for alliance station (#8991) --- .../include/wpi/hal/DriverStationTypes.hpp | 20 +++++++++ .../python/semiwrap/DriverStationTypes.yml | 1 + .../python/semiwrap/DriverStationTypes_c.yml | 1 + .../cpp/simulation/DriverStationSim.cpp | 10 +++-- .../wpi/simulation/DriverStationSim.hpp | 5 ++- .../cpp/simulation/DriverStationSimTest.cpp | 37 +++++++++------- .../cpp/DigitalCommunicationTest.cpp | 42 ++++++++++--------- .../cpp/I2CCommunicationTest.cpp | 42 ++++++++++--------- 8 files changed, 97 insertions(+), 61 deletions(-) diff --git a/hal/src/main/native/include/wpi/hal/DriverStationTypes.hpp b/hal/src/main/native/include/wpi/hal/DriverStationTypes.hpp index e874e6222b..7ba2d16287 100644 --- a/hal/src/main/native/include/wpi/hal/DriverStationTypes.hpp +++ b/hal/src/main/native/include/wpi/hal/DriverStationTypes.hpp @@ -9,6 +9,26 @@ namespace wpi::hal { +/** + * The alliance station ID. + */ +enum class AllianceStationID { + /// Unknown. + UNKNOWN = HAL_ALLIANCE_STATION_UNKNOWN, + /// Red Alliance Station 1. + RED_1 = HAL_ALLIANCE_STATION_RED_1, + /// Red Alliance Station 2. + RED_2 = HAL_ALLIANCE_STATION_RED_2, + /// Red Alliance Station 3. + RED_3 = HAL_ALLIANCE_STATION_RED_3, + /// Blue Alliance Station 1. + BLUE_1 = HAL_ALLIANCE_STATION_BLUE_1, + /// Blue Alliance Station 2. + BLUE_2 = HAL_ALLIANCE_STATION_BLUE_2, + /// Blue Alliance Station 3. + BLUE_3 = HAL_ALLIANCE_STATION_BLUE_3, +}; + /** * The overall robot mode (not including enabled state). */ diff --git a/hal/src/main/python/semiwrap/DriverStationTypes.yml b/hal/src/main/python/semiwrap/DriverStationTypes.yml index ef4d35f41f..b82c26b011 100644 --- a/hal/src/main/python/semiwrap/DriverStationTypes.yml +++ b/hal/src/main/python/semiwrap/DriverStationTypes.yml @@ -5,6 +5,7 @@ extra_includes: - src/ds_types_fmt.h enums: + AllianceStationID: RobotMode: classes: wpi::hal::ControlWord: diff --git a/hal/src/main/python/semiwrap/DriverStationTypes_c.yml b/hal/src/main/python/semiwrap/DriverStationTypes_c.yml index 676ffd90f3..c840b9ee57 100644 --- a/hal/src/main/python/semiwrap/DriverStationTypes_c.yml +++ b/hal/src/main/python/semiwrap/DriverStationTypes_c.yml @@ -6,6 +6,7 @@ extra_includes: enums: HAL_AllianceStationID: + rename: _AllianceStationID value_prefix: HAL_ALLIANCE_STATION HAL_JoystickPOV: value_prefix: HAL_JOYSTICK_POV diff --git a/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp b/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp index 1afec9ca17..16ac7271e4 100644 --- a/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp +++ b/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp @@ -111,13 +111,15 @@ DriverStationSim::RegisterAllianceStationIdCallback(NotifyCallback callback, return store; } -HAL_AllianceStationID DriverStationSim::GetAllianceStationId() { - return HALSIM_GetDriverStationAllianceStationId(); +wpi::hal::AllianceStationID DriverStationSim::GetAllianceStationId() { + return static_cast( + HALSIM_GetDriverStationAllianceStationId()); } void DriverStationSim::SetAllianceStationId( - HAL_AllianceStationID allianceStationId) { - HALSIM_SetDriverStationAllianceStationId(allianceStationId); + wpi::hal::AllianceStationID allianceStationId) { + HALSIM_SetDriverStationAllianceStationId( + static_cast(allianceStationId)); } std::unique_ptr DriverStationSim::RegisterMatchTimeCallback( diff --git a/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp b/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp index 5df8eb43af..c3f64064a2 100644 --- a/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp +++ b/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp @@ -195,14 +195,15 @@ class DriverStationSim { * * @return the alliance station color and number */ - static HAL_AllianceStationID GetAllianceStationId(); + static wpi::hal::AllianceStationID GetAllianceStationId(); /** * Change the alliance station. * * @param allianceStationId the new alliance station */ - static void SetAllianceStationId(HAL_AllianceStationID allianceStationId); + static void SetAllianceStationId( + wpi::hal::AllianceStationID allianceStationId); /** * Register a callback on match time. diff --git a/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp b/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp index b64ebfb1e1..f27285ad7e 100644 --- a/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp +++ b/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp @@ -127,81 +127,88 @@ TEST(DriverStationTest, AllianceStationId) { EnumCallback callback; - HAL_AllianceStationID allianceStation = HAL_ALLIANCE_STATION_BLUE_2; + hal::AllianceStationID allianceStation = hal::AllianceStationID::BLUE_2; DriverStationSim::SetAllianceStationId(allianceStation); auto cb = DriverStationSim::RegisterAllianceStationIdCallback( callback.GetCallback(), false); // Unknown - allianceStation = HAL_ALLIANCE_STATION_UNKNOWN; + allianceStation = hal::AllianceStationID::UNKNOWN; DriverStationSim::SetAllianceStationId(allianceStation); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(allianceStation, DriverStationSim::GetAllianceStationId()); EXPECT_FALSE(MatchState::GetAlliance().has_value()); EXPECT_FALSE(MatchState::GetLocation().has_value()); EXPECT_TRUE(callback.WasTriggered()); - EXPECT_EQ(allianceStation, callback.GetLastValue()); + EXPECT_EQ(static_cast(allianceStation), + callback.GetLastValue()); // B1 - allianceStation = HAL_ALLIANCE_STATION_BLUE_1; + allianceStation = hal::AllianceStationID::BLUE_1; DriverStationSim::SetAllianceStationId(allianceStation); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(allianceStation, DriverStationSim::GetAllianceStationId()); EXPECT_EQ(Alliance::BLUE, MatchState::GetAlliance()); EXPECT_EQ(1, MatchState::GetLocation()); EXPECT_TRUE(callback.WasTriggered()); - EXPECT_EQ(allianceStation, callback.GetLastValue()); + EXPECT_EQ(static_cast(allianceStation), + callback.GetLastValue()); // B2 - allianceStation = HAL_ALLIANCE_STATION_BLUE_2; + allianceStation = hal::AllianceStationID::BLUE_2; DriverStationSim::SetAllianceStationId(allianceStation); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(allianceStation, DriverStationSim::GetAllianceStationId()); EXPECT_EQ(Alliance::BLUE, MatchState::GetAlliance()); EXPECT_EQ(2, MatchState::GetLocation()); EXPECT_TRUE(callback.WasTriggered()); - EXPECT_EQ(allianceStation, callback.GetLastValue()); + EXPECT_EQ(static_cast(allianceStation), + callback.GetLastValue()); // B3 - allianceStation = HAL_ALLIANCE_STATION_BLUE_3; + allianceStation = hal::AllianceStationID::BLUE_3; DriverStationSim::SetAllianceStationId(allianceStation); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(allianceStation, DriverStationSim::GetAllianceStationId()); EXPECT_EQ(Alliance::BLUE, MatchState::GetAlliance()); EXPECT_EQ(3, MatchState::GetLocation()); EXPECT_TRUE(callback.WasTriggered()); - EXPECT_EQ(allianceStation, callback.GetLastValue()); + EXPECT_EQ(static_cast(allianceStation), + callback.GetLastValue()); // R1 - allianceStation = HAL_ALLIANCE_STATION_RED_1; + allianceStation = hal::AllianceStationID::RED_1; DriverStationSim::SetAllianceStationId(allianceStation); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(allianceStation, DriverStationSim::GetAllianceStationId()); EXPECT_EQ(Alliance::RED, MatchState::GetAlliance()); EXPECT_EQ(1, MatchState::GetLocation()); EXPECT_TRUE(callback.WasTriggered()); - EXPECT_EQ(allianceStation, callback.GetLastValue()); + EXPECT_EQ(static_cast(allianceStation), + callback.GetLastValue()); // R2 - allianceStation = HAL_ALLIANCE_STATION_RED_2; + allianceStation = hal::AllianceStationID::RED_2; DriverStationSim::SetAllianceStationId(allianceStation); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(allianceStation, DriverStationSim::GetAllianceStationId()); EXPECT_EQ(Alliance::RED, MatchState::GetAlliance()); EXPECT_EQ(2, MatchState::GetLocation()); EXPECT_TRUE(callback.WasTriggered()); - EXPECT_EQ(allianceStation, callback.GetLastValue()); + EXPECT_EQ(static_cast(allianceStation), + callback.GetLastValue()); // R3 - allianceStation = HAL_ALLIANCE_STATION_RED_3; + allianceStation = hal::AllianceStationID::RED_3; DriverStationSim::SetAllianceStationId(allianceStation); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(allianceStation, DriverStationSim::GetAllianceStationId()); EXPECT_EQ(Alliance::RED, MatchState::GetAlliance()); EXPECT_EQ(3, MatchState::GetLocation()); EXPECT_TRUE(callback.WasTriggered()); - EXPECT_EQ(allianceStation, callback.GetLastValue()); + EXPECT_EQ(static_cast(allianceStation), + callback.GetLastValue()); } TEST(DriverStationTest, ReplayNumber) { diff --git a/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp b/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp index 376ac0b19f..c6185b3c44 100644 --- a/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp +++ b/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp @@ -43,7 +43,8 @@ class DigitalCommunicationTest : public testing::TestWithParam { } }; -class AllianceTest : public DigitalCommunicationTest {}; +class AllianceTest + : public DigitalCommunicationTest {}; TEST_P(AllianceTest, Alliance) { auto alliance = GetParam(); @@ -57,15 +58,15 @@ TEST_P(AllianceTest, Alliance) { bool isRed = false; switch (alliance) { - case HAL_ALLIANCE_STATION_BLUE_1: - case HAL_ALLIANCE_STATION_BLUE_2: - case HAL_ALLIANCE_STATION_BLUE_3: - case HAL_ALLIANCE_STATION_UNKNOWN: + case wpi::hal::AllianceStationID::BLUE_1: + case wpi::hal::AllianceStationID::BLUE_2: + case wpi::hal::AllianceStationID::BLUE_3: + case wpi::hal::AllianceStationID::UNKNOWN: isRed = false; break; - case HAL_ALLIANCE_STATION_RED_1: - case HAL_ALLIANCE_STATION_RED_2: - case HAL_ALLIANCE_STATION_RED_3: + case wpi::hal::AllianceStationID::RED_1: + case wpi::hal::AllianceStationID::RED_2: + case wpi::hal::AllianceStationID::RED_3: isRed = true; break; } @@ -74,26 +75,27 @@ TEST_P(AllianceTest, Alliance) { INSTANTIATE_TEST_SUITE_P( DigitalCommunicationTests, AllianceTest, - testing::Values( - HAL_ALLIANCE_STATION_RED_1, HAL_ALLIANCE_STATION_RED_2, - HAL_ALLIANCE_STATION_RED_3, HAL_ALLIANCE_STATION_BLUE_1, - HAL_ALLIANCE_STATION_BLUE_2, HAL_ALLIANCE_STATION_BLUE_3, - HAL_ALLIANCE_STATION_UNKNOWN), + testing::Values( + wpi::hal::AllianceStationID::RED_1, wpi::hal::AllianceStationID::RED_2, + wpi::hal::AllianceStationID::RED_3, wpi::hal::AllianceStationID::BLUE_1, + wpi::hal::AllianceStationID::BLUE_2, + wpi::hal::AllianceStationID::BLUE_3, + wpi::hal::AllianceStationID::UNKNOWN), [](const testing::TestParamInfo& info) { switch (info.param) { - case HAL_ALLIANCE_STATION_BLUE_1: + case wpi::hal::AllianceStationID::BLUE_1: return std::string{"Blue1"}; - case HAL_ALLIANCE_STATION_BLUE_2: + case wpi::hal::AllianceStationID::BLUE_2: return std::string{"Blue2"}; - case HAL_ALLIANCE_STATION_BLUE_3: + case wpi::hal::AllianceStationID::BLUE_3: return std::string{"Blue3"}; - case HAL_ALLIANCE_STATION_RED_1: + case wpi::hal::AllianceStationID::RED_1: return std::string{"Red1"}; - case HAL_ALLIANCE_STATION_RED_2: + case wpi::hal::AllianceStationID::RED_2: return std::string{"Red2"}; - case HAL_ALLIANCE_STATION_RED_3: + case wpi::hal::AllianceStationID::RED_3: return std::string{"Red3"}; - case HAL_ALLIANCE_STATION_UNKNOWN: + case wpi::hal::AllianceStationID::UNKNOWN: return std::string{"Unknown"}; } return std::string{"Error"}; diff --git a/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp b/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp index 7db92f351e..fa13368379 100644 --- a/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp +++ b/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp @@ -52,7 +52,8 @@ class I2CCommunicationTest : public testing::TestWithParam { } }; -class AllianceTest : public I2CCommunicationTest {}; +class AllianceTest : public I2CCommunicationTest { +}; TEST_P(AllianceTest, Alliance) { auto alliance = GetParam(); @@ -65,17 +66,17 @@ TEST_P(AllianceTest, Alliance) { char expected = 'U'; switch (alliance) { - case HAL_ALLIANCE_STATION_BLUE_1: - case HAL_ALLIANCE_STATION_BLUE_2: - case HAL_ALLIANCE_STATION_BLUE_3: + case wpi::hal::AllianceStationID::BLUE_1: + case wpi::hal::AllianceStationID::BLUE_2: + case wpi::hal::AllianceStationID::BLUE_3: expected = 'B'; break; - case HAL_ALLIANCE_STATION_RED_1: - case HAL_ALLIANCE_STATION_RED_2: - case HAL_ALLIANCE_STATION_RED_3: + case wpi::hal::AllianceStationID::RED_1: + case wpi::hal::AllianceStationID::RED_2: + case wpi::hal::AllianceStationID::RED_3: expected = 'R'; break; - case HAL_ALLIANCE_STATION_UNKNOWN: + case wpi::hal::AllianceStationID::UNKNOWN: expected = 'U'; break; } @@ -84,26 +85,27 @@ TEST_P(AllianceTest, Alliance) { INSTANTIATE_TEST_SUITE_P( I2CCommunicationTests, AllianceTest, - testing::Values( - HAL_ALLIANCE_STATION_RED_1, HAL_ALLIANCE_STATION_RED_2, - HAL_ALLIANCE_STATION_RED_3, HAL_ALLIANCE_STATION_BLUE_1, - HAL_ALLIANCE_STATION_BLUE_2, HAL_ALLIANCE_STATION_BLUE_3, - HAL_ALLIANCE_STATION_UNKNOWN), + testing::Values( + wpi::hal::AllianceStationID::RED_1, wpi::hal::AllianceStationID::RED_2, + wpi::hal::AllianceStationID::RED_3, wpi::hal::AllianceStationID::BLUE_1, + wpi::hal::AllianceStationID::BLUE_2, + wpi::hal::AllianceStationID::BLUE_3, + wpi::hal::AllianceStationID::UNKNOWN), [](const testing::TestParamInfo& info) { switch (info.param) { - case HAL_ALLIANCE_STATION_BLUE_1: + case wpi::hal::AllianceStationID::BLUE_1: return std::string{"Blue1"}; - case HAL_ALLIANCE_STATION_BLUE_2: + case wpi::hal::AllianceStationID::BLUE_2: return std::string{"Blue2"}; - case HAL_ALLIANCE_STATION_BLUE_3: + case wpi::hal::AllianceStationID::BLUE_3: return std::string{"Blue3"}; - case HAL_ALLIANCE_STATION_RED_1: + case wpi::hal::AllianceStationID::RED_1: return std::string{"Red1"}; - case HAL_ALLIANCE_STATION_RED_2: + case wpi::hal::AllianceStationID::RED_2: return std::string{"Red2"}; - case HAL_ALLIANCE_STATION_RED_3: + case wpi::hal::AllianceStationID::RED_3: return std::string{"Red3"}; - case HAL_ALLIANCE_STATION_UNKNOWN: + case wpi::hal::AllianceStationID::UNKNOWN: return std::string{"Unknown"}; } return std::string{"Error"};