WPILibC++  2020.3.2
IterativeRobotBase.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2017-2020 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <units/units.h>
11 #include <wpi/deprecated.h>
12 
13 #include "frc/RobotBase.h"
14 #include "frc/Watchdog.h"
15 
16 namespace frc {
17 
48 class IterativeRobotBase : public RobotBase {
49  public:
62  virtual void RobotInit();
63 
72  virtual void SimulationInit();
73 
81  virtual void DisabledInit();
82 
89  virtual void AutonomousInit();
90 
97  virtual void TeleopInit();
98 
105  virtual void TestInit();
106 
113  virtual void RobotPeriodic();
114 
120  virtual void SimulationPeriodic();
121 
129  virtual void DisabledPeriodic();
130 
138  virtual void AutonomousPeriodic();
139 
147  virtual void TeleopPeriodic();
148 
156  virtual void TestPeriodic();
157 
163  WPI_DEPRECATED("Use ctor with unit-safety instead.")
164  explicit IterativeRobotBase(double period);
165 
171  explicit IterativeRobotBase(units::second_t period);
172 
173  virtual ~IterativeRobotBase() = default;
174 
175  protected:
177  IterativeRobotBase& operator=(IterativeRobotBase&&) = default;
178 
179  void LoopFunc();
180 
181  units::second_t m_period;
182 
183  private:
184  enum class Mode { kNone, kDisabled, kAutonomous, kTeleop, kTest };
185 
186  Mode m_lastMode = Mode::kNone;
187  Watchdog m_watchdog;
188 
189  void PrintLoopOverrunMessage();
190 };
191 
192 } // namespace frc
frc::IterativeRobotBase::IterativeRobotBase
IterativeRobotBase(double period)
Constructor for IterativeRobotBase.
frc::IterativeRobotBase::TeleopInit
virtual void TeleopInit()
Initialization code for teleop mode should go here.
frc::IterativeRobotBase::TestInit
virtual void TestInit()
Initialization code for test mode should go here.
frc::IterativeRobotBase::DisabledPeriodic
virtual void DisabledPeriodic()
Periodic code for disabled mode should go here.
frc::IterativeRobotBase
IterativeRobotBase implements a specific type of robot program framework, extending the RobotBase cla...
Definition: IterativeRobotBase.h:48
frc::IterativeRobotBase::SimulationInit
virtual void SimulationInit()
Robot-wide simulation initialization code should go here.
frc::IterativeRobotBase::DisabledInit
virtual void DisabledInit()
Initialization code for disabled mode should go here.
frc::IterativeRobotBase::AutonomousPeriodic
virtual void AutonomousPeriodic()
Periodic code for autonomous mode should go here.
frc::Watchdog
A class that's a wrapper around a watchdog timer.
Definition: Watchdog.h:32
frc::IterativeRobotBase::RobotInit
virtual void RobotInit()
Robot-wide initialization code should go here.
frc::IterativeRobotBase::RobotPeriodic
virtual void RobotPeriodic()
Periodic code for all modes should go here.
frc::IterativeRobotBase::TestPeriodic
virtual void TestPeriodic()
Periodic code for test mode should go here.
frc::IterativeRobotBase::SimulationPeriodic
virtual void SimulationPeriodic()
Periodic simulation code should go here.
frc::IterativeRobotBase::AutonomousInit
virtual void AutonomousInit()
Initialization code for autonomous mode should go here.
frc
A class that enforces constraints on the differential drive kinematics.
Definition: SPIAccelerometerSim.h:16
frc::IterativeRobotBase::TeleopPeriodic
virtual void TeleopPeriodic()
Periodic code for teleop mode should go here.
frc::RobotBase
Implement a Robot Program framework.
Definition: RobotBase.h:112