From c35df58a81412eed1946ac8610d5b732369c0c16 Mon Sep 17 00:00:00 2001 From: Benjamin Hall Date: Wed, 17 Jun 2026 16:38:13 -0400 Subject: [PATCH] [wpilibc] Change `DriverStationSim` to use `wpi::hal::RobotMode` (#8988) The `RobotState::GetRobotMode()` API returns this enum class, but `DriverStationSim` was using the `HAL_RobotMode` enum instead. This commonizes the two APIs to return the same `RobotMode` enum class. This difference in the APIs also affected Python, as the `hal.RobotMode` and `hal._wpiHal._RobotMode` types are not compatible with each other. --- .../cpp/wpi/command/button/RobotModeTriggersTest.cpp | 6 +++--- .../main/native/cpp/simulation/DriverStationSim.cpp | 8 ++++---- .../include/wpi/simulation/DriverStationSim.hpp | 6 +++--- wpilibc/src/main/python/wpilib/testing/controller.py | 2 +- .../src/main/python/wpilib/testing/pytest_plugin.py | 2 +- wpilibc/src/test/native/cpp/TimedRobotTest.cpp | 12 ++++++------ .../native/cpp/simulation/DriverStationSimTest.cpp | 10 +++++----- .../examples/ArmSimulation/cpp/ArmSimulationTest.cpp | 2 +- .../cpp/ElevatorSimulationTest.cpp | 2 +- .../cpp/DigitalCommunicationTest.cpp | 3 ++- .../I2CCommunication/cpp/I2CCommunicationTest.cpp | 3 ++- 11 files changed, 29 insertions(+), 27 deletions(-) diff --git a/commandsv2/src/test/native/cpp/wpi/command/button/RobotModeTriggersTest.cpp b/commandsv2/src/test/native/cpp/wpi/command/button/RobotModeTriggersTest.cpp index 2a4aa10d69..c4c1e0ae92 100644 --- a/commandsv2/src/test/native/cpp/wpi/command/button/RobotModeTriggersTest.cpp +++ b/commandsv2/src/test/native/cpp/wpi/command/button/RobotModeTriggersTest.cpp @@ -15,7 +15,7 @@ class RobotModeTriggersTest : public CommandTestBase {}; TEST(RobotModeTriggersTest, Autonomous) { DriverStationSim::ResetData(); - DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_AUTONOMOUS); + DriverStationSim::SetRobotMode(wpi::hal::RobotMode::AUTONOMOUS); DriverStationSim::SetEnabled(true); DriverStationSim::NotifyNewData(); Trigger autonomous = RobotModeTriggers::Autonomous(); @@ -24,7 +24,7 @@ TEST(RobotModeTriggersTest, Autonomous) { TEST(RobotModeTriggersTest, Teleop) { DriverStationSim::ResetData(); - DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_TELEOPERATED); + DriverStationSim::SetRobotMode(wpi::hal::RobotMode::TELEOPERATED); DriverStationSim::SetEnabled(true); DriverStationSim::NotifyNewData(); Trigger teleop = RobotModeTriggers::Teleop(); @@ -41,7 +41,7 @@ TEST(RobotModeTriggersTest, Disabled) { TEST(RobotModeTriggersTest, UtilityMode) { DriverStationSim::ResetData(); - DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_UTILITY); + DriverStationSim::SetRobotMode(wpi::hal::RobotMode::UTILITY); DriverStationSim::SetEnabled(true); DriverStationSim::NotifyNewData(); Trigger test = RobotModeTriggers::Utility(); diff --git a/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp b/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp index ef82affe00..1afec9ca17 100644 --- a/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp +++ b/wpilibc/src/main/native/cpp/simulation/DriverStationSim.cpp @@ -42,12 +42,12 @@ std::unique_ptr DriverStationSim::RegisterRobotModeCallback( return store; } -HAL_RobotMode DriverStationSim::GetRobotMode() { - return HALSIM_GetDriverStationRobotMode(); +hal::RobotMode DriverStationSim::GetRobotMode() { + return static_cast(HALSIM_GetDriverStationRobotMode()); } -void DriverStationSim::SetRobotMode(HAL_RobotMode robotMode) { - HALSIM_SetDriverStationRobotMode(robotMode); +void DriverStationSim::SetRobotMode(hal::RobotMode robotMode) { + HALSIM_SetDriverStationRobotMode(static_cast(robotMode)); } std::unique_ptr DriverStationSim::RegisterEStopCallback( diff --git a/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp b/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp index 2dfaf06fde..5df8eb43af 100644 --- a/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp +++ b/wpilibc/src/main/native/include/wpi/simulation/DriverStationSim.hpp @@ -9,7 +9,7 @@ #include #include "wpi/driverstation/internal/DriverStationBackend.hpp" -#include "wpi/hal/DriverStationTypes.h" +#include "wpi/hal/DriverStationTypes.hpp" #include "wpi/hal/simulation/DriverStationData.h" #include "wpi/simulation/CallbackStore.hpp" @@ -91,14 +91,14 @@ class DriverStationSim { * * @return robot mode */ - static HAL_RobotMode GetRobotMode(); + static hal::RobotMode GetRobotMode(); /** * Change the robot mode set by the DS. * * @param robotMode the new value */ - static void SetRobotMode(HAL_RobotMode robotMode); + static void SetRobotMode(hal::RobotMode robotMode); /** * Register a callback on the eStop state. diff --git a/wpilibc/src/main/python/wpilib/testing/controller.py b/wpilibc/src/main/python/wpilib/testing/controller.py index 9fb5c1ccbc..5a871bd9b1 100644 --- a/wpilibc/src/main/python/wpilib/testing/controller.py +++ b/wpilibc/src/main/python/wpilib/testing/controller.py @@ -12,7 +12,7 @@ from ..simulation import ( stepTimingAsync, getProgramStarted, ) -from hal._wpiHal import _RobotMode as RobotMode +from hal import RobotMode class RobotTestController: diff --git a/wpilibc/src/main/python/wpilib/testing/pytest_plugin.py b/wpilibc/src/main/python/wpilib/testing/pytest_plugin.py index eb1021802a..4857ac3424 100644 --- a/wpilibc/src/main/python/wpilib/testing/pytest_plugin.py +++ b/wpilibc/src/main/python/wpilib/testing/pytest_plugin.py @@ -5,9 +5,9 @@ import weakref import pytest +from hal import RobotMode import hal import hal.simulation -from hal._wpiHal import _RobotMode as RobotMode import ntcore import wpilib from wpilib.simulation import DriverStationSim, pauseTiming, restartTiming diff --git a/wpilibc/src/test/native/cpp/TimedRobotTest.cpp b/wpilibc/src/test/native/cpp/TimedRobotTest.cpp index 015b9c884f..8e487ea76b 100644 --- a/wpilibc/src/test/native/cpp/TimedRobotTest.cpp +++ b/wpilibc/src/test/native/cpp/TimedRobotTest.cpp @@ -165,7 +165,7 @@ TEST_F(TimedRobotTest, AutonomousMode) { wpi::sim::WaitForProgramStart(); wpi::sim::DriverStationSim::SetEnabled(true); - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_AUTONOMOUS); + wpi::sim::DriverStationSim::SetRobotMode(hal::RobotMode::AUTONOMOUS); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(1u, robot.m_simulationInitCount); @@ -237,7 +237,7 @@ TEST_F(TimedRobotTest, TeleopMode) { wpi::sim::WaitForProgramStart(); wpi::sim::DriverStationSim::SetEnabled(true); - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_TELEOPERATED); + wpi::sim::DriverStationSim::SetRobotMode(hal::RobotMode::TELEOPERATED); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(1u, robot.m_simulationInitCount); @@ -308,7 +308,7 @@ TEST_F(TimedRobotTest, UtilityMode) { wpi::sim::WaitForProgramStart(); wpi::sim::DriverStationSim::SetEnabled(true); - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_UTILITY); + wpi::sim::DriverStationSim::SetRobotMode(hal::RobotMode::UTILITY); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_EQ(1u, robot.m_simulationInitCount); @@ -429,7 +429,7 @@ TEST_F(TimedRobotTest, ModeChange) { // Transition to autonomous wpi::sim::DriverStationSim::SetEnabled(true); - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_AUTONOMOUS); + wpi::sim::DriverStationSim::SetRobotMode(hal::RobotMode::AUTONOMOUS); wpi::sim::DriverStationSim::NotifyNewData(); wpi::sim::StepTiming(kPeriod); @@ -446,7 +446,7 @@ TEST_F(TimedRobotTest, ModeChange) { // Transition to teleop wpi::sim::DriverStationSim::SetEnabled(true); - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_TELEOPERATED); + wpi::sim::DriverStationSim::SetRobotMode(hal::RobotMode::TELEOPERATED); wpi::sim::DriverStationSim::NotifyNewData(); wpi::sim::StepTiming(kPeriod); @@ -463,7 +463,7 @@ TEST_F(TimedRobotTest, ModeChange) { // Transition to utility wpi::sim::DriverStationSim::SetEnabled(true); - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_UTILITY); + wpi::sim::DriverStationSim::SetRobotMode(hal::RobotMode::UTILITY); wpi::sim::DriverStationSim::NotifyNewData(); wpi::sim::StepTiming(kPeriod); diff --git a/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp b/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp index 65ee41125c..b64ebfb1e1 100644 --- a/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp +++ b/wpilibc/src/test/native/cpp/simulation/DriverStationSimTest.cpp @@ -24,7 +24,7 @@ TEST(DriverStationTest, Enabled) { BooleanCallback callback; auto cb = DriverStationSim::RegisterEnabledCallback(callback.GetCallback(), false); - DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_TELEOPERATED); + DriverStationSim::SetRobotMode(RobotMode::TELEOPERATED); DriverStationSim::SetEnabled(true); DriverStationSim::NotifyNewData(); EXPECT_TRUE(DriverStationSim::GetEnabled()); @@ -41,9 +41,9 @@ TEST(DriverStationTest, AutonomousMode) { EnumCallback callback; auto cb = DriverStationSim::RegisterRobotModeCallback(callback.GetCallback(), false); - DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_AUTONOMOUS); + DriverStationSim::SetRobotMode(RobotMode::AUTONOMOUS); DriverStationSim::NotifyNewData(); - EXPECT_EQ(DriverStationSim::GetRobotMode(), HAL_ROBOT_MODE_AUTONOMOUS); + EXPECT_EQ(DriverStationSim::GetRobotMode(), RobotMode::AUTONOMOUS); EXPECT_TRUE(RobotState::IsAutonomous()); EXPECT_EQ(RobotState::GetRobotMode(), RobotMode::AUTONOMOUS); EXPECT_TRUE(callback.WasTriggered()); @@ -58,9 +58,9 @@ TEST(DriverStationTest, Mode) { EnumCallback callback; auto cb = DriverStationSim::RegisterRobotModeCallback(callback.GetCallback(), false); - DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_UTILITY); + DriverStationSim::SetRobotMode(RobotMode::UTILITY); DriverStationSim::NotifyNewData(); - EXPECT_EQ(DriverStationSim::GetRobotMode(), HAL_ROBOT_MODE_UTILITY); + EXPECT_EQ(DriverStationSim::GetRobotMode(), RobotMode::UTILITY); EXPECT_TRUE(RobotState::IsUtility()); EXPECT_EQ(RobotState::GetRobotMode(), RobotMode::UTILITY); EXPECT_TRUE(callback.WasTriggered()); diff --git a/wpilibcExamples/src/test/cpp/examples/ArmSimulation/cpp/ArmSimulationTest.cpp b/wpilibcExamples/src/test/cpp/examples/ArmSimulation/cpp/ArmSimulationTest.cpp index 65f0d5067c..1cc991832f 100644 --- a/wpilibcExamples/src/test/cpp/examples/ArmSimulation/cpp/ArmSimulationTest.cpp +++ b/wpilibcExamples/src/test/cpp/examples/ArmSimulation/cpp/ArmSimulationTest.cpp @@ -56,7 +56,7 @@ TEST_P(ArmSimulationTest, Teleop) { // teleop init { - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_TELEOPERATED); + wpi::sim::DriverStationSim::SetRobotMode(wpi::hal::RobotMode::TELEOPERATED); wpi::sim::DriverStationSim::SetEnabled(true); wpi::sim::DriverStationSim::NotifyNewData(); diff --git a/wpilibcExamples/src/test/cpp/examples/ElevatorSimulation/cpp/ElevatorSimulationTest.cpp b/wpilibcExamples/src/test/cpp/examples/ElevatorSimulation/cpp/ElevatorSimulationTest.cpp index 3e0e237a03..42c1365e2a 100644 --- a/wpilibcExamples/src/test/cpp/examples/ElevatorSimulation/cpp/ElevatorSimulationTest.cpp +++ b/wpilibcExamples/src/test/cpp/examples/ElevatorSimulation/cpp/ElevatorSimulationTest.cpp @@ -52,7 +52,7 @@ class ElevatorSimulationTest : public testing::Test { TEST_F(ElevatorSimulationTest, Teleop) { // teleop init { - wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_TELEOPERATED); + wpi::sim::DriverStationSim::SetRobotMode(wpi::hal::RobotMode::TELEOPERATED); wpi::sim::DriverStationSim::SetEnabled(true); wpi::sim::DriverStationSim::NotifyNewData(); diff --git a/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp b/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp index 52b12cbd49..376ac0b19f 100644 --- a/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp +++ b/wpilibcExamples/src/test/cpp/snippets/DigitalCommunication/cpp/DigitalCommunicationTest.cpp @@ -122,7 +122,8 @@ class AutonomousTest : public DigitalCommunicationTest {}; TEST_P(AutonomousTest, Autonomous) { auto autonomous = GetParam(); wpi::sim::DriverStationSim::SetRobotMode( - autonomous ? HAL_ROBOT_MODE_AUTONOMOUS : HAL_ROBOT_MODE_TELEOPERATED); + autonomous ? wpi::hal::RobotMode::AUTONOMOUS + : wpi::hal::RobotMode::TELEOPERATED); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_TRUE(autonomousOutput.GetInitialized()); diff --git a/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp b/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp index 5c1642abd8..7db92f351e 100644 --- a/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp +++ b/wpilibcExamples/src/test/cpp/snippets/I2CCommunication/cpp/I2CCommunicationTest.cpp @@ -132,7 +132,8 @@ class AutonomousTest : public I2CCommunicationTest {}; TEST_P(AutonomousTest, Autonomous) { auto autonomous = GetParam(); wpi::sim::DriverStationSim::SetRobotMode( - autonomous ? HAL_ROBOT_MODE_AUTONOMOUS : HAL_ROBOT_MODE_TELEOPERATED); + autonomous ? wpi::hal::RobotMode::AUTONOMOUS + : wpi::hal::RobotMode::TELEOPERATED); wpi::sim::DriverStationSim::NotifyNewData(); EXPECT_TRUE(HALSIM_GetI2CInitialized(port));