blob: ae3346c5b0956a13f177ad7eca5a40c7c556dabe [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
Stephan Pleinesf63bde82024-01-13 15:59:33 -080011namespace frc971::input {
Sabina Davis91b23602019-01-21 00:06:01 -080012
13void ActionJoystickInput::RunIteration(
Ravago Jones8c65c432023-03-25 17:35:39 -070014 const ::frc971::input::driver_station::Data &unsorted_data) {
15 if (input_config_.use_redundant_joysticks) {
16 driver_station::RedundantData redundant_data_storage(unsorted_data);
17 DoRunIteration(redundant_data_storage);
18 } else {
19 DoRunIteration(unsorted_data);
20 }
21}
22
23void ActionJoystickInput::DoRunIteration(
James Kuszmaul7077d342021-06-09 20:23:58 -070024 const ::frc971::input::driver_station::Data &data) {
Sabina Davis91b23602019-01-21 00:06:01 -080025 const bool last_auto_running = auto_running_;
26 auto_running_ = data.GetControlBit(ControlBit::kAutonomous) &&
27 data.GetControlBit(ControlBit::kEnabled);
28 if (auto_running_ != last_auto_running) {
29 if (auto_running_) {
Austin Schuh59a62e72019-03-13 22:39:03 -070030 auto_was_running_ = true;
Sabina Davis91b23602019-01-21 00:06:01 -080031 StartAuto();
32 } else {
33 StopAuto();
34 }
35 }
36
James Kuszmaulccc368b2019-04-11 20:00:07 -070037 if (!auto_running_ ||
38 (input_config_.run_teleop_in_auto && !action_queue_.Running())) {
Austin Schuh59a62e72019-03-13 22:39:03 -070039 if (auto_was_running_) {
40 AutoEnded();
41 auto_was_running_ = false;
42 }
Sabina Davis91b23602019-01-21 00:06:01 -080043 if (!data.GetControlBit(ControlBit::kEnabled)) {
44 action_queue_.CancelAllActions();
Sabina Davis91b23602019-01-21 00:06:01 -080045 }
46 drivetrain_input_reader_->HandleDrivetrain(data);
47 HandleTeleop(data);
48 }
49
James Kuszmaulccc368b2019-04-11 20:00:07 -070050 if (auto_action_running_ &&
51 data.IsPressed(input_config_.cancel_auto_button)) {
52 StopAuto();
53 }
54
Sabina Davis91b23602019-01-21 00:06:01 -080055 // Process pending actions.
56 action_queue_.Tick();
57 was_running_ = action_queue_.Running();
58}
59
60void ActionJoystickInput::StartAuto() {
Austin Schuhf257f3c2019-10-27 21:00:43 -070061 AOS_LOG(INFO, "Starting auto mode\n");
Alex Perrycb7da4b2019-08-28 19:35:56 -070062 frc971::autonomous::AutonomousActionParamsT params;
63 params.mode = GetAutonomousMode();
64
65 action_queue_.EnqueueAction(autonomous_action_factory_.Make(params));
James Kuszmaulccc368b2019-04-11 20:00:07 -070066 auto_action_running_ = true;
Sabina Davis91b23602019-01-21 00:06:01 -080067}
68
69void ActionJoystickInput::StopAuto() {
Austin Schuhf257f3c2019-10-27 21:00:43 -070070 AOS_LOG(INFO, "Stopping auto mode\n");
Sabina Davis91b23602019-01-21 00:06:01 -080071 action_queue_.CancelAllActions();
James Kuszmaulccc368b2019-04-11 20:00:07 -070072 auto_action_running_ = false;
Austin Schuhb5b79a52019-05-08 20:32:07 -070073 AutoEnded();
Sabina Davis91b23602019-01-21 00:06:01 -080074}
75
Stephan Pleinesf63bde82024-01-13 15:59:33 -080076} // namespace frc971::input