Switch to c++11 enums for flatbuffers

Change-Id: I99171464bf54efbb7eb322c556760dee86648f5e
diff --git a/aos/flatbuffer_introspection_test.cc b/aos/flatbuffer_introspection_test.cc
index 54a2ab2..893b402 100644
--- a/aos/flatbuffer_introspection_test.cc
+++ b/aos/flatbuffer_introspection_test.cc
@@ -145,7 +145,7 @@
   flatbuffers::FlatBufferBuilder builder;
 
   ConfigurationBuilder config_builder(builder);
-  config_builder.add_foo_enum(BaseType_UShort);
+  config_builder.add_foo_enum(BaseType::UShort);
 
   builder.Finish(config_builder.Finish());
 
@@ -271,11 +271,12 @@
 TEST_F(FlatbufferIntrospectionTest, VectorEnumTest) {
   flatbuffers::FlatBufferBuilder builder;
 
-  auto enums = builder.CreateVector<int8_t>(
-      {BaseType_UShort, BaseType_Obj, BaseType_UInt});
+  auto enums = builder.CreateVector<BaseType>(
+      {BaseType::UShort, BaseType::Obj, BaseType::UInt});
 
   ConfigurationBuilder config_builder(builder);
-  config_builder.add_vector_foo_enum(enums);
+  config_builder.add_vector_foo_enum(
+      flatbuffers::Offset<flatbuffers::Vector<int8_t>>(enums.o));
 
   builder.Finish(config_builder.Finish());
 
@@ -287,7 +288,7 @@
 TEST_F(FlatbufferIntrospectionTest, StructEnumTest) {
   flatbuffers::FlatBufferBuilder builder;
 
-  StructEnum foo_struct(BaseType_UShort);
+  StructEnum foo_struct(BaseType::UShort);
 
   ConfigurationBuilder config_builder(builder);
   config_builder.add_foo_struct_enum(&foo_struct);
diff --git a/aos/input/drivetrain_input.cc b/aos/input/drivetrain_input.cc
index 687c8bb..8860c4d 100644
--- a/aos/input/drivetrain_input.cc
+++ b/aos/input/drivetrain_input.cc
@@ -108,9 +108,9 @@
   goal_builder.add_quickturn(data.IsPressed(quick_turn_));
   goal_builder.add_controller_type(
       is_line_following
-          ? drivetrain::ControllerType_LINE_FOLLOWER
-          : (is_control_loop_driving ? drivetrain::ControllerType_MOTION_PROFILE
-                                     : drivetrain::ControllerType_POLYDRIVE));
+          ? drivetrain::ControllerType::LINE_FOLLOWER
+          : (is_control_loop_driving ? drivetrain::ControllerType::MOTION_PROFILE
+                                     : drivetrain::ControllerType::POLYDRIVE));
   goal_builder.add_left_goal(current_left_goal);
   goal_builder.add_right_goal(current_right_goal);
   goal_builder.add_linear(linear_offset);
diff --git a/frc971/autonomous/base_autonomous_actor.cc b/frc971/autonomous/base_autonomous_actor.cc
index dee2931..27b63cc 100644
--- a/frc971/autonomous/base_autonomous_actor.cc
+++ b/frc971/autonomous/base_autonomous_actor.cc
@@ -47,7 +47,7 @@
 
   drivetrain::Goal::Builder goal_builder =
       builder.MakeBuilder<drivetrain::Goal>();
-  goal_builder.add_controller_type(drivetrain::ControllerType_POLYDRIVE);
+  goal_builder.add_controller_type(drivetrain::ControllerType::POLYDRIVE);
   goal_builder.add_highgear(true);
   goal_builder.add_wheel(0.0);
   goal_builder.add_throttle(0.0);
@@ -85,7 +85,7 @@
   drivetrain::Goal::Builder goal_builder =
       builder.MakeBuilder<drivetrain::Goal>();
 
-  goal_builder.add_controller_type(drivetrain::ControllerType_MOTION_PROFILE);
+  goal_builder.add_controller_type(drivetrain::ControllerType::MOTION_PROFILE);
   goal_builder.add_highgear(true);
   goal_builder.add_wheel(0.0);
   goal_builder.add_throttle(0.0);
@@ -420,7 +420,7 @@
     drivetrain::Goal::Builder goal_builder =
         builder.MakeBuilder<drivetrain::Goal>();
     goal_builder.add_controller_type(
-        drivetrain::ControllerType_SPLINE_FOLLOWER);
+        drivetrain::ControllerType::SPLINE_FOLLOWER);
     // TODO(james): Currently the 4.0 is copied from the
     // line_follow_drivetrain.cc, but it is somewhat year-specific, so we should
     // factor it out in some way.
@@ -469,7 +469,7 @@
       builder.MakeBuilder<drivetrain::Goal>();
 
   drivetrain::ControllerType controller_type =
