Add auto cancel button
Change-Id: I3f026dce7478edfdb71bde9683c42f204c765e58
diff --git a/aos/input/action_joystick_input.h b/aos/input/action_joystick_input.h
index dca4d39..bb4e563 100644
--- a/aos/input/action_joystick_input.h
+++ b/aos/input/action_joystick_input.h
@@ -14,21 +14,29 @@
// Turns out we do the same thing every year, so let's stop copying it.
class ActionJoystickInput : public ::aos::input::JoystickInput {
public:
+ // Configuration parameters that don't really belong in the DrivetrainConfig.
+ struct InputConfig {
+ // If true, we will run teleop during auto mode after auto mode ends. This
+ // is to support the 2019 sandstorm mode. Auto will run, and then when the
+ // action ends (either when it's done, or when the driver triggers it to
+ // finish early), we will run teleop regardless of the mode.
+ bool run_teleop_in_auto = false;
+ // A button, for use with the run_teleop_in_auto, that will cancel the auto
+ // mode, and if run_telop_in_auto is specified, resume teloperation.
+ const driver_station::ButtonLocation cancel_auto_button;
+ };
ActionJoystickInput(
::aos::EventLoop *event_loop,
- const ::frc971::control_loops::drivetrain::DrivetrainConfig<double>
- &dt_config)
+ const ::frc971::control_loops::drivetrain::DrivetrainConfig<double> &
+ dt_config,
+ const InputConfig &input_config)
: ::aos::input::JoystickInput(event_loop),
+ input_config_(input_config),
drivetrain_input_reader_(DrivetrainInputReader::Make(
DrivetrainInputReader::InputType::kPistol, dt_config)) {}
virtual ~ActionJoystickInput() {}
- protected:
- void set_run_teleop_in_auto(bool run_teleop_in_auto) {
- run_teleop_in_auto_ = run_teleop_in_auto;
- }
-
private:
// Handles anything that needs to be cleaned up when the auto action exits.
virtual void AutoEnded() {}
@@ -46,19 +54,16 @@
// True if the internal state machine thinks auto is running right now.
bool auto_running_ = false;
+ // True if we think that the auto *action* is running right now.
+ bool auto_action_running_ = false;
// True if an action was running last cycle.
bool was_running_ = false;
- // If true, we will run teleop during auto mode after auto mode ends. This is
- // to support the 2019 sandstorm mode. Auto will run, and then when the
- // action ends (either when it's done, or when the driver triggers it to
- // finish early), we will run teleop regardless of the mode.
- bool run_teleop_in_auto_ = false;
+ const InputConfig input_config_;
// Bool to track if auto was running the last cycle through. This lets us
// call AutoEnded when the auto mode function stops.
bool auto_was_running_ = false;
-
::std::unique_ptr<DrivetrainInputReader> drivetrain_input_reader_;
::aos::common::actions::ActionQueue action_queue_;
};