RobotCore 1.0
WPILib port to raspberry Pi
Loading...
Searching...
No Matches
Command.java
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5package org.wpilib.command3;
6
7import static org.wpilib.util.ErrorMessages.requireNonNullParam;
8
9import java.util.Collection;
10import java.util.Collections;
11import java.util.Set;
12import java.util.function.BooleanSupplier;
13import java.util.function.Consumer;
14import org.wpilib.annotation.NoDiscard;
15import org.wpilib.units.measure.Time;
16
97@NoDiscard("Commands must be used! Did you mean to fork it or bind it to a trigger?")
98public interface Command {
101
106 int LOWEST_PRIORITY = Integer.MIN_VALUE;
107
112 int HIGHEST_PRIORITY = Integer.MAX_VALUE;
113
125 void run(Coroutine coroutine);
126
132 default void onCancel() {
133 // NOP by default
134 }
135
142 default void onExit() {
143 // NOP by default
144 }
145
151 @NoDiscard
152 String name();
153
161 @NoDiscard
162 Set<Mechanism> requirements();
163
173 @NoDiscard
174 default int priority() {
175 return DEFAULT_PRIORITY;
176 }
177
184 @NoDiscard
185 default boolean isLowerPriorityThan(Command other) {
186 requireNonNullParam(other, "other", "Command.isLowerPriorityThan");
187
188 return priority() < other.priority();
189 }
190
197 @NoDiscard
198 default boolean requires(Mechanism mechanism) {
199 return requirements().contains(mechanism);
200 }
201
209 @NoDiscard
210 default boolean conflictsWith(Command other) {
211 requireNonNullParam(other, "other", "Command.conflictsWith");
212
213 return !Collections.disjoint(requirements(), other.requirements());
214 }
215
228 default Command withTimeout(Time timeout) {
229 requireNonNullParam(timeout, "timeout", "Command.withTimeout");
230
231 return race(this, waitFor(timeout).named("Timeout: " + timeout.toLongString()))
232 .named(name() + " [" + timeout.toLongString() + " timeout]");
233 }
234
248 static NeedsNameBuilderStage noRequirements(Consumer<Coroutine> body) {
249 return new StagedCommandBuilder().noRequirements().executing(body);
250 }
251
263 // parameters will be null checked by the builder
264 return new StagedCommandBuilder().requiring(requirement, rest);
265 }
266
276 static NeedsExecutionBuilderStage requiring(Collection<Mechanism> requirements) {
277 // parameters will be null checked by the builder
279 }
280
292 // parameters will be null checked by the builder
293 return new ParallelGroupBuilder().requiring(commands);
294 }
295
307 static ParallelGroupBuilder race(Command... commands) {
308 // parameters will be null checked by the builder
309 return new ParallelGroupBuilder().optional(commands);
310 }
311
324 // parameters will be null checked by the builder
325 return new SequentialGroupBuilder().andThen(commands);
326 }
327
338 static NeedsNameBuilderStage waitUntil(BooleanSupplier condition) {
339 requireNonNullParam(condition, "condition", "Command.waitUntil");
340
341 return noRequirements(coroutine -> coroutine.waitUntil(condition));
342 }
343
351 static NeedsNameBuilderStage waitFor(Time duration) {
352 requireNonNullParam(duration, "duration", "Command.waitFor");
353
354 return noRequirements(coroutine -> coroutine.wait(duration));
355 }
356
367 default ParallelGroupBuilder until(BooleanSupplier endCondition) {
368 requireNonNullParam(endCondition, "endCondition", "Command.until");
369
370 return new ParallelGroupBuilder()
371 .optional(this, Command.waitUntil(endCondition).named("Until Condition"));
372 }
373
390 // parameter will be null checked by the builder
391 return new SequentialGroupBuilder().andThen(this).andThen(next);
392 }
393
414
428}
ParallelGroupBuilder optional(Command... commands)
ParallelGroupBuilder requiring(Command... commands)
SequentialGroupBuilder andThen(Command next)
static NeedsNameBuilderStage waitUntil(BooleanSupplier condition)
Definition Command.java:338
static NeedsExecutionBuilderStage requiring(Collection< Mechanism > requirements)
Definition Command.java:276
default SequentialGroupBuilder andThen(Command next)
Definition Command.java:389
default ParallelGroupBuilder until(BooleanSupplier endCondition)
Definition Command.java:367
default ParallelGroupBuilder alongWith(Command... parallel)
Definition Command.java:411
static NeedsNameBuilderStage noRequirements(Consumer< Coroutine > body)
Definition Command.java:248
static ParallelGroupBuilder parallel(Command... commands)
Definition Command.java:291
static NeedsExecutionBuilderStage requiring(Mechanism requirement, Mechanism... rest)
Definition Command.java:262
default ParallelGroupBuilder raceWith(Command... parallel)
Definition Command.java:425
default boolean requires(Mechanism mechanism)
Definition Command.java:198
default Command withTimeout(Time timeout)
Definition Command.java:228
static ParallelGroupBuilder race(Command... commands)
Definition Command.java:307
static SequentialGroupBuilder sequence(Command... commands)
Definition Command.java:323
void run(Coroutine coroutine)
static NeedsNameBuilderStage waitFor(Time duration)
Definition Command.java:351
default boolean isLowerPriorityThan(Command other)
Definition Command.java:185
default boolean conflictsWith(Command other)
Definition Command.java:210
Set< Mechanism > requirements()
NeedsExecutionBuilderStage requiring(Mechanism requirement)