-      drivetrain::ControllerType_SPLINE_FOLLOWER;
+      drivetrain::ControllerType::SPLINE_FOLLOWER;
   if (drivetrain_goal_fetcher_.get()) {
     controller_type = drivetrain_goal_fetcher_->controller_type();
     goal_builder.add_throttle(drivetrain_goal_fetcher_->throttle());
@@ -493,7 +493,7 @@
       ((base_autonomous_actor_->drivetrain_status_fetcher_->trajectory_logging()
                 ->planning_spline_idx() == spline_handle_ &&
         base_autonomous_actor_->drivetrain_status_fetcher_->trajectory_logging()
-                ->planning_state() == 3) ||
+                ->planning_state() == drivetrain::PlanningState::PLANNED) ||
        base_autonomous_actor_->drivetrain_status_fetcher_->trajectory_logging()
                ->current_spline_idx() == spline_handle_)) {
     return true;
@@ -521,7 +521,7 @@
   auto builder = base_autonomous_actor_->drivetrain_goal_sender_.MakeBuilder();
   drivetrain::Goal::Builder goal_builder =
       builder.MakeBuilder<drivetrain::Goal>();
-  goal_builder.add_controller_type(drivetrain::ControllerType_SPLINE_FOLLOWER);
+  goal_builder.add_controller_type(drivetrain::ControllerType::SPLINE_FOLLOWER);
 
   AOS_LOG(INFO, "Starting spline\n");
 
diff --git a/frc971/autonomous/base_autonomous_actor.h b/frc971/autonomous/base_autonomous_actor.h
index 09d9a0e..9444389 100644
--- a/frc971/autonomous/base_autonomous_actor.h
+++ b/frc971/autonomous/base_autonomous_actor.h
@@ -85,7 +85,7 @@
   void LineFollowAtVelocity(
       double velocity,
       y2019::control_loops::drivetrain::SelectionHint hint =
-          y2019::control_loops::drivetrain::SelectionHint_NONE);
+          y2019::control_loops::drivetrain::SelectionHint::NONE);
 
   // Waits until the robot is pitched up above the specified angle, or the move
   // finishes.  Returns true on success, and false if it cancels.
diff --git a/frc971/control_loops/drivetrain/drivetrain.cc b/frc971/control_loops/drivetrain/drivetrain.cc
index 42f0935..63caaab 100644
--- a/frc971/control_loops/drivetrain/drivetrain.cc
+++ b/frc971/control_loops/drivetrain/drivetrain.cc
@@ -257,7 +257,7 @@
 
   dt_openloop_.SetPosition(position, left_gear_, right_gear_);
 
-  ControllerType controller_type = ControllerType_POLYDRIVE;
+  ControllerType controller_type = ControllerType::POLYDRIVE;
   if (goal) {
     controller_type = goal->controller_type();
 
@@ -271,7 +271,7 @@
   dt_openloop_.Update(robot_state().voltage_battery());
 
   dt_closedloop_.Update(output != nullptr &&
-                        controller_type == ControllerType_MOTION_PROFILE);
+                        controller_type == ControllerType::MOTION_PROFILE);
 
   const Eigen::Matrix<double, 5, 1> trajectory_state =
       (Eigen::Matrix<double, 5, 1>() << localizer_->x(), localizer_->y(),
@@ -280,7 +280,7 @@
           .finished();
 
   dt_spline_.Update(
-      output != nullptr && controller_type == ControllerType_SPLINE_FOLLOWER,
+      output != nullptr && controller_type == ControllerType::SPLINE_FOLLOWER,
       trajectory_state);
 
   dt_line_follow_.Update(monotonic_now, trajectory_state);
@@ -288,16 +288,16 @@
   OutputT output_struct;
 
   switch (controller_type) {
-    case ControllerType_POLYDRIVE:
+    case ControllerType::POLYDRIVE:
       dt_openloop_.SetOutput(output != nullptr ? &output_struct : nullptr);
       break;
-    case ControllerType_MOTION_PROFILE:
+    case ControllerType::MOTION_PROFILE:
       dt_closedloop_.SetOutput(output != nullptr ? &output_struct : nullptr);
       break;
-    case ControllerType_SPLINE_FOLLOWER:
+    case ControllerType::SPLINE_FOLLOWER:
       dt_spline_.SetOutput(output != nullptr ? &output_struct : nullptr);
       break;
-    case ControllerType_LINE_FOLLOWER:
+    case ControllerType::LINE_FOLLOWER:
       if (!dt_line_follow_.SetOutput(output != nullptr ? &output_struct
                                                        : nullptr)) {
         // If the line follow drivetrain was unable to execute (generally due to
diff --git a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
index 05b870b..3b668dd 100644
--- a/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
+++ b/frc971/control_loops/drivetrain/drivetrain_lib_test.cc
@@ -93,8 +93,7 @@
       RunFor(dt());
       EXPECT_TRUE(drivetrain_status_fetcher_.Fetch());
     } while (CHECK_NOTNULL(drivetrain_status_fetcher_->trajectory_logging())
-                 ->planning_state() !=
-             (int8_t)SplineDrivetrain::PlanState::kPlannedTrajectory);
+                 ->planning_state() != PlanningState::PLANNED);
   }
 
   void WaitForTrajectoryExecution() {
@@ -132,7 +131,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(-1.0);
     goal_builder.add_right_goal(1.0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -148,7 +147,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(-1.0);
     goal_builder.add_right_goal(1.0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -164,7 +163,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(-1.0);
     goal_builder.add_right_goal(1.0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -194,7 +193,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(4.0);
     goal_builder.add_right_goal(4.0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -218,7 +217,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(4.0);
     goal_builder.add_right_goal(3.9);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -277,7 +276,7 @@
         angular_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(4.0);
     goal_builder.add_right_goal(4.0);
     goal_builder.add_linear(linear_offset);
@@ -318,7 +317,7 @@
         angular_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(-1.0);
     goal_builder.add_right_goal(1.0);
     goal_builder.add_linear(linear_offset);
@@ -359,7 +358,7 @@
         angular_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(5.0);
     goal_builder.add_right_goal(4.0);
     goal_builder.add_linear(linear_offset);
@@ -381,7 +380,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_POLYDRIVE);
+    goal_builder.add_controller_type(ControllerType::POLYDRIVE);
     goal_builder.add_wheel(0.0);
     goal_builder.add_throttle(1.0);
     goal_builder.add_highgear(true);
@@ -394,7 +393,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_POLYDRIVE);
+    goal_builder.add_controller_type(ControllerType::POLYDRIVE);
     goal_builder.add_wheel(0.0);
     goal_builder.add_throttle(-0.3);
     goal_builder.add_highgear(true);
@@ -407,7 +406,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_POLYDRIVE);
+    goal_builder.add_controller_type(ControllerType::POLYDRIVE);
     goal_builder.add_wheel(0.0);
     goal_builder.add_throttle(0.0);
     goal_builder.add_highgear(true);
@@ -434,7 +433,7 @@
         angular_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_MOTION_PROFILE);
+    goal_builder.add_controller_type(ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(5.0);
     goal_builder.add_right_goal(4.0);
     goal_builder.add_linear(linear_offset);
@@ -483,7 +482,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -493,7 +492,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -532,7 +531,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -541,7 +540,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -597,7 +596,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -637,7 +636,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -655,7 +654,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -700,7 +699,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -718,7 +717,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -728,7 +727,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -773,7 +772,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -782,7 +781,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -822,7 +821,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -831,7 +830,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -872,7 +871,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -881,7 +880,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -920,7 +919,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -929,7 +928,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -966,7 +965,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -976,7 +975,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(2);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1014,7 +1013,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -1027,7 +1026,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1060,7 +1059,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     goal_builder.add_spline_handle(2);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -1101,7 +1100,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     goal_builder.add_spline_handle(0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -1137,7 +1136,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     goal_builder.add_spline_handle(0);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -1148,7 +1147,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(2);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1187,7 +1186,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1220,7 +1219,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
@@ -1231,7 +1230,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(2);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1269,7 +1268,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1280,7 +1279,7 @@
     drivetrain_status_fetcher_.Fetch();
     EXPECT_EQ(CHECK_NOTNULL(drivetrain_status_fetcher_->trajectory_logging())
                   ->planning_state(),
-              3);
+              PlanningState::PLANNED);
     ::std::this_thread::sleep_for(::std::chrono::milliseconds(2));
   }
   VerifyNearSplineGoal();
@@ -1315,7 +1314,7 @@
         spline_goal_builder.Finish();
 
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline(spline_goal_offset);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1326,7 +1325,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_SPLINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::SPLINE_FOLLOWER);
     goal_builder.add_spline_handle(1);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1344,7 +1343,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_LINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::LINE_FOLLOWER);
     goal_builder.add_throttle(0.5);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
