blob: ea3df4650a105c2ea696b5e2cba2010325f79a86 [file] [log] [blame]
Sabina Davisd004fd62019-02-02 23:51:46 -08001#ifndef FRC971_WPILIB_DRIVETRAIN_WRITER_H_
2#define FRC971_WPILIB_DRIVETRAIN_WRITER_H_
3
4#include "aos/commonmath.h"
5
6#include "frc971/wpilib/ahal/PWM.h"
7#include "frc971/wpilib/loop_output_handler.h"
8
9namespace frc971 {
10namespace wpilib {
11
12class DrivetrainWriter : public ::frc971::wpilib::LoopOutputHandler {
13 public:
Austin Schuhdf6cbb12019-02-02 13:46:52 -080014 DrivetrainWriter(::aos::EventLoop *event_loop)
15 : ::frc971::wpilib::LoopOutputHandler(event_loop) {}
16
Sabina Davisd004fd62019-02-02 23:51:46 -080017 void set_left_controller0(::std::unique_ptr<::frc::PWM> t, bool reversed) {
18 left_controller0_ = ::std::move(t);
19 reversed_left0_ = reversed;
20 }
21
22 void set_right_controller0(::std::unique_ptr<::frc::PWM> t, bool reversed) {
23 right_controller0_ = ::std::move(t);
24 reversed_right0_ = reversed;
25 }
26
27 void set_left_controller1(::std::unique_ptr<::frc::PWM> t, bool reversed) {
28 left_controller1_ = ::std::move(t);
29 reversed_left1_ = reversed;
30 }
31
32 void set_right_controller1(::std::unique_ptr<::frc::PWM> t, bool reversed) {
33 right_controller1_ = ::std::move(t);
34 reversed_right1_ = reversed;
35 }
36
37 private:
38 void Write() override;
39 void Read() override;
40 void Stop() override;
41
42 double SafeSpeed(bool reversed, double voltage) {
43 return (::aos::Clip((reversed ? -1.0 : 1.0) * voltage, -12.0, 12.0) /
44 12.0);
45 }
46
47 ::std::unique_ptr<::frc::PWM> left_controller0_, right_controller0_,
48 left_controller1_, right_controller1_;
49
50 bool reversed_right0_, reversed_left0_, reversed_right1_, reversed_left1_;
51};
52
53} // namespace wpilib
54} // namespace frc971
55
56#endif // FRC971_WPILIB_DRIVETRAIN_WRITER_H_