Added zeroing to ADIS16448

Broke out averaging from gyro_sender into a new class.

Change-Id: Iedaa0a7bd39337dbbe61a6d856ce28227f2747a5
diff --git a/frc971/wpilib/ADIS16448.h b/frc971/wpilib/ADIS16448.h
index 778ab49..4fefd07 100644
--- a/frc971/wpilib/ADIS16448.h
+++ b/frc971/wpilib/ADIS16448.h
@@ -37,6 +37,12 @@
 
   void Quit() { run_ = false; }
 
+  bool gyros_are_zeroed() const { return gyros_are_zeroed_.load(); }
+
+  double gyro_x_zeroed_offset() const { return gyro_x_zeroed_offset_; }
+  double gyro_y_zeroed_offset() const { return gyro_y_zeroed_offset_; }
+  double gyro_z_zeroed_offset() const { return gyro_z_zeroed_offset_; }
+
  private:
   // Converts a 16-bit value at data to a scaled output value where a value of 1
   // corresponds to lsb_per_output.
@@ -70,6 +76,12 @@
   DigitalInput *const dio1_;
 
   ::std::atomic<bool> run_{true};
+
+  // The averaged values of the gyro over 6 seconds after power up.
+  ::std::atomic<bool> gyros_are_zeroed_{false};
+  double gyro_x_zeroed_offset_ = 0.0;
+  double gyro_y_zeroed_offset_ = 0.0;
+  double gyro_z_zeroed_offset_ = 0.0;
 };
 
 }  // namespace wpilib