blob: bdff308938018494eb3301251799bec2f91c9084 [file] [log] [blame]
Maxwell Henderson74059a42023-12-22 17:40:15 -08001#include "frc971/wpilib/can_drivetrain_writer.h"
2
3using frc971::wpilib::CANDrivetrainWriter;
4
5CANDrivetrainWriter::CANDrivetrainWriter(::aos::EventLoop *event_loop)
6 : ::frc971::wpilib::LoopOutputHandler<
7 ::frc971::control_loops::drivetrain::Output>(event_loop,
8 "/drivetrain") {
9 event_loop->SetRuntimeRealtimePriority(kDrivetrainWriterPriority);
10
11 event_loop->OnRun([this]() { WriteConfigs(); });
12}
13
14void CANDrivetrainWriter::set_falcons(
15 std::vector<std::shared_ptr<Falcon>> right_falcons,
16 std::vector<std::shared_ptr<Falcon>> left_falcons) {
17 right_falcons_ = std::move(right_falcons);
18 left_falcons_ = std::move(left_falcons);
19}
20
21void CANDrivetrainWriter::HandleCANConfiguration(
22 const CANConfiguration &configuration) {
23 for (auto falcon : right_falcons_) {
24 falcon->PrintConfigs();
25 }
26
27 for (auto falcon : left_falcons_) {
28 falcon->PrintConfigs();
29 }
30
31 if (configuration.reapply()) {
32 WriteConfigs();
33 }
34}
35
36void CANDrivetrainWriter::WriteConfigs() {
37 for (auto falcon : right_falcons_) {
38 falcon->WriteConfigs();
39 }
40
41 for (auto falcon : left_falcons_) {
42 falcon->WriteConfigs();
43 }
44}
45
46void CANDrivetrainWriter::Write(
47 const ::frc971::control_loops::drivetrain::Output &output) {
48 for (auto falcon : right_falcons_) {
49 falcon->WriteVoltage(output.right_voltage());
50 }
51
52 for (auto falcon : left_falcons_) {
53 falcon->WriteVoltage(output.left_voltage());
54 }
55}
56
57void CANDrivetrainWriter::Stop() {
58 AOS_LOG(WARNING, "Drivetrain CAN output too old.\n");
59 for (auto falcon : right_falcons_) {
60 falcon->WriteVoltage(0);
61 }
62
63 for (auto falcon : left_falcons_) {
64 falcon->WriteVoltage(0);
65 }
66}