18class ReplayAutoEnable final {
22 static ReplayAutoEnable &replayAutoEnable = *
new ReplayAutoEnable{};
23 return replayAutoEnable;
28 wpi::Notifier _enableNotifier;
29 uint32_t _startCount = 0;
35 if (dsAttachedSig.status.IsOK()) {
36 wpi::sim::DriverStationSim::SetDsAttached(dsAttachedSig.value);
39 if (wpi::sim::DriverStationSim::GetDsAttached()) {
41 if (fmsAttachedSig.status.IsOK()) {
42 wpi::sim::DriverStationSim::SetFmsAttached(fmsAttachedSig.value);
46 if (enableSig.status.IsOK()) {
47 wpi::sim::DriverStationSim::SetEnabled(enableSig.value);
51 if (robotModeSig.status.IsOK()) {
52 if (robotModeSig.value ==
"Autonomous") {
53 wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_AUTONOMOUS);
54 wpi::sim::DriverStationSim::SetEStop(
false);
55 }
else if (robotModeSig.value ==
"Teleop") {
56 wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_TELEOPERATED);
57 wpi::sim::DriverStationSim::SetEStop(
false);
58 }
else if (robotModeSig.value ==
"Utility") {
59 wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_UTILITY);
60 wpi::sim::DriverStationSim::SetEStop(
false);
61 }
else if (robotModeSig.value ==
"EStopped") {
62 wpi::sim::DriverStationSim::SetEStop(
true);
64 wpi::sim::DriverStationSim::SetRobotMode(HAL_ROBOT_MODE_UNKNOWN);
65 wpi::sim::DriverStationSim::SetEStop(
false);
70 if (allianceStationSig.status.IsOK()) {
71 if (allianceStationSig.value ==
"Red 1") {
72 wpi::sim::DriverStationSim::SetAllianceStationId(HAL_ALLIANCE_STATION_RED_1);
73 }
else if (allianceStationSig.value ==
"Red 2") {
74 wpi::sim::DriverStationSim::SetAllianceStationId(HAL_ALLIANCE_STATION_RED_2);
75 }
else if (allianceStationSig.value ==
"Red 3") {
76 wpi::sim::DriverStationSim::SetAllianceStationId(HAL_ALLIANCE_STATION_RED_3);
77 }
else if (allianceStationSig.value ==
"Blue 1") {
78 wpi::sim::DriverStationSim::SetAllianceStationId(HAL_ALLIANCE_STATION_BLUE_1);
79 }
else if (allianceStationSig.value ==
"Blue 2") {
80 wpi::sim::DriverStationSim::SetAllianceStationId(HAL_ALLIANCE_STATION_BLUE_2);
81 }
else if (allianceStationSig.value ==
"Blue 3") {
82 wpi::sim::DriverStationSim::SetAllianceStationId(HAL_ALLIANCE_STATION_BLUE_3);
84 wpi::sim::DriverStationSim::SetAllianceStationId(HAL_ALLIANCE_STATION_UNKNOWN);
88 wpi::sim::DriverStationSim::NotifyNewData();
100 std::lock_guard<std::mutex> lock{_lck};
101 if (_startCount < UINT32_MAX) {
102 if (_startCount++ == 0) {
104 _enableNotifier.StartPeriodic(10_ms);
116 std::lock_guard<std::mutex> lock{_lck};
117 if (_startCount > 0) {
118 if (--_startCount == 0) {
120 _enableNotifier.Stop();