blob: 9cf9a67607c7b1eeafba45e6e1119b9ee6d74e08 [file] [log] [blame]
#ifndef FRC971_WPILIB_DRIVETRAIN_WRITER_H_
#define FRC971_WPILIB_DRIVETRAIN_WRITER_H_
#include "aos/commonmath.h"
#include "frc971/control_loops/drivetrain/drivetrain_output_generated.h"
#include "frc971/wpilib/ahal/PWM.h"
#include "frc971/wpilib/loop_output_handler.h"
namespace frc971 {
namespace wpilib {
class DrivetrainWriter : public ::frc971::wpilib::LoopOutputHandler<
::frc971::control_loops::drivetrain::Output> {
public:
DrivetrainWriter(::aos::EventLoop *event_loop)
: ::frc971::wpilib::LoopOutputHandler<
::frc971::control_loops::drivetrain::Output>(event_loop,
"/drivetrain") {}
void set_left_controller0(::std::unique_ptr<::frc::PWM> t, bool reversed) {
left_controller0_ = ::std::move(t);
reversed_left0_ = reversed;
}
void set_right_controller0(::std::unique_ptr<::frc::PWM> t, bool reversed) {
right_controller0_ = ::std::move(t);
reversed_right0_ = reversed;
}
void set_left_controller1(::std::unique_ptr<::frc::PWM> t, bool reversed) {
left_controller1_ = ::std::move(t);
reversed_left1_ = reversed;
}
void set_right_controller1(::std::unique_ptr<::frc::PWM> t, bool reversed) {
right_controller1_ = ::std::move(t);
reversed_right1_ = reversed;
}
private:
void Write(
const ::frc971::control_loops::drivetrain::Output &output) override;
void Stop() override;
double SafeSpeed(bool reversed, double voltage) {
return (::aos::Clip((reversed ? -1.0 : 1.0) * voltage, -12.0, 12.0) / 12.0);
}
::std::unique_ptr<::frc::PWM> left_controller0_, right_controller0_,
left_controller1_, right_controller1_;
bool reversed_right0_, reversed_left0_, reversed_right1_, reversed_left1_;
};
} // namespace wpilib
} // namespace frc971
#endif // FRC971_WPILIB_DRIVETRAIN_WRITER_H_