blob: 1f56b179a36c2829df7767a7984c4f08760ba3b8 [file] [log] [blame]
Maxwell Hendersonf29e3182023-05-25 06:51:24 -07001#include "frc971/wpilib/can_sensor_reader.h"
2
3using frc971::wpilib::CANSensorReader;
4using frc971::wpilib::kCANUpdateFreqHz;
5
6CANSensorReader::CANSensorReader(
7 aos::EventLoop *event_loop,
Maxwell Hendersonfcc0d122023-08-05 17:03:34 -07008 std::vector<ctre::phoenix6::BaseStatusSignal *> signals_registry,
Maxwell Henderson10ed5c32024-01-09 12:40:54 -08009 std::vector<std::shared_ptr<TalonFX>> talonfxs,
Maxwell Henderson3d68e142024-02-25 09:58:11 -080010 std::function<void(ctre::phoenix::StatusCode status)> flatbuffer_callback,
11 SignalSync sync)
Maxwell Hendersonf29e3182023-05-25 06:51:24 -070012 : event_loop_(event_loop),
Maxwell Henderson3d68e142024-02-25 09:58:11 -080013 sync_(sync),
Maxwell Hendersonf29e3182023-05-25 06:51:24 -070014 signals_(signals_registry.begin(), signals_registry.end()),
Maxwell Henderson10ed5c32024-01-09 12:40:54 -080015 talonfxs_(talonfxs),
Maxwell Henderson6c6faaf2023-07-26 19:44:24 -070016 flatbuffer_callback_(flatbuffer_callback) {
Maxwell Hendersonf29e3182023-05-25 06:51:24 -070017 event_loop->SetRuntimeRealtimePriority(40);
18
19 // TODO(max): Decide if we want to keep this on this core.
20 event_loop->SetRuntimeAffinity(aos::MakeCpusetFromCpus({1}));
Maxwell Henderson6c6faaf2023-07-26 19:44:24 -070021
22 CHECK(flatbuffer_callback_);
Maxwell Hendersonf29e3182023-05-25 06:51:24 -070023 timer_handler_ = event_loop->AddTimer([this]() { Loop(); });
24 timer_handler_->set_name("CANSensorReader Loop");
25
26 event_loop->OnRun([this]() {
27 timer_handler_->Schedule(event_loop_->monotonic_now(),
28 1 / kCANUpdateFreqHz);
29 });
30}
31
32void CANSensorReader::Loop() {
Maxwell Henderson3d68e142024-02-25 09:58:11 -080033 ctre::phoenix::StatusCode status;
34 if (sync_ == SignalSync::kDoSync) {
35 status = ctre::phoenix6::BaseStatusSignal::WaitForAll(20_ms, signals_);
36 } else {
37 status = ctre::phoenix6::BaseStatusSignal::RefreshAll(signals_);
38 }
Maxwell Hendersonf29e3182023-05-25 06:51:24 -070039
40 if (!status.IsOK()) {
Maxwell Henderson10ed5c32024-01-09 12:40:54 -080041 AOS_LOG(ERROR, "Failed to read signals from talonfx motors: %s: %s",
Maxwell Hendersonf29e3182023-05-25 06:51:24 -070042 status.GetName(), status.GetDescription());
43 }
44
Maxwell Henderson6c6faaf2023-07-26 19:44:24 -070045 flatbuffer_callback_(status);
Maxwell Hendersonf29e3182023-05-25 06:51:24 -070046}