Sabina Davis | d004fd6 | 2019-02-02 23:51:46 -0800 | [diff] [blame] | 1 | #ifndef FRC971_WPILIB_DRIVETRAIN_WRITER_H_ |
| 2 | #define FRC971_WPILIB_DRIVETRAIN_WRITER_H_ |
| 3 | |
| 4 | #include "aos/commonmath.h" |
| 5 | |
Alex Perry | cb7da4b | 2019-08-28 19:35:56 -0700 | [diff] [blame] | 6 | #include "frc971/control_loops/drivetrain/drivetrain_output_generated.h" |
Sabina Davis | d004fd6 | 2019-02-02 23:51:46 -0800 | [diff] [blame] | 7 | #include "frc971/wpilib/ahal/PWM.h" |
| 8 | #include "frc971/wpilib/loop_output_handler.h" |
| 9 | |
| 10 | namespace frc971 { |
| 11 | namespace wpilib { |
| 12 | |
Austin Schuh | bd1fe9c | 2019-06-29 16:35:48 -0700 | [diff] [blame] | 13 | class DrivetrainWriter : public ::frc971::wpilib::LoopOutputHandler< |
Alex Perry | cb7da4b | 2019-08-28 19:35:56 -0700 | [diff] [blame] | 14 | ::frc971::control_loops::drivetrain::Output> { |
Sabina Davis | d004fd6 | 2019-02-02 23:51:46 -0800 | [diff] [blame] | 15 | public: |
Austin Schuh | 5229c7e | 2021-01-23 13:37:36 -0800 | [diff] [blame] | 16 | static constexpr double kMaxBringupPower = 12.0; |
| 17 | |
Austin Schuh | df6cbb1 | 2019-02-02 13:46:52 -0800 | [diff] [blame] | 18 | DrivetrainWriter(::aos::EventLoop *event_loop) |
Austin Schuh | bd1fe9c | 2019-06-29 16:35:48 -0700 | [diff] [blame] | 19 | : ::frc971::wpilib::LoopOutputHandler< |
Alex Perry | cb7da4b | 2019-08-28 19:35:56 -0700 | [diff] [blame] | 20 | ::frc971::control_loops::drivetrain::Output>(event_loop, |
| 21 | "/drivetrain") {} |
Austin Schuh | df6cbb1 | 2019-02-02 13:46:52 -0800 | [diff] [blame] | 22 | |
Sabina Davis | d004fd6 | 2019-02-02 23:51:46 -0800 | [diff] [blame] | 23 | void set_left_controller0(::std::unique_ptr<::frc::PWM> t, bool reversed) { |
| 24 | left_controller0_ = ::std::move(t); |
| 25 | reversed_left0_ = reversed; |
| 26 | } |
| 27 | |
| 28 | void set_right_controller0(::std::unique_ptr<::frc::PWM> t, bool reversed) { |
| 29 | right_controller0_ = ::std::move(t); |
| 30 | reversed_right0_ = reversed; |
| 31 | } |
| 32 | |
| 33 | void set_left_controller1(::std::unique_ptr<::frc::PWM> t, bool reversed) { |
| 34 | left_controller1_ = ::std::move(t); |
| 35 | reversed_left1_ = reversed; |
| 36 | } |
| 37 | |
| 38 | void set_right_controller1(::std::unique_ptr<::frc::PWM> t, bool reversed) { |
| 39 | right_controller1_ = ::std::move(t); |
| 40 | reversed_right1_ = reversed; |
| 41 | } |
| 42 | |
| 43 | private: |
Austin Schuh | bd1fe9c | 2019-06-29 16:35:48 -0700 | [diff] [blame] | 44 | void Write( |
Alex Perry | cb7da4b | 2019-08-28 19:35:56 -0700 | [diff] [blame] | 45 | const ::frc971::control_loops::drivetrain::Output &output) override; |
Sabina Davis | d004fd6 | 2019-02-02 23:51:46 -0800 | [diff] [blame] | 46 | void Stop() override; |
| 47 | |
| 48 | double SafeSpeed(bool reversed, double voltage) { |
Austin Schuh | 5229c7e | 2021-01-23 13:37:36 -0800 | [diff] [blame] | 49 | return (::aos::Clip((reversed ? -1.0 : 1.0) * voltage, -kMaxBringupPower, |
| 50 | kMaxBringupPower) / |
| 51 | 12.0); |
Sabina Davis | d004fd6 | 2019-02-02 23:51:46 -0800 | [diff] [blame] | 52 | } |
| 53 | |
| 54 | ::std::unique_ptr<::frc::PWM> left_controller0_, right_controller0_, |
| 55 | left_controller1_, right_controller1_; |
| 56 | |
| 57 | bool reversed_right0_, reversed_left0_, reversed_right1_, reversed_left1_; |
| 58 | }; |
| 59 | |
| 60 | } // namespace wpilib |
| 61 | } // namespace frc971 |
| 62 | |
| 63 | #endif // FRC971_WPILIB_DRIVETRAIN_WRITER_H_ |