Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 1 | #include "frc971/wpilib/can_sensor_reader.h" |
| 2 | |
| 3 | using frc971::wpilib::CANSensorReader; |
| 4 | using frc971::wpilib::kCANUpdateFreqHz; |
| 5 | |
| 6 | CANSensorReader::CANSensorReader( |
| 7 | aos::EventLoop *event_loop, |
Maxwell Henderson | fcc0d12 | 2023-08-05 17:03:34 -0700 | [diff] [blame] | 8 | std::vector<ctre::phoenix6::BaseStatusSignal *> signals_registry, |
Maxwell Henderson | 10ed5c3 | 2024-01-09 12:40:54 -0800 | [diff] [blame] | 9 | std::vector<std::shared_ptr<TalonFX>> talonfxs, |
Maxwell Henderson | 3d68e14 | 2024-02-25 09:58:11 -0800 | [diff] [blame^] | 10 | std::function<void(ctre::phoenix::StatusCode status)> flatbuffer_callback, |
| 11 | SignalSync sync) |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 12 | : event_loop_(event_loop), |
Maxwell Henderson | 3d68e14 | 2024-02-25 09:58:11 -0800 | [diff] [blame^] | 13 | sync_(sync), |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 14 | signals_(signals_registry.begin(), signals_registry.end()), |
Maxwell Henderson | 10ed5c3 | 2024-01-09 12:40:54 -0800 | [diff] [blame] | 15 | talonfxs_(talonfxs), |
Maxwell Henderson | 6c6faaf | 2023-07-26 19:44:24 -0700 | [diff] [blame] | 16 | flatbuffer_callback_(flatbuffer_callback) { |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 17 | 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 Henderson | 6c6faaf | 2023-07-26 19:44:24 -0700 | [diff] [blame] | 21 | |
| 22 | CHECK(flatbuffer_callback_); |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 23 | 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 | |
| 32 | void CANSensorReader::Loop() { |
Maxwell Henderson | 3d68e14 | 2024-02-25 09:58:11 -0800 | [diff] [blame^] | 33 | 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 Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 39 | |
| 40 | if (!status.IsOK()) { |
Maxwell Henderson | 10ed5c3 | 2024-01-09 12:40:54 -0800 | [diff] [blame] | 41 | AOS_LOG(ERROR, "Failed to read signals from talonfx motors: %s: %s", |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 42 | status.GetName(), status.GetDescription()); |
| 43 | } |
| 44 | |
Maxwell Henderson | 6c6faaf | 2023-07-26 19:44:24 -0700 | [diff] [blame] | 45 | flatbuffer_callback_(status); |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 46 | } |