Add logic to read out of order joysticks

If joysticks get out of order on the driverstation, we won't
get the wrong inputs.

The id is encoded as a two bit number in buttons 14 and 15.

Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: I569ad6a991c4fda1596aba85b4b697da9c2ecab9
diff --git a/frc971/input/action_joystick_input.h b/frc971/input/action_joystick_input.h
index 3284b15..f77f416 100644
--- a/frc971/input/action_joystick_input.h
+++ b/frc971/input/action_joystick_input.h
@@ -25,6 +25,11 @@
     // A button, for use with the run_teleop_in_auto, that will cancel the auto
     // mode, and if run_telop_in_auto is specified, resume teloperation.
     const driver_station::ButtonLocation cancel_auto_button = {-1, -1};
+
+    // Use button 14 and 15 to encode the id of the joystick and remap the
+    // joysticks so that their ids are independent of their order on the
+    // driverstation.
+    bool use_redundant_joysticks = false;
   };
   ActionJoystickInput(
       ::aos::EventLoop *event_loop,
@@ -95,6 +100,8 @@
 
   void RunIteration(const ::frc971::input::driver_station::Data &data) override;
 
+  void DoRunIteration(const ::frc971::input::driver_station::Data &data);
+
   void StartAuto();
   void StopAuto();