Use ADIS16470 in 2020 robot

Change-Id: I0b0ff931b98efacaf7cb7d3ba92940c78c71af9e
diff --git a/y2020/wpilib_interface.cc b/y2020/wpilib_interface.cc
index 4968c9f..a363775 100644
--- a/y2020/wpilib_interface.cc
+++ b/y2020/wpilib_interface.cc
@@ -34,7 +34,7 @@
 #include "ctre/phoenix/motorcontrol/can/TalonSRX.h"
 #include "frc971/autonomous/auto_mode_generated.h"
 #include "frc971/control_loops/drivetrain/drivetrain_position_generated.h"
-#include "frc971/wpilib/ADIS16448.h"
+#include "frc971/wpilib/ADIS16470.h"
 #include "frc971/wpilib/buffered_pcm.h"
 #include "frc971/wpilib/buffered_solenoid.h"
 #include "frc971/wpilib/dma.h"
@@ -130,7 +130,11 @@
     autonomous_modes_.at(i) = ::std::move(sensor);
   }
 
+  void set_imu(frc971::wpilib::ADIS16470 *imu) { imu_ = imu; }
+
   void RunIteration() override {
+    CHECK_NOTNULL(imu_)->DoReads();
+
     {
       auto builder = drivetrain_position_sender_.MakeBuilder();
       frc971::control_loops::drivetrain::Position::Builder drivetrain_builder =
@@ -181,6 +185,8 @@
       drivetrain_position_sender_;
 
   ::std::array<::std::unique_ptr<frc::DigitalInput>, 2> autonomous_modes_;
+
+  frc971::wpilib::ADIS16470 *imu_ = nullptr;
 };
 
 class SuperstructureWriter
@@ -224,6 +230,13 @@
     sensor_reader.set_drivetrain_left_encoder(make_encoder(0));
     sensor_reader.set_drivetrain_right_encoder(make_encoder(1));
 
+    auto imu_trigger = make_unique<frc::DigitalInput>(0);
+    auto imu_reset = make_unique<frc::DigitalOutput>(1);
+    auto spi = make_unique<frc::SPI>(frc::SPI::Port::kOnboardCS2);
+    frc971::wpilib::ADIS16470 imu(&sensor_reader_event_loop, spi.get(),
+                                  imu_trigger.get(), imu_reset.get());
+    sensor_reader.set_imu(&imu);
+
     AddLoop(&sensor_reader_event_loop);
 
     // Thread 4.