@@ -1381,7 +1380,7 @@
   {
     auto builder = drivetrain_goal_sender_.MakeBuilder();
     Goal::Builder goal_builder = builder.MakeBuilder<Goal>();
-    goal_builder.add_controller_type(ControllerType_LINE_FOLLOWER);
+    goal_builder.add_controller_type(ControllerType::LINE_FOLLOWER);
     goal_builder.add_throttle(0.5);
     EXPECT_TRUE(builder.Send(goal_builder.Finish()));
   }
diff --git a/frc971/control_loops/drivetrain/line_follow_drivetrain.cc b/frc971/control_loops/drivetrain/line_follow_drivetrain.cc
index 7c92f8b..1e2c76f 100644
--- a/frc971/control_loops/drivetrain/line_follow_drivetrain.cc
+++ b/frc971/control_loops/drivetrain/line_follow_drivetrain.cc
@@ -115,7 +115,7 @@
   // Freeze the target once the driver presses the button; if we haven't yet
   // confirmed a target when the driver presses the button, we will not do
   // anything and report not ready until we have a target.
-  if (goal->controller_type() == drivetrain::ControllerType_LINE_FOLLOWER) {
+  if (goal->controller_type() == drivetrain::ControllerType::LINE_FOLLOWER) {
     last_enable_ = now;
     // If we already acquired a target, we want to keep track if it.
     if (have_target_) {
diff --git a/frc971/control_loops/drivetrain/line_follow_drivetrain_test.cc b/frc971/control_loops/drivetrain/line_follow_drivetrain_test.cc
index bd45e92..180af4b 100644
--- a/frc971/control_loops/drivetrain/line_follow_drivetrain_test.cc
+++ b/frc971/control_loops/drivetrain/line_follow_drivetrain_test.cc
@@ -55,8 +55,8 @@
     Goal::Builder goal_builder(fbb);
     goal_builder.add_throttle(driver_model_(state_));
     goal_builder.add_controller_type(freeze_target_
-                                         ? ControllerType_LINE_FOLLOWER
-                                         : ControllerType_POLYDRIVE);
+                                         ? ControllerType::LINE_FOLLOWER
+                                         : ControllerType::POLYDRIVE);
     fbb.Finish(goal_builder.Finish());
 
     aos::FlatbufferDetachedBuffer<Goal> goal(fbb.Release());
diff --git a/frc971/control_loops/drivetrain/splinedrivetrain.cc b/frc971/control_loops/drivetrain/splinedrivetrain.cc
index bfd0c96..2790978 100644
--- a/frc971/control_loops/drivetrain/splinedrivetrain.cc
+++ b/frc971/control_loops/drivetrain/splinedrivetrain.cc
@@ -42,7 +42,7 @@
     past_distance_spline_.reset();
     past_trajectory_.reset();
 
-    plan_state_ = PlanningState_BUILDING_TRAJECTORY;
+    plan_state_ = PlanningState::BUILDING_TRAJECTORY;
     future_spline_idx_ = goal_.spline_idx;
     planning_spline_idx_ = future_spline_idx_;
     const MultiSpline &multispline = goal_.spline;
@@ -70,28 +70,28 @@
     for (size_t i = 0; i < multispline.constraints.size(); ++i) {
       const ::frc971::ConstraintT &constraint = multispline.constraints[i];
       switch (constraint.constraint_type) {
-        case frc971::ConstraintType_CONSTRAINT_TYPE_UNDEFINED:
+        case frc971::ConstraintType::CONSTRAINT_TYPE_UNDEFINED:
           break;
-        case frc971::ConstraintType_LONGITUDINAL_ACCELERATION:
+        case frc971::ConstraintType::LONGITUDINAL_ACCELERATION:
           future_trajectory_->set_longitudinal_acceleration(constraint.value);
           break;
-        case frc971::ConstraintType_LATERAL_ACCELERATION:
+        case frc971::ConstraintType::LATERAL_ACCELERATION:
           future_trajectory_->set_lateral_acceleration(constraint.value);
           break;
-        case frc971::ConstraintType_VOLTAGE:
+        case frc971::ConstraintType::VOLTAGE:
           future_trajectory_->set_voltage_limit(constraint.value);
           break;
-        case frc971::ConstraintType_VELOCITY:
+        case frc971::ConstraintType::VELOCITY:
           future_trajectory_->LimitVelocity(constraint.start_distance,
                                             constraint.end_distance,
                                             constraint.value);
           break;
       }
     }
-    plan_state_ = PlanningState_PLANNING_TRAJECTORY;
+    plan_state_ = PlanningState::PLANNING_TRAJECTORY;
 
     future_trajectory_->Plan();
-    plan_state_ = PlanningState_PLANNED;
+    plan_state_ = PlanningState::PLANNED;
   }
 }
 
