[cmd] Fix WaitUntilCommand for match time counting down (#8632)

Fixes #8631
Documents that it will return immediately if FMS isn't attached or DS
isn't in practice mode.
Related to change in DS match time behavior that was documented in #8606
This commit is contained in:
sciencewhiz
2026-02-23 17:11:59 -08:00
committed by GitHub
parent 5ae8ee06dd
commit ae43b8b6dd
3 changed files with 12 additions and 2 deletions

View File

@@ -34,10 +34,15 @@ public class WaitUntilCommand extends Command {
* guarantee that the time at which the action is performed will be judged to be legal by the
* referees. When in doubt, add a safety factor or time the action manually.
*
* <p>The match time counts down when connected to FMS or the DS is in practice mode for the
* current mode. When the DS is not connected to FMS or in practice mode, the command will not
* wait.
*
* @param time the match time after which to end, in seconds
* @see edu.wpi.first.wpilibj.DriverStation#getMatchTime()
*/
public WaitUntilCommand(double time) {
this(() -> Timer.getMatchTime() - time > 0);
this(() -> Timer.getMatchTime() < time);
}
@Override

View File

@@ -14,7 +14,7 @@ WaitUntilCommand::WaitUntilCommand(std::function<bool()> condition)
: m_condition{std::move(condition)} {}
WaitUntilCommand::WaitUntilCommand(units::second_t time)
: m_condition{[=] { return frc::Timer::GetMatchTime() - time > 0_s; }} {}
: m_condition{[=] { return frc::Timer::GetMatchTime() < time; }} {}
bool WaitUntilCommand::IsFinished() {
return m_condition();

View File

@@ -36,7 +36,12 @@ class WaitUntilCommand : public CommandHelper<Command, WaitUntilCommand> {
* will be judged to be legal by the referees. When in doubt, add a safety
* factor or time the action manually.
*
* The match time counts down when connected to FMS or the DS is in practice
* mode for the current mode. When the DS is not connected to FMS or in
* practice mode, the command will not wait.
*
* @param time the match time after which to end, in seconds
* @see frc::DriverStation::GetMatchTime()
*/
explicit WaitUntilCommand(units::second_t time);