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 | 6c6faaf | 2023-07-26 19:44:24 -0700 | [diff] [blame] | 10 | std::function<void(ctre::phoenix::StatusCode status)> flatbuffer_callback) |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 11 | : event_loop_(event_loop), |
| 12 | signals_(signals_registry.begin(), signals_registry.end()), |
Maxwell Henderson | 10ed5c3 | 2024-01-09 12:40:54 -0800 | [diff] [blame^] | 13 | talonfxs_(talonfxs), |
Maxwell Henderson | 6c6faaf | 2023-07-26 19:44:24 -0700 | [diff] [blame] | 14 | flatbuffer_callback_(flatbuffer_callback) { |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 15 | event_loop->SetRuntimeRealtimePriority(40); |
| 16 | |
| 17 | // TODO(max): Decide if we want to keep this on this core. |
| 18 | event_loop->SetRuntimeAffinity(aos::MakeCpusetFromCpus({1})); |
Maxwell Henderson | 6c6faaf | 2023-07-26 19:44:24 -0700 | [diff] [blame] | 19 | |
| 20 | CHECK(flatbuffer_callback_); |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 21 | timer_handler_ = event_loop->AddTimer([this]() { Loop(); }); |
| 22 | timer_handler_->set_name("CANSensorReader Loop"); |
| 23 | |
| 24 | event_loop->OnRun([this]() { |
| 25 | timer_handler_->Schedule(event_loop_->monotonic_now(), |
| 26 | 1 / kCANUpdateFreqHz); |
| 27 | }); |
| 28 | } |
| 29 | |
| 30 | void CANSensorReader::Loop() { |
| 31 | ctre::phoenix::StatusCode status = |
Maxwell Henderson | fcc0d12 | 2023-08-05 17:03:34 -0700 | [diff] [blame] | 32 | ctre::phoenix6::BaseStatusSignal::WaitForAll(20_ms, signals_); |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 33 | |
| 34 | if (!status.IsOK()) { |
Maxwell Henderson | 10ed5c3 | 2024-01-09 12:40:54 -0800 | [diff] [blame^] | 35 | AOS_LOG(ERROR, "Failed to read signals from talonfx motors: %s: %s", |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 36 | status.GetName(), status.GetDescription()); |
| 37 | } |
| 38 | |
Maxwell Henderson | 6c6faaf | 2023-07-26 19:44:24 -0700 | [diff] [blame] | 39 | flatbuffer_callback_(status); |
Maxwell Henderson | f29e318 | 2023-05-25 06:51:24 -0700 | [diff] [blame] | 40 | } |