WPILib 2012
WPILibRoboticsLibraryforFRC
Public Types | Public Member Functions | Protected Member Functions | Friends
Command Class Reference

#include <Command.h>

Inheritance diagram for Command:
SmartDashboardNamedData NetworkTableChangeListener ErrorBase SmartDashboardData CommandGroup PIDCommand PrintCommand StartCommand WaitCommand WaitForChildren WaitUntilCommand

List of all members.

Public Types

typedef std::set< Subsystem * > SubsystemSet

Public Member Functions

 Command ()
 Command (const char *name)
 Command (double timeout)
 Command (const char *name, double timeout)
double TimeSinceInitialized ()
void Requires (Subsystem *s)
bool IsCanceled ()
void Start ()
bool Run ()
void Cancel ()
bool IsRunning ()
bool IsInterruptible ()
void SetInterruptible (bool interruptible)
bool DoesRequire (Subsystem *subsystem)
SubsystemSet GetRequirements ()
CommandGroupGetGroup ()
void SetRunWhenDisabled (bool run)
bool WillRunWhenDisabled ()
virtual std::string GetName ()
virtual std::string GetType ()
virtual NetworkTableGetTable ()
virtual void ValueChanged (NetworkTable *table, const char *name, NetworkTables_Types type)
virtual void ValueConfirmed (NetworkTable *table, const char *name, NetworkTables_Types type)

Protected Member Functions

void SetTimeout (double timeout)
bool IsTimedOut ()
bool AssertUnlocked (const char *message)
void SetParent (CommandGroup *parent)
virtual void Initialize ()=0
virtual void Execute ()=0
virtual bool IsFinished ()=0
virtual void End ()=0
virtual void Interrupted ()=0
virtual void _Initialize ()
virtual void _Interrupted ()
virtual void _Execute ()
virtual void _End ()
virtual void _Cancel ()

Friends

class CommandGroup
class Scheduler

Detailed Description

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.

See also:
CommandGroup
Subsystem

Constructor & Destructor Documentation

Command::Command ( )

Creates a new command. The name of this command will be default.

Command::Command ( const char *  name)

Creates a new command with the given name and no timeout.

Parameters:
namethe name for this command
Command::Command ( double  timeout)

Creates a new command with the given timeout and a default name.

Parameters:
timeoutthe time (in seconds) before this command "times out"
See also:
Command::isTimedOut() isTimedOut()
Command::Command ( const char *  name,
double  timeout 
)

Creates a new command with the given name and timeout.

Parameters:
namethe name of the command
timeoutthe time (in seconds) before this command "times out"
See also:
Command::isTimedOut() isTimedOut()

Member Function Documentation

void Command::_Cancel ( ) [protected, virtual]

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.

bool Command::AssertUnlocked ( const char *  message) [protected]

If changes are locked, then this will generate a CommandIllegalUse error.

Parameters:
messagethe message to report on error (it is appended by a default message)
Returns:
true if assert passed, false if assert failed
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.

bool Command::DoesRequire ( Subsystem system)

Checks if the command requires the given Subsystem.

Parameters:
systemthe system
Returns:
whether or not the subsystem is required (false if given NULL)
virtual void Command::End ( ) [protected, pure virtual]

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.

Implemented in CommandGroup, PrintCommand, StartCommand, WaitCommand, WaitForChildren, and WaitUntilCommand.

virtual void Command::Execute ( ) [protected, pure virtual]

The execute method is called repeatedly until this Command either finishes or is canceled.

Implemented in CommandGroup, PrintCommand, StartCommand, WaitCommand, WaitForChildren, and WaitUntilCommand.

CommandGroup * Command::GetGroup ( )

Returns the CommandGroup that this command is a part of. Will return null if this Command is not in a group.

Returns:
the CommandGroup that this command is a part of (or null if not in group)
Command::SubsystemSet Command::GetRequirements ( )

Returns the requirements (as an std::set of Subsystems pointers) of this command

Returns:
the requirements (as an std::set of Subsystems pointers) of this command
virtual void Command::Initialize ( ) [protected, pure virtual]

The initialize method is called the first time this Command is run after being started.

Implemented in CommandGroup, PrintCommand, StartCommand, WaitCommand, WaitForChildren, and WaitUntilCommand.

virtual void Command::Interrupted ( ) [protected, pure virtual]

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

Implemented in CommandGroup, PrintCommand, StartCommand, WaitCommand, WaitForChildren, and WaitUntilCommand.

bool Command::IsCanceled ( )

Returns whether or not this has been canceled.

Returns:
whether or not this has been canceled
virtual bool Command::IsFinished ( ) [protected, pure 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.

Returns:
whether this command is finished.
See also:
Command::isTimedOut() isTimedOut()

Implemented in CommandGroup, PrintCommand, StartCommand, WaitCommand, WaitForChildren, and WaitUntilCommand.

bool Command::IsInterruptible ( )

Returns whether or not this command can be interrupted.

Returns:
whether or not this command can be interrupted

Reimplemented in CommandGroup.

bool Command::IsRunning ( )

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().

Returns:
whether or not the command is running
bool Command::IsTimedOut ( ) [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.

Returns:
whether the time has expired
void Command::Requires ( Subsystem subsystem)

This method specifies that the given Subsystem is used by this command. This method is crucial to the functioning of the Command System in general.

Note that the recommended way to call this method is in the constructor.

Parameters:
subsystemthe Subsystem required
See also:
Subsystem
bool Command::Run ( )

The run method is used internally to actually run the commands.

Returns:
whether or not the command should stay within the Scheduler.
void Command::SetInterruptible ( bool  interruptible)

Sets whether or not this command can be interrupted.

Parameters:
interruptiblewhether or not this command can be interrupted
void Command::SetParent ( CommandGroup parent) [protected]

Sets the parent of this command. No actual change is made to the group.

Parameters:
parentthe 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.

Parameters:
runwhether or not this command should run when the robot is disabled
void Command::SetTimeout ( double  timeout) [protected]

Sets the timeout of this command.

Parameters:
timeoutthe timeout (in seconds)
See also:
Command::isTimedOut() isTimedOut()
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 ( )

Returns the time since this command was initialized (in seconds). This function will work even if there is no specified timeout.

Returns:
the time since this command was initialized (in seconds).
bool Command::WillRunWhenDisabled ( )

Returns whether or not this Command will run when the robot is disabled, or if it will cancel itself.

Returns:
whether or not this Command will run when the robot is disabled, or if it will cancel itself

The documentation for this class was generated from the following files:
 All Classes Functions Variables