Add slow-down button to pistol grip

Change-Id: I4b76f566bdf499add0d605dc68e55e60dcb9de0c
diff --git a/aos/input/drivetrain_input.cc b/aos/input/drivetrain_input.cc
index 248f1ce..631f97d 100644
--- a/aos/input/drivetrain_input.cc
+++ b/aos/input/drivetrain_input.cc
@@ -170,6 +170,10 @@
     throttle = ::std::max(-1.0, throttle / 0.7);
   }
 
+  if (data.IsPressed(slow_down_)) {
+    throttle *= 0.5;
+  }
+
   if (!data.GetControlBit(ControlBit::kEnabled)) {
     high_gear_ = default_high_gear_;
   }
@@ -242,6 +246,7 @@
 
   const ButtonLocation TopButton(1, 1);
   const ButtonLocation SecondButton(1, 2);
+  const ButtonLocation BottomButton(1, 4);
   // Non-existant button for nops.
   const ButtonLocation DummyButton(1, 10);
 
@@ -264,7 +269,8 @@
           kWheelHigh, kWheelLow, kTriggerVelocityHigh, kTriggerVelocityLow,
           kTriggerTorqueHigh, kTriggerTorqueLow, kTriggerHigh, kTriggerLow,
           kWheelVelocityHigh, kWheelVelocityLow, kWheelTorqueHigh,
-          kWheelTorqueLow, kQuickTurn, kShiftHigh, kShiftLow, kTurn1, kTurn2));
+          kWheelTorqueLow, kQuickTurn, kShiftHigh, kShiftLow, kTurn1, kTurn2,
+          BottomButton));
 
   result->set_default_high_gear(default_high_gear);
   return result;
diff --git a/aos/input/drivetrain_input.h b/aos/input/drivetrain_input.h
index f4b0212..ec52368 100644
--- a/aos/input/drivetrain_input.h
+++ b/aos/input/drivetrain_input.h
@@ -182,7 +182,8 @@
       driver_station::ButtonLocation shift_high,
       driver_station::ButtonLocation shift_low,
       driver_station::ButtonLocation turn1,
-      driver_station::ButtonLocation turn2)
+      driver_station::ButtonLocation turn2,
+      driver_station::ButtonLocation slow_down)
       : DrivetrainInputReader(wheel_high, throttle_high, quick_turn, turn1,
                               TurnButtonUse::kLineFollow, turn2,
                               TurnButtonUse::kControlLoopDriving),
@@ -197,7 +198,8 @@
         throttle_torque_high_(throttle_torque_high),
         throttle_torque_low_(throttle_torque_low),
         shift_high_(shift_high),
-        shift_low_(shift_low) {}
+        shift_low_(shift_low),
+        slow_down_(slow_down) {}
 
   WheelAndThrottle GetWheelAndThrottle(
       const ::aos::input::driver_station::Data &data) override;
@@ -222,6 +224,7 @@
 
   const driver_station::ButtonLocation shift_high_;
   const driver_station::ButtonLocation shift_low_;
+  const driver_station::ButtonLocation slow_down_;
 
   bool high_gear_;
   bool default_high_gear_;