@@ -137,7 +137,7 @@
               &goal_.spline.constraints[i]);
         } else {
           goal_.spline.constraints[i].constraint_type =
-              ConstraintType_CONSTRAINT_TYPE_UNDEFINED;
+              ConstraintType::CONSTRAINT_TYPE_UNDEFINED;
         }
       }
 
diff --git a/frc971/control_loops/drivetrain/splinedrivetrain.h b/frc971/control_loops/drivetrain/splinedrivetrain.h
index 4f21b29..b28334c 100644
--- a/frc971/control_loops/drivetrain/splinedrivetrain.h
+++ b/frc971/control_loops/drivetrain/splinedrivetrain.h
@@ -95,7 +95,7 @@
   bool enable_ = false;
   bool output_was_capped_ = false;
 
-  std::atomic<PlanningState> plan_state_ = {PlanningState_NO_PLAN};
+  std::atomic<PlanningState> plan_state_ = {PlanningState::NO_PLAN};
 
   ::std::thread worker_thread_;
   // mutex_ is held by the worker thread while it is doing work or by the main
diff --git a/third_party/flatbuffers/build_defs.bzl b/third_party/flatbuffers/build_defs.bzl
index facb24b..da61852 100644
--- a/third_party/flatbuffers/build_defs.bzl
+++ b/third_party/flatbuffers/build_defs.bzl
@@ -22,6 +22,7 @@
     "--reflect-names",
     "--cpp-ptr-type flatbuffers::unique_ptr",
     "--force-empty",
+    "--scoped-enums",
     "--gen-name-strings",
 ]
 
diff --git a/y2016/actors/vision_align_actor.cc b/y2016/actors/vision_align_actor.cc
index e1c1892..ae05c70 100644
--- a/y2016/actors/vision_align_actor.cc
+++ b/y2016/actors/vision_align_actor.cc
@@ -74,7 +74,7 @@
     goal_builder.add_highgear(false);
     goal_builder.add_quickturn(false);
     goal_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     goal_builder.add_left_goal(left_current + side_distance_change);
     goal_builder.add_right_goal(right_current - side_distance_change);
 
diff --git a/y2019/actors/auto_splines.cc b/y2019/actors/auto_splines.cc
index 6166ca8..397229c 100644
--- a/y2019/actors/auto_splines.cc
+++ b/y2019/actors/auto_splines.cc
@@ -33,7 +33,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(2.0);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -42,7 +42,7 @@
     frc971::Constraint::Builder lateral_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     lateral_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LATERAL_ACCELERATION);
+        frc971::ConstraintType::LATERAL_ACCELERATION);
     lateral_constraint_builder.add_value(2.0);
     lateral_constraint_offset = lateral_constraint_builder.Finish();
   }
