Add 4 localizer reset buttons for each orientation in each HP station

Change-Id: I61a8d27722ba2c4806d8780c693af0bee02a5906
diff --git a/y2019/joystick_reader.cc b/y2019/joystick_reader.cc
index 23bc188..f54511b 100644
--- a/y2019/joystick_reader.cc
+++ b/y2019/joystick_reader.cc
@@ -76,13 +76,11 @@
 const ButtonLocation kPanelHPIntakeBackward(5, 5);
 
 const ButtonLocation kRelease(2, 4);
-const ButtonLocation kResetLocalizer(4, 3);
+const ButtonLocation kResetLocalizerLeftForwards(3, 14);
+const ButtonLocation kResetLocalizerLeftBackwards(4, 12);
 
-const ButtonLocation kAutoPanel(3, 10);
-const ButtonLocation kAutoPanelIntermediate(4, 6);
-
-const ElevatorWristPosition kAutoPanelPos{0.0, -M_PI / 2.0};
-const ElevatorWristPosition kAutoPanelIntermediatePos{0.34, -M_PI / 2.0};
+const ButtonLocation kResetLocalizerRightForwards(4, 1);
+const ButtonLocation kResetLocalizerRightBackwards(4, 11);
 
 const ElevatorWristPosition kStowPos{0.36, 0.0};
 
@@ -131,6 +129,7 @@
     superstructure_queue.goal.FetchLatest();
     if (superstructure_queue.goal.get()) {
       grab_piece_ = superstructure_queue.goal->suction.grab_piece;
+      switch_ball_ = superstructure_queue.goal->suction.gamepiece_mode == 0;
     }
     video_tx_.reset(new ProtoTXUdpSocket<VisionControl>(
         StringPrintf("10.%d.%d.179", team / 100, team % 100), 5000));
@@ -159,11 +158,49 @@
 
     auto new_superstructure_goal = superstructure_queue.goal.MakeMessage();
 
-    if (data.PosEdge(kResetLocalizer)) {
+    if (data.PosEdge(kResetLocalizerLeftForwards)) {
       auto localizer_resetter = localizer_control.MakeMessage();
       localizer_resetter->x = 0.4;
       localizer_resetter->y = 3.4;
       localizer_resetter->theta = 0.0;
+
+      if (!localizer_resetter.Send()) {
+        LOG(ERROR, "Failed to reset localizer.\n");
+      }
+    }
+
+    if (data.PosEdge(kResetLocalizerLeftBackwards)) {
+      auto localizer_resetter = localizer_control.MakeMessage();
+      // Start at the left feeder station.
+      localizer_resetter->x = 0.4;
+      localizer_resetter->y = 3.4;
+      localizer_resetter->theta = M_PI;
+
+      if (!localizer_resetter.Send()) {
+        LOG(ERROR, "Failed to reset localizer.\n");
+      }
+    }
+
+    // TODO(austin): Check y location.
+    if (data.PosEdge(kResetLocalizerRightForwards)) {
+      auto localizer_resetter = localizer_control.MakeMessage();
+      // Start at the left feeder station.
+      localizer_resetter->x = 0.4;
+      localizer_resetter->y = -3.4;
+      localizer_resetter->theta = 0.0;
+
+      if (!localizer_resetter.Send()) {
+        LOG(ERROR, "Failed to reset localizer.\n");
+      }
+    }
+
+    if (data.PosEdge(kResetLocalizerRightBackwards)) {
+      auto localizer_resetter = localizer_control.MakeMessage();
+      // Start at the left feeder station.
+      localizer_resetter->x = 0.4;
+      localizer_resetter->y = -3.4;
+      localizer_resetter->theta = M_PI;
+
       if (!localizer_resetter.Send()) {
         LOG(ERROR, "Failed to reset localizer.\n");
       }
@@ -222,12 +259,6 @@
       stilts_was_above_ = false;
     }
 
-    if (data.IsPressed(kAutoPanel)) {
-      elevator_wrist_pos_ = kAutoPanelPos;
-    } else if (data.IsPressed(kAutoPanelIntermediate)) {
-      elevator_wrist_pos_ = kAutoPanelIntermediatePos;
-    }
-
     if (switch_ball_) {
       if (superstructure_queue.status->has_piece) {
         new_superstructure_goal->wrist.profile_params.max_acceleration = 20;