Send ADIS16448 values out as a batch
We switched the newer IMU over to using batches to reduce CPU usage,
time to switch the older IMU over too.
Change-Id: I11ba0d71947f112c4fbcc8b45749cf6fd988d2a4
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/frc971/wpilib/ADIS16448.cc b/frc971/wpilib/ADIS16448.cc
index 2ce45e9..b104840 100644
--- a/frc971/wpilib/ADIS16448.cc
+++ b/frc971/wpilib/ADIS16448.cc
@@ -119,7 +119,7 @@
frc::DigitalInput *dio1)
: event_loop_(event_loop),
imu_values_sender_(
- event_loop_->MakeSender<::frc971::IMUValues>("/drivetrain")),
+ event_loop_->MakeSender<::frc971::IMUValuesBatch>("/drivetrain")),
spi_(new frc::SPI(port)),
dio1_(dio1) {
// 1MHz is the maximum supported for burst reads, but we
@@ -276,7 +276,15 @@
ConvertValue(&to_receive[24], kTemperatureLsbDegree) +
kTemperatureZero);
- if (!builder.Send(imu_builder.Finish())) {
+ flatbuffers::Offset<IMUValues> imu_offset = imu_builder.Finish();
+
+ flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<IMUValues>>>
+ readings_offset = builder.fbb()->CreateVector(&imu_offset, 1);
+
+ IMUValuesBatch::Builder imu_values_batch_builder =
+ builder.MakeBuilder<IMUValuesBatch>();
+ imu_values_batch_builder.add_readings(readings_offset);
+ if (!builder.Send(imu_values_batch_builder.Finish())) {
AOS_LOG(WARNING, "sending queue message failed\n");
}
diff --git a/frc971/wpilib/ADIS16448.h b/frc971/wpilib/ADIS16448.h
index 04d1712..59f9aa8 100644
--- a/frc971/wpilib/ADIS16448.h
+++ b/frc971/wpilib/ADIS16448.h
@@ -14,6 +14,7 @@
#include "aos/events/shm_event_loop.h"
#include "aos/logging/logging.h"
#include "frc971/wpilib/fpga_time_conversion.h"
+#include "frc971/wpilib/imu_batch_generated.h"
#include "frc971/wpilib/imu_generated.h"
#include "frc971/wpilib/spi_rx_clearer.h"
@@ -85,7 +86,7 @@
bool Initialize();
::aos::EventLoop *event_loop_;
- ::aos::Sender<::frc971::IMUValues> imu_values_sender_;
+ ::aos::Sender<::frc971::IMUValuesBatch> imu_values_sender_;
// TODO(Brian): This object has no business owning these ones.
const ::std::unique_ptr<frc::SPI> spi_;
diff --git a/frc971/wpilib/BUILD b/frc971/wpilib/BUILD
index 4f8bca0..10e8462 100644
--- a/frc971/wpilib/BUILD
+++ b/frc971/wpilib/BUILD
@@ -115,9 +115,9 @@
"//aos/events:event_loop",
"//aos/events:shm_event_loop",
"//aos/logging",
- "//frc971/input:robot_state_fbs",
"//aos/time",
"//aos/util:phased_loop",
+ "//frc971/input:robot_state_fbs",
"//frc971/queues:gyro_fbs",
"//frc971/queues:gyro_uid_fbs",
"//frc971/zeroing:averager",
@@ -167,10 +167,10 @@
deps = [
"//aos:init",
"//aos/events:event_loop",
- "//frc971/input:robot_state_fbs",
"//aos/scoped:scoped_fd",
"//aos/time",
"//aos/util:log_interval",
+ "//frc971/input:robot_state_fbs",
],
)
@@ -204,8 +204,8 @@
deps = [
"//aos:init",
"//aos/events:shm_event_loop",
- "//frc971/input:driver_station_data",
"//aos/network:team_number",
+ "//frc971/input:driver_station_data",
"//frc971/input:joystick_state_fbs",
"//third_party:wpilib",
],
@@ -331,6 +331,7 @@
target_compatible_with = ["//tools/platforms/hardware:roborio"],
deps = [
":fpga_time_conversion",
+ ":imu_batch_fbs",
":imu_fbs",
":spi_rx_clearer",
"//aos:init",