@@ -51,7 +51,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(11.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -60,7 +60,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(4.0);
     velocity_constraint_builder.add_start_distance(0.0);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -108,7 +108,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(3.0);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -117,7 +117,7 @@
     frc971::Constraint::Builder lateral_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     lateral_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LATERAL_ACCELERATION);
+        frc971::ConstraintType::LATERAL_ACCELERATION);
     lateral_constraint_builder.add_value(2.0);
     lateral_constraint_offset = lateral_constraint_builder.Finish();
   }
@@ -126,7 +126,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(11.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -135,7 +135,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(4.5);
     velocity_constraint_builder.add_start_distance(0.0);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -181,7 +181,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(3.0);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -190,7 +190,7 @@
     frc971::Constraint::Builder lateral_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     lateral_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LATERAL_ACCELERATION);
+        frc971::ConstraintType::LATERAL_ACCELERATION);
     lateral_constraint_builder.add_value(3.0);
     lateral_constraint_offset = lateral_constraint_builder.Finish();
   }
@@ -199,7 +199,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(11.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -208,7 +208,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(4.0);
     velocity_constraint_builder.add_start_distance(7.0);
     velocity_constraint_builder.add_end_distance(15.0);
@@ -280,7 +280,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(2.0);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -289,7 +289,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(10.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -298,7 +298,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(1.6);
     velocity_constraint_builder.add_start_distance(4.0);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -345,7 +345,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(11.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -354,7 +354,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(4.0);
     velocity_constraint_builder.add_start_distance(0.0);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -401,7 +401,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(10.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -410,7 +410,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(3.5);
     velocity_constraint_builder.add_start_distance(0.0);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -421,7 +421,7 @@
     frc971::Constraint::Builder velocity_constraint2_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint2_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint2_builder.add_value(2.0);
     velocity_constraint2_builder.add_start_distance(6.0);
     velocity_constraint2_builder.add_end_distance(10.0);
@@ -465,7 +465,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(0.5);
     velocity_constraint_builder.add_start_distance(0.0);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -511,7 +511,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(2.0);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -520,7 +520,7 @@
     frc971::Constraint::Builder lateral_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     lateral_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LATERAL_ACCELERATION);
+        frc971::ConstraintType::LATERAL_ACCELERATION);
     lateral_constraint_builder.add_value(2.0);
     lateral_constraint_offset = lateral_constraint_builder.Finish();
   }
@@ -529,7 +529,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(11.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -538,7 +538,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(1.7);
     velocity_constraint_builder.add_start_distance(0.0);
     velocity_constraint_builder.add_end_distance(0.8);
@@ -584,7 +584,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(1.5);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -593,7 +593,7 @@
     frc971::Constraint::Builder lateral_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     lateral_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LATERAL_ACCELERATION);
+        frc971::ConstraintType::LATERAL_ACCELERATION);
     lateral_constraint_builder.add_value(1.0);
     lateral_constraint_offset = lateral_constraint_builder.Finish();
   }
@@ -602,7 +602,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(11.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -611,7 +611,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(0.5);
     velocity_constraint_builder.add_start_distance(9.5);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -652,7 +652,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(1.0);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -661,7 +661,7 @@
     frc971::Constraint::Builder lateral_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     lateral_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LATERAL_ACCELERATION);
+        frc971::ConstraintType::LATERAL_ACCELERATION);
     lateral_constraint_builder.add_value(1.0);
     lateral_constraint_offset = lateral_constraint_builder.Finish();
   }
@@ -670,7 +670,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(11.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
@@ -679,7 +679,7 @@
     frc971::Constraint::Builder velocity_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     velocity_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VELOCITY);
+        frc971::ConstraintType::VELOCITY);
     velocity_constraint_builder.add_value(0.5);
     velocity_constraint_builder.add_start_distance(2.7);
     velocity_constraint_builder.add_end_distance(10.0);
@@ -719,7 +719,7 @@
     frc971::Constraint::Builder longitudinal_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     longitudinal_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LONGITUDINAL_ACCELERATION);
+        frc971::ConstraintType::LONGITUDINAL_ACCELERATION);
     longitudinal_constraint_builder.add_value(1.0);
     longitudinal_constraint_offset = longitudinal_constraint_builder.Finish();
   }
@@ -728,7 +728,7 @@
     frc971::Constraint::Builder lateral_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     lateral_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_LATERAL_ACCELERATION);
+        frc971::ConstraintType::LATERAL_ACCELERATION);
     lateral_constraint_builder.add_value(1.0);
     lateral_constraint_offset = lateral_constraint_builder.Finish();
   }
@@ -737,7 +737,7 @@
     frc971::Constraint::Builder voltage_constraint_builder =
         builder->MakeBuilder<frc971::Constraint>();
     voltage_constraint_builder.add_constraint_type(
-        frc971::ConstraintType_VOLTAGE);
+        frc971::ConstraintType::VOLTAGE);
     voltage_constraint_builder.add_value(6.0);
     voltage_constraint_offset = voltage_constraint_builder.Finish();
   }
