mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-02 02:51:42 +00:00
[wpilibc] Change DriverStationSim to use a C++ enum for alliance station (#8991)
This commit is contained in:
@@ -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).
|
||||
*/
|
||||
|
||||
@@ -5,6 +5,7 @@ extra_includes:
|
||||
- src/ds_types_fmt.h
|
||||
|
||||
enums:
|
||||
AllianceStationID:
|
||||
RobotMode:
|
||||
classes:
|
||||
wpi::hal::ControlWord:
|
||||
|
||||
@@ -6,6 +6,7 @@ extra_includes:
|
||||
|
||||
enums:
|
||||
HAL_AllianceStationID:
|
||||
rename: _AllianceStationID
|
||||
value_prefix: HAL_ALLIANCE_STATION
|
||||
HAL_JoystickPOV:
|
||||
value_prefix: HAL_JOYSTICK_POV
|
||||
|
||||
@@ -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<wpi::hal::AllianceStationID>(
|
||||
HALSIM_GetDriverStationAllianceStationId());
|
||||
}
|
||||
|
||||
void DriverStationSim::SetAllianceStationId(
|
||||
HAL_AllianceStationID allianceStationId) {
|
||||
HALSIM_SetDriverStationAllianceStationId(allianceStationId);
|
||||
wpi::hal::AllianceStationID allianceStationId) {
|
||||
HALSIM_SetDriverStationAllianceStationId(
|
||||
static_cast<HAL_AllianceStationID>(allianceStationId));
|
||||
}
|
||||
|
||||
std::unique_ptr<CallbackStore> DriverStationSim::RegisterMatchTimeCallback(
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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<HAL_AllianceStationID>(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<HAL_AllianceStationID>(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<HAL_AllianceStationID>(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<HAL_AllianceStationID>(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<HAL_AllianceStationID>(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<HAL_AllianceStationID>(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<HAL_AllianceStationID>(allianceStation),
|
||||
callback.GetLastValue());
|
||||
}
|
||||
|
||||
TEST(DriverStationTest, ReplayNumber) {
|
||||
|
||||
@@ -43,7 +43,8 @@ class DigitalCommunicationTest : public testing::TestWithParam<T> {
|
||||
}
|
||||
};
|
||||
|
||||
class AllianceTest : public DigitalCommunicationTest<HAL_AllianceStationID> {};
|
||||
class AllianceTest
|
||||
: public DigitalCommunicationTest<wpi::hal::AllianceStationID> {};
|
||||
|
||||
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_AllianceStationID>(
|
||||
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>(
|
||||
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<AllianceTest::ParamType>& 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"};
|
||||
|
||||
@@ -52,7 +52,8 @@ class I2CCommunicationTest : public testing::TestWithParam<T> {
|
||||
}
|
||||
};
|
||||
|
||||
class AllianceTest : public I2CCommunicationTest<HAL_AllianceStationID> {};
|
||||
class AllianceTest : public I2CCommunicationTest<wpi::hal::AllianceStationID> {
|
||||
};
|
||||
|
||||
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_AllianceStationID>(
|
||||
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>(
|
||||
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<AllianceTest::ParamType>& 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"};
|
||||
|
||||
Reference in New Issue
Block a user