Added position control and profiling to drivetrain.

Change-Id: I09ad01c46b23f1c7b6e8530bc10b03a733245b95
diff --git a/frc971/control_loops/drivetrain/drivetrain.h b/frc971/control_loops/drivetrain/drivetrain.h
index 30548be..a9541b7 100644
--- a/frc971/control_loops/drivetrain/drivetrain.h
+++ b/frc971/control_loops/drivetrain/drivetrain.h
@@ -3,14 +3,15 @@
 
 #include "Eigen/Dense"
 
-#include "aos/common/controls/polytope.h"
 #include "aos/common/controls/control_loop.h"
 #include "aos/common/controls/polytope.h"
+#include "aos/common/controls/polytope.h"
+#include "aos/common/util/log_interval.h"
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
+#include "frc971/control_loops/drivetrain/drivetrain_config.h"
+#include "frc971/control_loops/drivetrain/gear.h"
 #include "frc971/control_loops/drivetrain/polydrivetrain.h"
 #include "frc971/control_loops/drivetrain/ssdrivetrain.h"
-#include "frc971/control_loops/drivetrain/drivetrain_config.h"
-#include "aos/common/util/log_interval.h"
 
 namespace frc971 {
 namespace control_loops {
@@ -26,6 +27,8 @@
       ::frc971::control_loops::DrivetrainQueue *my_drivetrain =
           &::frc971::control_loops::drivetrain_queue);
 
+  int ControllerIndexFromGears();
+
  protected:
   // Executes one cycle of the control loop.
   void RunIteration(
@@ -36,9 +39,6 @@
 
   void Zero(::frc971::control_loops::DrivetrainQueue::Output *output) override;
 
-  typedef ::aos::util::SimpleLogInterval SimpleLogInterval;
-  SimpleLogInterval no_position_ = SimpleLogInterval(
-      ::aos::time::Time::InSeconds(0.25), WARNING, "no position");
   double last_gyro_heading_ = 0.0;
   double last_gyro_rate_ = 0.0;
 
@@ -48,10 +48,17 @@
   PolyDrivetrain dt_openloop_;
   DrivetrainMotorsSS dt_closedloop_;
 
+  // Current gears for each drive side.
+  Gear left_gear_;
+  Gear right_gear_;
+
   double last_left_voltage_ = 0;
   double last_right_voltage_ = 0;
 
   double integrated_kf_heading_ = 0;
+
+  bool left_high_requested_;
+  bool right_high_requested_;
 };
 
 }  // namespace drivetrain