WPILibC++
unspecified
|
The Command class is at the very core of the entire command framework. More...
#include <Command.h>
Public Types | |
typedef std::set< Subsystem * > | SubsystemSet |
Public Member Functions | |
Command () | |
Creates a new command. More... | |
Command (const std::string &name) | |
Creates a new command with the given name and no timeout. More... | |
Command (double timeout) | |
Creates a new command with the given timeout and a default name. More... | |
Command (const std::string &name, double timeout) | |
Creates a new command with the given name and timeout. More... | |
double | TimeSinceInitialized () const |
Returns the time since this command was initialized (in seconds). More... | |
void | Requires (Subsystem *s) |
This method specifies that the given Subsystem is used by this command. More... | |
bool | IsCanceled () const |
Returns whether or not this has been canceled. More... | |
void | Start () |
Starts up the command. More... | |
bool | Run () |
The run method is used internally to actually run the commands. More... | |
void | Cancel () |
This will cancel the current command. More... | |
bool | IsRunning () const |
Returns whether or not the command is running. More... | |
bool | IsInterruptible () const |
Returns whether or not this command can be interrupted. More... | |
void | SetInterruptible (bool interruptible) |
Sets whether or not this command can be interrupted. More... | |
bool | DoesRequire (Subsystem *subsystem) const |
Checks if the command requires the given Subsystem. More... | |
SubsystemSet | GetRequirements () const |
Returns the requirements (as an std::set of Subsystems pointers) of this command. More... | |
CommandGroup * | GetGroup () const |
Returns the CommandGroup that this command is a part of. More... | |
void | SetRunWhenDisabled (bool run) |
Sets whether or not this Command should run when the robot is disabled. More... | |
bool | WillRunWhenDisabled () const |
Returns whether or not this Command will run when the robot is disabled, or if it will cancel itself. More... | |
int | GetID () const |
Get the ID (sequence number) for this command. More... | |
std::string | GetName () const override |
void | InitTable (std::shared_ptr< ITable > subtable) override |
Initializes a table for this sendable object. More... | |
std::shared_ptr< ITable > | GetTable () const override |
std::string | GetSmartDashboardType () const override |
void | ValueChanged (ITable *source, llvm::StringRef key, std::shared_ptr< nt::Value > value, bool isNew) override |
Called when a key-value pair is changed in a ITable. More... | |
![]() | |
ErrorBase (const ErrorBase &)=delete | |
ErrorBase & | operator= (const ErrorBase &)=delete |
virtual Error & | GetError () |
Retrieve the current error. More... | |
virtual const Error & | GetError () const |
virtual void | SetErrnoError (llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set error information associated with a C library call that set an error to the "errno" global variable. More... | |
virtual void | SetImaqError (int success, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated from the nivision Imaq API. More... | |
virtual void | SetError (Error::Code code, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | SetErrorRange (Error::Code code, int32_t minRange, int32_t maxRange, int32_t requestedValue, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | SetWPIError (llvm::StringRef errorMessage, Error::Code code, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | CloneError (const ErrorBase &rhs) const |
virtual void | ClearError () const |
Clear the current error information associated with this sensor. | |
virtual bool | StatusIsFatal () const |
Check if the current error code represents a fatal error. More... | |
![]() | |
virtual void | ValueChangedEx (ITable *source, llvm::StringRef key, std::shared_ptr< nt::Value > value, unsigned int flags) |
Extended version of ValueChanged. More... | |
Protected Member Functions | |
void | SetTimeout (double timeout) |
Sets the timeout of this command. More... | |
bool | IsTimedOut () const |
Returns whether or not the timeSinceInitialized() method returns a number which is greater than or equal to the timeout for the command. More... | |
bool | AssertUnlocked (const std::string &message) |
If changes are locked, then this will generate a CommandIllegalUse error. More... | |
void | SetParent (CommandGroup *parent) |
Sets the parent of this command. More... | |
void | ClearRequirements () |
Clears list of subsystem requirements. More... | |
virtual void | Initialize () |
The initialize method is called the first time this Command is run after being started. | |
virtual void | Execute () |
The execute method is called repeatedly until this Command either finishes or is canceled. | |
virtual bool | IsFinished ()=0 |
Returns whether this command is finished. More... | |
virtual void | End () |
Called when the command ended peacefully. More... | |
virtual void | Interrupted () |
Called when the command ends because somebody called cancel() or another command shared the same requirements as this one, and booted it out. More... | |
virtual void | _Initialize () |
virtual void | _Interrupted () |
virtual void | _Execute () |
virtual void | _End () |
virtual void | _Cancel () |
This works like cancel(), except that it doesn't throw an exception if it is a part of a command group. More... | |
Protected Attributes | |
std::shared_ptr< ITable > | m_table |
![]() | |
Error | m_error |
Friends | |
class | CommandGroup |
class | Scheduler |
class | ConditionalCommand |
Additional Inherited Members | |
![]() | |
static void | SetGlobalError (Error::Code code, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) |
static void | SetGlobalWPIError (llvm::StringRef errorMessage, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) |
static Error & | GetGlobalError () |
Retrieve the current global error. | |
![]() | |
static priority_mutex | _globalErrorMutex |
static Error | _globalError |
The Command class is at the very core of the entire command framework.
Every command can be started with a call to Start(). Once a command is started it will call Initialize(), and then will repeatedly call Execute() until the IsFinished() returns true. Once it does, End() will be called.
However, if at any point while it is running Cancel() is called, then the command will be stopped and Interrupted() will be called.
If a command uses a Subsystem, then it should specify that it does so by calling the Requires(...) method in its constructor. Note that a Command may have multiple requirements, and Requires(...) should be called for each one.
If a command is running and a new command with shared requirements is started, then one of two things will happen. If the active command is interruptible, then Cancel() will be called and the command will be removed to make way for the new one. If the active command is not interruptible, the other one will not even be started, and the active one will continue functioning.
Command::Command | ( | ) |
Creates a new command.
The name of this command will be default.
|
explicit |
Creates a new command with the given name and no timeout.
name | the name for this command |
|
explicit |
Creates a new command with the given timeout and a default name.
timeout | the time (in seconds) before this command "times out" |
Command::Command | ( | const std::string & | name, |
double | timeout | ||
) |
Creates a new command with the given name and timeout.
name | the name of the command |
timeout | the time (in seconds) before this command "times out" |
|
protectedvirtual |
This works like cancel(), except that it doesn't throw an exception if it is a part of a command group.
Should only be called by the parent command group.
Reimplemented in frc::ConditionalCommand.
|
protected |
If changes are locked, then this will generate a CommandIllegalUse error.
message | the message to report on error (it is appended by a default message) |
void Command::Cancel | ( | ) |
This will cancel the current command.
This will cancel the current command eventually. It can be called multiple times. And it can be called when the command is not running. If the command is running though, then the command will be marked as canceled and eventually removed.
A command can not be canceled if it is a part of a command group, you must cancel the command group instead.
|
protected |
Clears list of subsystem requirements.
This is only used by ConditionalCommand so cancelling the chosen command works properly in CommandGroup.
bool Command::DoesRequire | ( | Subsystem * | system | ) | const |
Checks if the command requires the given Subsystem.
system | the system |
|
protectedvirtual |
Called when the command ended peacefully.
This is where you may want to wrap up loose ends, like shutting off a motor that was being used in the command.
Reimplemented in frc::CommandGroup.
CommandGroup * Command::GetGroup | ( | ) | const |
Returns the CommandGroup that this command is a part of.
Will return null if this Command is not in a group.
int Command::GetID | ( | ) | const |
Get the ID (sequence number) for this command.
The ID is a unique sequence number that is incremented for each command.
|
overridevirtual |
Implements frc::NamedSendable.
Command::SubsystemSet Command::GetRequirements | ( | ) | const |
Returns the requirements (as an std::set of Subsystems pointers) of this command.
|
overridevirtual |
Implements frc::Sendable.
Reimplemented in frc::PIDCommand.
|
overridevirtual |
Implements frc::Sendable.
|
overridevirtual |
Initializes a table for this sendable object.
subtable | The table to put the values in. |
Implements frc::Sendable.
Reimplemented in frc::PIDCommand.
|
protectedvirtual |
Called when the command ends because somebody called cancel() or another command shared the same requirements as this one, and booted it out.
This is where you may want to wrap up loose ends, like shutting off a motor that was being used in the command.
Generally, it is useful to simply call the end() method within this method, as done here.
Reimplemented in frc::ConditionalCommand, and frc::CommandGroup.
bool Command::IsCanceled | ( | ) | const |
Returns whether or not this has been canceled.
|
protectedpure virtual |
Returns whether this command is finished.
If it is, then the command will be removed and end() will be called.
It may be useful for a team to reference the isTimedOut() method for time-sensitive commands.
Returning false will result in the command never ending automatically. It may still be cancelled manually or interrupted by another command. Returning true will result in the command executing once and finishing immediately. We recommend using InstantCommand for this.
Implemented in frc::ConditionalCommand, frc::CommandGroup, frc::InstantCommand, frc::TimedCommand, frc::WaitForChildren, and frc::WaitUntilCommand.
bool Command::IsInterruptible | ( | ) | const |
Returns whether or not this command can be interrupted.
bool Command::IsRunning | ( | ) | const |
Returns whether or not the command is running.
This may return true even if the command has just been canceled, as it may not have yet called Command#interrupted().
|
protected |
Returns whether or not the timeSinceInitialized() method returns a number which is greater than or equal to the timeout for the command.
If there is no timeout, this will always return false.
void Command::Requires | ( | Subsystem * | subsystem | ) |
bool Command::Run | ( | ) |
The run method is used internally to actually run the commands.
void Command::SetInterruptible | ( | bool | interruptible | ) |
Sets whether or not this command can be interrupted.
interruptible | whether or not this command can be interrupted |
|
protected |
Sets the parent of this command.
No actual change is made to the group.
parent | the parent |
void Command::SetRunWhenDisabled | ( | bool | run | ) |
Sets whether or not this Command should run when the robot is disabled.
By default a command will not run when the robot is disabled, and will in fact be canceled.
run | whether or not this command should run when the robot is disabled |
|
protected |
Sets the timeout of this command.
timeout | the timeout (in seconds) |
void Command::Start | ( | ) |
Starts up the command.
Gets the command ready to start.
Note that the command will eventually start, however it will not necessarily do so immediately, and may in fact be canceled before initialize is even called.
double Command::TimeSinceInitialized | ( | ) | const |
Returns the time since this command was initialized (in seconds).
This function will work even if there is no specified timeout.
|
overridevirtual |
Called when a key-value pair is changed in a ITable.
source | the table the key-value pair exists in |
key | the key associated with the value that changed |
value | the new value |
isNew | true if the key did not previously exist in the table, otherwise it is false |
Implements ITableListener.
bool Command::WillRunWhenDisabled | ( | ) | const |