diff --git a/y2019/actors/autonomous_actor.cc b/y2019/actors/autonomous_actor.cc
index fbde0be..aa2c808 100644
--- a/y2019/actors/autonomous_actor.cc
+++ b/y2019/actors/autonomous_actor.cc
@@ -198,14 +198,14 @@
 
     if (!spline1.WaitForSplineDistanceRemaining(0.2)) return true;
     LineFollowAtVelocity(1.3,
-                         control_loops::drivetrain::SelectionHint_FAR_ROCKET);
+                         control_loops::drivetrain::SelectionHint::FAR_ROCKET);
     if (!WaitForMilliseconds(::std::chrono::milliseconds(1200))) return true;
 
     set_suction_goal(false, 1);
     SendSuperstructureGoal();
     if (!WaitForMilliseconds(::std::chrono::milliseconds(200))) return true;
     LineFollowAtVelocity(-1.0,
-                         control_loops::drivetrain::SelectionHint_FAR_ROCKET);
+                         control_loops::drivetrain::SelectionHint::FAR_ROCKET);
     SplineHandle spline2 =
         PlanSpline(BindIsLeft(AutonomousSplines::FarRocketToHP, is_left),
                    SplineDirection::kBackward);
@@ -240,7 +240,7 @@
     SendSuperstructureGoal();
     if (!WaitForDriveXGreater(7.1)) return true;
     LineFollowAtVelocity(-1.5,
-                         control_loops::drivetrain::SelectionHint_FAR_ROCKET);
+                         control_loops::drivetrain::SelectionHint::FAR_ROCKET);
     if (!WaitForMilliseconds(::std::chrono::milliseconds(1000))) return true;
     set_elevator_wrist_goal(kPanelBackwardUpperPos);
     SendSuperstructureGoal();
@@ -249,7 +249,7 @@
     SendSuperstructureGoal();
     if (!WaitForMilliseconds(::std::chrono::milliseconds(400))) return true;
     LineFollowAtVelocity(1.0,
-                         control_loops::drivetrain::SelectionHint_FAR_ROCKET);
+                         control_loops::drivetrain::SelectionHint::FAR_ROCKET);
     SendSuperstructureGoal();
     if (!WaitForMilliseconds(::std::chrono::milliseconds(200))) return true;
   } else if (mode == Mode::kCargoship) {
@@ -282,7 +282,7 @@
     if (!spline1.WaitForSplineDistanceRemaining(0.8)) return true;
     // Line follow in to the first disc.
     LineFollowAtVelocity(-0.9,
-                         control_loops::drivetrain::SelectionHint_MID_SHIP);
+                         control_loops::drivetrain::SelectionHint::MID_SHIP);
     if (!WaitForDriveYCloseToZero(1.2)) return true;
 
     set_suction_goal(false, 1);
@@ -294,7 +294,7 @@
     if (!WaitForMilliseconds(::std::chrono::milliseconds(300))) return true;
 
     LineFollowAtVelocity(0.9,
-                         control_loops::drivetrain::SelectionHint_MID_SHIP);
+                         control_loops::drivetrain::SelectionHint::MID_SHIP);
     SplineHandle spline2 = PlanSpline(
         BindIsLeft(AutonomousSplines::SecondCargoShipBayToHP, is_left),
         SplineDirection::kForward);
@@ -331,7 +331,7 @@
     if (!spline3.WaitForSplineDistanceRemaining(0.7)) return true;
     // Line follow in to the second disc.
     LineFollowAtVelocity(-0.7,
-                         control_loops::drivetrain::SelectionHint_FAR_SHIP);
+                         control_loops::drivetrain::SelectionHint::FAR_SHIP);
     AOS_LOG(INFO, "Drawing in disc 2 %f\n",
             ::aos::time::DurationInSeconds(monotonic_now() - start_time));
     if (!WaitForDriveYCloseToZero(1.2)) return true;
@@ -346,7 +346,7 @@
     AOS_LOG(INFO, "Backing up %f\n",
             ::aos::time::DurationInSeconds(monotonic_now() - start_time));
     LineFollowAtVelocity(0.9,
-                         control_loops::drivetrain::SelectionHint_FAR_SHIP);
+                         control_loops::drivetrain::SelectionHint::FAR_SHIP);
     if (!WaitForMilliseconds(::std::chrono::milliseconds(400))) return true;
   } else {
     // Grab the disk, wait until we have vacuum, then jump
diff --git a/y2019/control_loops/drivetrain/localized_drivetrain_test.cc b/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
index 3a6bec7..24dd6c2 100644
--- a/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
+++ b/y2019/control_loops/drivetrain/localized_drivetrain_test.cc
@@ -212,7 +212,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -233,7 +233,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -253,7 +253,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -275,7 +275,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -304,7 +304,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -340,7 +340,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_MOTION_PROFILE);
+        frc971::control_loops::drivetrain::ControllerType::MOTION_PROFILE);
     drivetrain_builder.add_left_goal(-1.0);
     drivetrain_builder.add_right_goal(1.0);
 
@@ -368,7 +368,7 @@
 
     Goal::Builder drivetrain_builder = builder.MakeBuilder<Goal>();
     drivetrain_builder.add_controller_type(
-        frc971::control_loops::drivetrain::ControllerType_LINE_FOLLOWER);
+        frc971::control_loops::drivetrain::ControllerType::LINE_FOLLOWER);
     drivetrain_builder.add_throttle(0.5);
 
     EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
