blob: dfd229e33db1905bf8cd5b6b5f951c3b6b9a5037 [file] [log] [blame]
James Kuszmaul7077d342021-06-09 20:23:58 -07001#include "frc971/input/action_joystick_input.h"
Sabina Davis91b23602019-01-21 00:06:01 -08002
Alex Perrycb7da4b2019-08-28 19:35:56 -07003#include "frc971/autonomous/auto_generated.h"
Austin Schuhed5b26d2019-12-05 20:51:59 -08004#include "frc971/autonomous/auto_mode_generated.h"
Sabina Davis91b23602019-01-21 00:06:01 -08005#include "frc971/autonomous/base_autonomous_actor.h"
James Kuszmaul7077d342021-06-09 20:23:58 -07006#include "frc971/input/driver_station_data.h"
Ravago Jones8c65c432023-03-25 17:35:39 -07007#include "frc971/input/redundant_joystick_data.h"
Sabina Davis91b23602019-01-21 00:06:01 -08008
James Kuszmaul7077d342021-06-09 20:23:58 -07009using ::frc971::input::driver_station::ControlBit;
Sabina Davis91b23602019-01-21 00:06:01 -080010
James Kuszmaul7077d342021-06-09 20:23:58 -070011namespace frc971 {
Sabina Davis91b23602019-01-21 00:06:01 -080012namespace input {
13
14void ActionJoystickInput::RunIteration(
Ravago Jones8c65c432023-03-25 17:35:39 -070015 const ::frc971::input::driver_station::Data &unsorted_data) {
16 if (input_config_.use_redundant_joysticks) {
17 driver_station::RedundantData redundant_data_storage(unsorted_data);
18 DoRunIteration(redundant_data_storage);
19 } else {
20 DoRunIteration(unsorted_data);
21 }
22}
23
24void ActionJoystickInput::DoRunIteration(
James Kuszmaul7077d342021-06-09 20:23:58 -070025 const ::frc971::input::driver_station::Data &data) {
Sabina Davis91b23602019-01-21 00:06:01 -080026 const bool last_auto_running = auto_running_;
27 auto_running_ = data.GetControlBit(ControlBit::kAutonomous) &&
28 data.GetControlBit(ControlBit::kEnabled);
29 if (auto_running_ != last_auto_running) {
30 if (auto_running_) {
Austin Schuh59a62e72019-03-13 22:39:03 -070031 auto_was_running_ = true;
Sabina Davis91b23602019-01-21 00:06:01 -080032 StartAuto();
33 } else {
34 StopAuto();
35 }
36 }
37
James Kuszmaulccc368b2019-04-11 20:00:07 -070038 if (!auto_running_ ||
39 (input_config_.run_teleop_in_auto && !action_queue_.Running())) {
Austin Schuh59a62e72019-03-13 22:39:03 -070040 if (auto_was_running_) {
41 AutoEnded();
42 auto_was_running_ = false;
43 }
Sabina Davis91b23602019-01-21 00:06:01 -080044 if (!data.GetControlBit(ControlBit::kEnabled)) {
45 action_queue_.CancelAllActions();
Sabina Davis91b23602019-01-21 00:06:01 -080046 }
47 drivetrain_input_reader_->HandleDrivetrain(data);
48 HandleTeleop(data);
49 }
50
James Kuszmaulccc368b2019-04-11 20:00:07 -070051 if (auto_action_running_ &&
52 data.IsPressed(input_config_.cancel_auto_button)) {
53 StopAuto();
54 }
55
Sabina Davis91b23602019-01-21 00:06:01 -080056 // Process pending actions.
57 action_queue_.Tick();
58 was_running_ = action_queue_.Running();
59}
60
61void ActionJoystickInput::StartAuto() {
Austin Schuhf257f3c2019-10-27 21:00:43 -070062 AOS_LOG(INFO, "Starting auto mode\n");
Alex Perrycb7da4b2019-08-28 19:35:56 -070063 frc971::autonomous::AutonomousActionParamsT params;
64 params.mode = GetAutonomousMode();
65
66 action_queue_.EnqueueAction(autonomous_action_factory_.Make(params));
James Kuszmaulccc368b2019-04-11 20:00:07 -070067 auto_action_running_ = true;
Sabina Davis91b23602019-01-21 00:06:01 -080068}
69
70void ActionJoystickInput::StopAuto() {
Austin Schuhf257f3c2019-10-27 21:00:43 -070071 AOS_LOG(INFO, "Stopping auto mode\n");
Sabina Davis91b23602019-01-21 00:06:01 -080072 action_queue_.CancelAllActions();
James Kuszmaulccc368b2019-04-11 20:00:07 -070073 auto_action_running_ = false;
Austin Schuhb5b79a52019-05-08 20:32:07 -070074 AutoEnded();
Sabina Davis91b23602019-01-21 00:06:01 -080075}
76
77} // namespace input
James Kuszmaul7077d342021-06-09 20:23:58 -070078} // namespace frc971