Convert aos over to flatbuffers

Everything builds, and all the tests pass.  I suspect that some entries
are missing from the config files, but those will be found pretty
quickly on startup.

There is no logging or live introspection of queue messages.

Change-Id: I496ee01ed68f202c7851bed7e8786cee30df29f5
diff --git a/y2019/control_loops/drivetrain/localizer_test.cc b/y2019/control_loops/drivetrain/localizer_test.cc
index 1950468..d9a55f6 100644
--- a/y2019/control_loops/drivetrain/localizer_test.cc
+++ b/y2019/control_loops/drivetrain/localizer_test.cc
@@ -141,26 +141,75 @@
   }
 
   void SetUp() {
-    ::frc971::control_loops::DrivetrainQueue::Goal goal;
-    goal.controller_type = 2;
-    goal.spline.spline_idx = 1;
-    goal.spline.spline_count = 1;
-    goal.spline_handle = 1;
-    ::std::copy(GetParam().control_pts_x.begin(),
-                GetParam().control_pts_x.end(), goal.spline.spline_x.begin());
-    ::std::copy(GetParam().control_pts_y.begin(),
-                GetParam().control_pts_y.end(), goal.spline.spline_y.begin());
-    spline_drivetrain_.SetGoal(goal);
+    flatbuffers::DetachedBuffer goal_buffer;
+    {
+      flatbuffers::FlatBufferBuilder fbb;
+
+      flatbuffers::Offset<flatbuffers::Vector<float>> spline_x_offset =
+          fbb.CreateVector<float>(GetParam().control_pts_x.begin(),
+                                  GetParam().control_pts_x.size());
+
+      flatbuffers::Offset<flatbuffers::Vector<float>> spline_y_offset =
+          fbb.CreateVector<float>(GetParam().control_pts_y.begin(),
+                                  GetParam().control_pts_y.size());
+
+      frc971::MultiSpline::Builder multispline_builder(fbb);
+
+      multispline_builder.add_spline_count(1);
+      multispline_builder.add_spline_x(spline_x_offset);
+      multispline_builder.add_spline_y(spline_y_offset);
+
+      flatbuffers::Offset<frc971::MultiSpline> multispline_offset =
+          multispline_builder.Finish();
+
+      frc971::control_loops::drivetrain::SplineGoal::Builder spline_builder(
+          fbb);
+
+      spline_builder.add_spline_idx(1);
+      spline_builder.add_spline(multispline_offset);
+
+      flatbuffers::Offset<frc971::control_loops::drivetrain::SplineGoal>
+          spline_offset = spline_builder.Finish();
+
+      frc971::control_loops::drivetrain::Goal::Builder goal_builder(fbb);
+
+      goal_builder.add_spline(spline_offset);
+      goal_builder.add_controller_type(
+          frc971::control_loops::drivetrain::ControllerType_SPLINE_FOLLOWER);
+      goal_builder.add_spline_handle(1);
+
+      fbb.Finish(goal_builder.Finish());
+
+      goal_buffer = fbb.Release();
+    }
+    aos::FlatbufferDetachedBuffer<frc971::control_loops::drivetrain::Goal> goal(
+        std::move(goal_buffer));
+
+    spline_drivetrain_.SetGoal(&goal.message());
 
     // Let the spline drivetrain compute the spline.
-    ::frc971::control_loops::DrivetrainQueue::Status status;
-    do {
+    while (true) {
       ::std::this_thread::sleep_for(::std::chrono::milliseconds(5));
-      spline_drivetrain_.PopulateStatus(&status);
-    } while (status.trajectory_logging.planning_state !=
-             (int8_t)::frc971::control_loops::drivetrain::SplineDrivetrain::
-                 PlanState::kPlannedTrajectory);
-    spline_drivetrain_.SetGoal(goal);
+
+      flatbuffers::FlatBufferBuilder fbb;
+
+      flatbuffers::Offset<frc971::control_loops::drivetrain::TrajectoryLogging>
+          trajectory_logging_offset =
+              spline_drivetrain_.MakeTrajectoryLogging(&fbb);
+
+      ::frc971::control_loops::drivetrain::Status::Builder status_builder(fbb);
+      status_builder.add_trajectory_logging(trajectory_logging_offset);
+      spline_drivetrain_.PopulateStatus(&status_builder);
+      fbb.Finish(status_builder.Finish());
+      aos::FlatbufferDetachedBuffer<::frc971::control_loops::drivetrain::Status>
+          status(fbb.Release());
+
+      if (status.message().trajectory_logging()->planning_state() ==
+          ::frc971::control_loops::drivetrain::PlanningState_PLANNED) {
+        break;
+      }
+    }
+    spline_drivetrain_.SetGoal(&goal.message());
   }
 
   void TearDown() {
@@ -373,7 +422,7 @@
 
     spline_drivetrain_.Update(true, known_state);
 
-    ::frc971::control_loops::DrivetrainQueue::Output output;
+    ::frc971::control_loops::drivetrain::OutputT output;
     output.left_voltage = 0;
     output.right_voltage = 0;
     spline_drivetrain_.SetOutput(&output);