Let user choose how to send CANPosition
Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: I92b3e2da71e8bf6b5ddb532a1b05a9610abe0236
diff --git a/frc971/wpilib/can_sensor_reader.cc b/frc971/wpilib/can_sensor_reader.cc
index 744cb6a..ad244fb 100644
--- a/frc971/wpilib/can_sensor_reader.cc
+++ b/frc971/wpilib/can_sensor_reader.cc
@@ -6,17 +6,18 @@
CANSensorReader::CANSensorReader(
aos::EventLoop *event_loop,
std::vector<ctre::phoenix6::BaseStatusSignal *> signals_registry,
- std::vector<std::shared_ptr<Falcon>> falcons)
+ std::vector<std::shared_ptr<Falcon>> falcons,
+ std::function<void(ctre::phoenix::StatusCode status)> flatbuffer_callback)
: event_loop_(event_loop),
signals_(signals_registry.begin(), signals_registry.end()),
- can_position_sender_(
- event_loop->MakeSender<control_loops::drivetrain::CANPosition>(
- "/drivetrain")),
- falcons_(falcons) {
+ falcons_(falcons),
+ flatbuffer_callback_(flatbuffer_callback) {
event_loop->SetRuntimeRealtimePriority(40);
// TODO(max): Decide if we want to keep this on this core.
event_loop->SetRuntimeAffinity(aos::MakeCpusetFromCpus({1}));
+
+ CHECK(flatbuffer_callback_);
timer_handler_ = event_loop->AddTimer([this]() { Loop(); });
timer_handler_->set_name("CANSensorReader Loop");
@@ -35,30 +36,5 @@
status.GetName(), status.GetDescription());
}
- auto builder = can_position_sender_.MakeBuilder();
-
- for (auto falcon : falcons_) {
- falcon->RefreshNontimesyncedSignals();
- falcon->SerializePosition(builder.fbb());
- }
-
- auto falcon_offsets =
- builder.fbb()
- ->CreateVector<flatbuffers::Offset<control_loops::CANFalcon>>(
- falcons_.size(), [this](size_t index) {
- auto offset = falcons_.at(index)->TakeOffset();
- CHECK(offset.has_value());
- return offset.value();
- });
-
- control_loops::drivetrain::CANPosition::Builder can_position_builder =
- builder.MakeBuilder<control_loops::drivetrain::CANPosition>();
-
- can_position_builder.add_falcons(falcon_offsets);
- if (!falcons_.empty()) {
- can_position_builder.add_timestamp(falcons_.at(0)->GetTimestamp());
- }
- can_position_builder.add_status(static_cast<int>(status));
-
- builder.CheckOk(builder.Send(can_position_builder.Finish()));
+ flatbuffer_callback_(status);
}