James Kuszmaul | 7077d34 | 2021-06-09 20:23:58 -0700 | [diff] [blame] | 1 | #include "frc971/input/action_joystick_input.h" |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 2 | |
Alex Perry | cb7da4b | 2019-08-28 19:35:56 -0700 | [diff] [blame] | 3 | #include "frc971/autonomous/auto_generated.h" |
Austin Schuh | ed5b26d | 2019-12-05 20:51:59 -0800 | [diff] [blame] | 4 | #include "frc971/autonomous/auto_mode_generated.h" |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 5 | #include "frc971/autonomous/base_autonomous_actor.h" |
James Kuszmaul | 7077d34 | 2021-06-09 20:23:58 -0700 | [diff] [blame] | 6 | #include "frc971/input/driver_station_data.h" |
Ravago Jones | 8c65c43 | 2023-03-25 17:35:39 -0700 | [diff] [blame^] | 7 | #include "frc971/input/redundant_joystick_data.h" |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 8 | |
James Kuszmaul | 7077d34 | 2021-06-09 20:23:58 -0700 | [diff] [blame] | 9 | using ::frc971::input::driver_station::ControlBit; |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 10 | |
James Kuszmaul | 7077d34 | 2021-06-09 20:23:58 -0700 | [diff] [blame] | 11 | namespace frc971 { |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 12 | namespace input { |
| 13 | |
| 14 | void ActionJoystickInput::RunIteration( |
Ravago Jones | 8c65c43 | 2023-03-25 17:35:39 -0700 | [diff] [blame^] | 15 | 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 | |
| 24 | void ActionJoystickInput::DoRunIteration( |
James Kuszmaul | 7077d34 | 2021-06-09 20:23:58 -0700 | [diff] [blame] | 25 | const ::frc971::input::driver_station::Data &data) { |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 26 | 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 Schuh | 59a62e7 | 2019-03-13 22:39:03 -0700 | [diff] [blame] | 31 | auto_was_running_ = true; |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 32 | StartAuto(); |
| 33 | } else { |
| 34 | StopAuto(); |
| 35 | } |
| 36 | } |
| 37 | |
James Kuszmaul | ccc368b | 2019-04-11 20:00:07 -0700 | [diff] [blame] | 38 | if (!auto_running_ || |
| 39 | (input_config_.run_teleop_in_auto && !action_queue_.Running())) { |
Austin Schuh | 59a62e7 | 2019-03-13 22:39:03 -0700 | [diff] [blame] | 40 | if (auto_was_running_) { |
| 41 | AutoEnded(); |
| 42 | auto_was_running_ = false; |
| 43 | } |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 44 | if (!data.GetControlBit(ControlBit::kEnabled)) { |
| 45 | action_queue_.CancelAllActions(); |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 46 | } |
| 47 | drivetrain_input_reader_->HandleDrivetrain(data); |
| 48 | HandleTeleop(data); |
| 49 | } |
| 50 | |
James Kuszmaul | ccc368b | 2019-04-11 20:00:07 -0700 | [diff] [blame] | 51 | if (auto_action_running_ && |
| 52 | data.IsPressed(input_config_.cancel_auto_button)) { |
| 53 | StopAuto(); |
| 54 | } |
| 55 | |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 56 | // Process pending actions. |
| 57 | action_queue_.Tick(); |
| 58 | was_running_ = action_queue_.Running(); |
| 59 | } |
| 60 | |
| 61 | void ActionJoystickInput::StartAuto() { |
Austin Schuh | f257f3c | 2019-10-27 21:00:43 -0700 | [diff] [blame] | 62 | AOS_LOG(INFO, "Starting auto mode\n"); |
Alex Perry | cb7da4b | 2019-08-28 19:35:56 -0700 | [diff] [blame] | 63 | frc971::autonomous::AutonomousActionParamsT params; |
| 64 | params.mode = GetAutonomousMode(); |
| 65 | |
| 66 | action_queue_.EnqueueAction(autonomous_action_factory_.Make(params)); |
James Kuszmaul | ccc368b | 2019-04-11 20:00:07 -0700 | [diff] [blame] | 67 | auto_action_running_ = true; |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 68 | } |
| 69 | |
| 70 | void ActionJoystickInput::StopAuto() { |
Austin Schuh | f257f3c | 2019-10-27 21:00:43 -0700 | [diff] [blame] | 71 | AOS_LOG(INFO, "Stopping auto mode\n"); |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 72 | action_queue_.CancelAllActions(); |
James Kuszmaul | ccc368b | 2019-04-11 20:00:07 -0700 | [diff] [blame] | 73 | auto_action_running_ = false; |
Austin Schuh | b5b79a5 | 2019-05-08 20:32:07 -0700 | [diff] [blame] | 74 | AutoEnded(); |
Sabina Davis | 91b2360 | 2019-01-21 00:06:01 -0800 | [diff] [blame] | 75 | } |
| 76 | |
| 77 | } // namespace input |
James Kuszmaul | 7077d34 | 2021-06-09 20:23:58 -0700 | [diff] [blame] | 78 | } // namespace frc971 |