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",