Support CAN or PWM for the catapult falcons for testing

This gives us a lot more options when debugging.

Change-Id: I6da4eea4d642a84b2a0da14fa02459a0101efa29
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/y2022/wpilib_interface.cc b/y2022/wpilib_interface.cc
index 2e33db3..b1f386c 100644
--- a/y2022/wpilib_interface.cc
+++ b/y2022/wpilib_interface.cc
@@ -439,6 +439,27 @@
     catapult_falcon_1_ = ::std::move(t);
   }
 
+  void set_catapult_falcon_1(
+      ::std::unique_ptr<::ctre::phoenix::motorcontrol::can::TalonFX> t1,
+      ::std::unique_ptr<::ctre::phoenix::motorcontrol::can::TalonFX> t2) {
+    catapult_falcon_1_can_ = ::std::move(t1);
+    catapult_falcon_2_can_ = ::std::move(t2);
+
+    for (auto &falcon : {catapult_falcon_1_can_, catapult_falcon_2_can_}) {
+      falcon->ConfigSupplyCurrentLimit(
+          {false, Values::kIntakeRollerSupplyCurrentLimit(),
+           Values::kIntakeRollerSupplyCurrentLimit(), 0});
+      falcon->ConfigStatorCurrentLimit(
+          {false, Values::kIntakeRollerStatorCurrentLimit(),
+           Values::kIntakeRollerStatorCurrentLimit(), 0});
+      falcon->SetStatusFramePeriod(ctre::phoenix::motorcontrol::Status_1_General, 5);
+      falcon->SetControlFramePeriod(ctre::phoenix::motorcontrol::Control_3_General, 5);
+    }
+    catapult_falcon_2_can_->Follow(
+        *catapult_falcon_1_can_,
+        ctre::phoenix::motorcontrol::FollowerType_PercentOutput);
+  }
+
   void set_intake_falcon_front(::std::unique_ptr<frc::TalonFX> t) {
     intake_falcon_front_ = ::std::move(t);
   }
@@ -507,7 +528,13 @@
     intake_falcon_back_->SetDisabled();
     transfer_roller_victor_front_->SetDisabled();
     transfer_roller_victor_back_->SetDisabled();
-    catapult_falcon_1_->SetDisabled();
+    if (catapult_falcon_1_) {
+      catapult_falcon_1_->SetDisabled();
+    }
+    if (catapult_falcon_1_can_) {
+      catapult_falcon_1_can_->Set(
+          ctre::phoenix::motorcontrol::ControlMode::Disabled, 0);
+    }
     turret_falcon_->SetDisabled();
   }
 
@@ -525,7 +552,12 @@
 
     WriteCan(-output.flipper_arms_voltage(), flipper_arms_falcon_.get());
 
-    WritePwm(output.catapult_voltage(), catapult_falcon_1_.get());
+    if (catapult_falcon_1_) {
+      WritePwm(output.catapult_voltage(), catapult_falcon_1_.get());
+    }
+    if (catapult_falcon_1_can_) {
+      WriteCan(output.catapult_voltage(), catapult_falcon_1_can_.get());
+    }
 
     WritePwm(-output.turret_voltage(), turret_falcon_.get());
   }
@@ -551,6 +583,9 @@
   ::std::shared_ptr<::ctre::phoenix::motorcontrol::can::TalonFX>
       flipper_arms_falcon_;
 
+  ::std::shared_ptr<::ctre::phoenix::motorcontrol::can::TalonFX>
+      catapult_falcon_1_can_, catapult_falcon_2_can_;
+
   ::std::unique_ptr<::frc::TalonFX> turret_falcon_, catapult_falcon_1_,
       climber_falcon_;
   ::std::unique_ptr<::frc::VictorSP> transfer_roller_victor_front_,
@@ -699,7 +734,7 @@
     superstructure_writer.set_flipper_arms_falcon(
         make_unique<::ctre::phoenix::motorcontrol::can::TalonFX>(2));
 
-    superstructure_writer.set_catapult_falcon_1(make_unique<::frc::TalonFX>(9));
+    superstructure_writer.set_catapult_falcon_1(make_unique<frc::TalonFX>(9));
 
     AddLoop(&output_event_loop);