diff --git a/y2019/control_loops/drivetrain/localizer_test.cc b/y2019/control_loops/drivetrain/localizer_test.cc
index fbce275..319065e 100644
--- a/y2019/control_loops/drivetrain/localizer_test.cc
+++ b/y2019/control_loops/drivetrain/localizer_test.cc
@@ -178,7 +178,7 @@
 
       goal_builder.add_spline(spline_offset);
       goal_builder.add_controller_type(
-          frc971::control_loops::drivetrain::ControllerType_SPLINE_FOLLOWER);
+          frc971::control_loops::drivetrain::ControllerType::SPLINE_FOLLOWER);
       goal_builder.add_spline_handle(1);
 
       fbb.Finish(goal_builder.Finish());
@@ -211,7 +211,7 @@
           status(fbb.Release());
 
       if (status.message().trajectory_logging()->planning_state() ==
-          ::frc971::control_loops::drivetrain::PlanningState_PLANNED) {
+          ::frc971::control_loops::drivetrain::PlanningState::PLANNED) {
         break;
       }
     }
diff --git a/y2019/control_loops/drivetrain/target_selector.cc b/y2019/control_loops/drivetrain/target_selector.cc
index 7f2259d..87115ae 100644
--- a/y2019/control_loops/drivetrain/target_selector.cc
+++ b/y2019/control_loops/drivetrain/target_selector.cc
@@ -28,9 +28,8 @@
   if (hint_fetcher_.Fetch()) {
     VLOG(1) << "selector_hint: " << aos::FlatbufferToJson(hint_fetcher_.get());
     // suggested_target is unsigned so we don't check for >= 0.
-    if (hint_fetcher_->suggested_target() < 4) {
-      target_hint_ =
-          static_cast<SelectionHint>(hint_fetcher_->suggested_target());
+    if (hint_fetcher_->suggested_target() < drivetrain::SelectionHint::MAX) {
+      target_hint_ = hint_fetcher_->suggested_target();
     } else {
       AOS_LOG(ERROR, "Got invalid suggested target.\n");
     }
@@ -64,30 +63,30 @@
       continue;
     }
     switch (target_hint_) {
-      case SelectionHint::kNearShip:
+      case drivetrain::SelectionHint::NEAR_SHIP:
         if (view.target->target_type() !=
             Target::TargetType::kNearSideCargoBay) {
           continue;
         }
         break;
-      case SelectionHint::kMidShip:
+      case drivetrain::SelectionHint::MID_SHIP:
         if (view.target->target_type() !=
             Target::TargetType::kMidSideCargoBay) {
           continue;
         }
         break;
-      case SelectionHint::kFarShip:
+      case drivetrain::SelectionHint::FAR_SHIP:
         if (view.target->target_type() !=
             Target::TargetType::kFarSideCargoBay) {
           continue;
         }
         break;
-      case SelectionHint::kFarRocket:
+      case drivetrain::SelectionHint::FAR_ROCKET:
         if (view.target->target_type() != Target::TargetType::kFarRocket) {
           continue;
         }
         break;
-      case SelectionHint::kNone:
+      case drivetrain::SelectionHint::NONE:
       default:
         break;
     }
diff --git a/y2019/control_loops/drivetrain/target_selector.fbs b/y2019/control_loops/drivetrain/target_selector.fbs
index d264992..f7a3291 100644
--- a/y2019/control_loops/drivetrain/target_selector.fbs
+++ b/y2019/control_loops/drivetrain/target_selector.fbs
@@ -1,7 +1,7 @@
 namespace y2019.control_loops.drivetrain;
 
 // These should match the SelectionHint enum in target_selector.h.
-enum SelectionHint : byte {
+enum SelectionHint : ubyte {
   // No selection, we should just default to whatever.
   NONE,
   // Near, middle, and far targets.
diff --git a/y2019/control_loops/drivetrain/target_selector.h b/y2019/control_loops/drivetrain/target_selector.h
index e75e122..4ab65ef 100644
--- a/y2019/control_loops/drivetrain/target_selector.h
+++ b/y2019/control_loops/drivetrain/target_selector.h
@@ -29,16 +29,6 @@
   typedef TypedCamera<y2019::constants::Field::kNumTargets,
                       /*num_obstacles=*/0, double> FakeCamera;
 
-  enum class SelectionHint {
-    // No hint
-    kNone = 0,
-    // Cargo ship bays
-    kNearShip = 1,
-    kMidShip = 2,
-    kFarShip = 3,
-    kFarRocket = 4,
-  };
-
   TargetSelector(::aos::EventLoop *event_loop);
 
   bool UpdateSelection(const ::Eigen::Matrix<double, 5, 1> &state,
@@ -72,7 +62,7 @@
 
   // Whether we are currently in ball mode.
   bool ball_mode_ = false;
-  SelectionHint target_hint_ = SelectionHint::kNone;
+  drivetrain::SelectionHint target_hint_ = drivetrain::SelectionHint::NONE;
 };
 
 }  // namespace control_loops
diff --git a/y2019/control_loops/drivetrain/target_selector_test.cc b/y2019/control_loops/drivetrain/target_selector_test.cc
index 90ca830..43a0456 100644
--- a/y2019/control_loops/drivetrain/target_selector_test.cc
+++ b/y2019/control_loops/drivetrain/target_selector_test.cc
@@ -118,7 +118,7 @@
         // targets:
         TestParams{(State() << 0.0, 0.0, 0.0, 1.0, 1.0).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    1.0,
                    false,
                    {},
@@ -127,43 +127,43 @@
         // anything.
         TestParams{(State() << 4.0, 2.0, M_PI, 0.05, 0.05).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    0.05,
                    false,
                    {},
                    /*expected_radius=*/0.0},
         TestParams{(State() << 4.0, 2.0, M_PI, -0.05, -0.05).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    -0.05,
                    false,
                    {},
                    /*expected_radius=*/0.0},
         TestParams{(State() << 4.0, 2.0, M_PI, 0.5, 0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, 1.0,
                    true, HPSlotLeft(), /*expected_radius=*/0.0},
         // Put ourselves between the rocket and cargo ship; we should see the
         // hatches driving one direction and the near cargo ship port the other.
         // We also command a speed opposite the current direction of motion and
         // confirm that that behaves as expected.
         TestParams{(State() << 6.0, 2.0, -M_PI_2, -0.5, -0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, 1.0,
                    true, CargoNearLeft(), /*expected_radius=*/HatchRadius()},
         TestParams{(State() << 6.0, 2.0, M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, -1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, -1.0,
                    true, CargoNearLeft(), /*expected_radius=*/HatchRadius()},
         TestParams{(State() << 6.0, 2.0, -M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, -1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, -1.0,
                    true, RocketHatchFarLeft(),
                    /*expected_radius=*/HatchRadius()},
         TestParams{(State() << 6.0, 2.0, M_PI_2, -0.5, -0.5).finished(),
-                   /*ball_mode=*/false, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/false, drivetrain::SelectionHint::NONE, 1.0,
                    true, RocketHatchFarLeft(),
                    /*expected_radius=*/HatchRadius()},
         // And we shouldn't see anything spinning in place:
         TestParams{(State() << 6.0, 2.0, M_PI_2, -0.5, 0.5).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    0.0,
                    false,
                    {},
@@ -171,7 +171,7 @@
         // Drive backwards off the field--we should not see anything.
         TestParams{(State() << -0.1, 0.0, 0.0, -0.5, -0.5).finished(),
                    /*ball_mode=*/false,
-                   drivetrain::SelectionHint_NONE,
+                   drivetrain::SelectionHint::NONE,
                    -1.0,
                    false,
                    {},
@@ -179,12 +179,12 @@
         // In ball mode, we should be able to see the portal, and get zero
         // radius.
         TestParams{(State() << 6.0, 2.0, M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/true, drivetrain::SelectionHint_NONE, 1.0,
+                   /*ball_mode=*/true, drivetrain::SelectionHint::NONE, 1.0,
                    true, RocketPortal(),
                    /*expected_radius=*/0.0},
         // Reversing direction should get cargo ship with zero radius.
         TestParams{(State() << 6.0, 2.0, M_PI_2, 0.5, 0.5).finished(),
-                   /*ball_mode=*/true, drivetrain::SelectionHint_NONE, -1.0,
+                   /*ball_mode=*/true, drivetrain::SelectionHint::NONE, -1.0,
                    true, CargoNearLeft(),
                    /*expected_radius=*/0.0}));
 
diff --git a/y2019/joystick_reader.cc b/y2019/joystick_reader.cc
index 427fc6d..0f37112 100644
--- a/y2019/joystick_reader.cc
+++ b/y2019/joystick_reader.cc
@@ -258,28 +258,28 @@
                   .MakeBuilder<control_loops::drivetrain::TargetSelectorHint>();
       if (data.IsPressed(kNearCargoHint)) {
         target_selector_hint_builder.add_suggested_target(
-            control_loops::drivetrain::SelectionHint_NEAR_SHIP);
+            control_loops::drivetrain::SelectionHint::NEAR_SHIP);
       } else if (data.IsPressed(kMidCargoHint)) {
         target_selector_hint_builder.add_suggested_target(
-            control_loops::drivetrain::SelectionHint_MID_SHIP);
+            control_loops::drivetrain::SelectionHint::MID_SHIP);
       } else if (data.IsPressed(kFarCargoHint)) {
         target_selector_hint_builder.add_suggested_target(
-            control_loops::drivetrain::SelectionHint_FAR_SHIP);
+            control_loops::drivetrain::SelectionHint::FAR_SHIP);
       } else {
         const double cargo_joy_y = data.GetAxis(kCargoSelectorY);
         const double cargo_joy_x = data.GetAxis(kCargoSelectorX);
         if (cargo_joy_y > 0.5) {
           target_selector_hint_builder.add_suggested_target(
-            control_loops::drivetrain::SelectionHint_NEAR_SHIP);
+            control_loops::drivetrain::SelectionHint::NEAR_SHIP);
         } else if (cargo_joy_y < -0.5) {
           target_selector_hint_builder.add_suggested_target(
-              control_loops::drivetrain::SelectionHint_FAR_SHIP);
+              control_loops::drivetrain::SelectionHint::FAR_SHIP);
         } else if (::std::abs(cargo_joy_x) > 0.5) {
           target_selector_hint_builder.add_suggested_target(
-            control_loops::drivetrain::SelectionHint_MID_SHIP);
+            control_loops::drivetrain::SelectionHint::MID_SHIP);
         } else {
           target_selector_hint_builder.add_suggested_target(
-            control_loops::drivetrain::SelectionHint_NONE);
+            control_loops::drivetrain::SelectionHint::NONE);
         }
       }
       if (!builder.Send(target_selector_hint_builder.Finish())) {