blob: 02e6c51d687d2cf9bc8e6b94129db0bdcf1eab07 [file] [log] [blame]
Sabina Davis91b23602019-01-21 00:06:01 -08001#include "aos/input/action_joystick_input.h"
2
3#include "aos/input/driver_station_data.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -07004#include "frc971/autonomous/auto_generated.h"
Austin Schuhed5b26d2019-12-05 20:51:59 -08005#include "frc971/autonomous/auto_mode_generated.h"
Sabina Davis91b23602019-01-21 00:06:01 -08006#include "frc971/autonomous/base_autonomous_actor.h"
7
8using ::aos::input::driver_station::ControlBit;
9
10namespace aos {
11namespace input {
12
13void ActionJoystickInput::RunIteration(
14 const ::aos::input::driver_station::Data &data) {
15 const bool last_auto_running = auto_running_;
16 auto_running_ = data.GetControlBit(ControlBit::kAutonomous) &&
17 data.GetControlBit(ControlBit::kEnabled);
18 if (auto_running_ != last_auto_running) {
19 if (auto_running_) {
Austin Schuh59a62e72019-03-13 22:39:03 -070020 auto_was_running_ = true;
Sabina Davis91b23602019-01-21 00:06:01 -080021 StartAuto();
22 } else {
23 StopAuto();
24 }
25 }
26
James Kuszmaulccc368b2019-04-11 20:00:07 -070027 if (!auto_running_ ||
28 (input_config_.run_teleop_in_auto && !action_queue_.Running())) {
Austin Schuh59a62e72019-03-13 22:39:03 -070029 if (auto_was_running_) {
30 AutoEnded();
31 auto_was_running_ = false;
32 }
Sabina Davis91b23602019-01-21 00:06:01 -080033 if (!data.GetControlBit(ControlBit::kEnabled)) {
34 action_queue_.CancelAllActions();
Austin Schuhf257f3c2019-10-27 21:00:43 -070035 AOS_LOG(DEBUG, "Canceling\n");
Sabina Davis91b23602019-01-21 00:06:01 -080036 }
37 drivetrain_input_reader_->HandleDrivetrain(data);
38 HandleTeleop(data);
39 }
40
James Kuszmaulccc368b2019-04-11 20:00:07 -070041 if (auto_action_running_ &&
42 data.IsPressed(input_config_.cancel_auto_button)) {
43 StopAuto();
44 }
45
Sabina Davis91b23602019-01-21 00:06:01 -080046 // Process pending actions.
47 action_queue_.Tick();
48 was_running_ = action_queue_.Running();
49}
50
51void ActionJoystickInput::StartAuto() {
Austin Schuhf257f3c2019-10-27 21:00:43 -070052 AOS_LOG(INFO, "Starting auto mode\n");
Alex Perrycb7da4b2019-08-28 19:35:56 -070053 frc971::autonomous::AutonomousActionParamsT params;
54 params.mode = GetAutonomousMode();
55
56 action_queue_.EnqueueAction(autonomous_action_factory_.Make(params));
James Kuszmaulccc368b2019-04-11 20:00:07 -070057 auto_action_running_ = true;
Sabina Davis91b23602019-01-21 00:06:01 -080058}
59
60void ActionJoystickInput::StopAuto() {
Austin Schuhf257f3c2019-10-27 21:00:43 -070061 AOS_LOG(INFO, "Stopping auto mode\n");
Sabina Davis91b23602019-01-21 00:06:01 -080062 action_queue_.CancelAllActions();
James Kuszmaulccc368b2019-04-11 20:00:07 -070063 auto_action_running_ = false;
Austin Schuhb5b79a52019-05-08 20:32:07 -070064 AutoEnded();
Sabina Davis91b23602019-01-21 00:06:01 -080065}
66
67} // namespace input
68} // namespace aos