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/y2012/control_loops/accessories/BUILD b/y2012/control_loops/accessories/BUILD
index 63f02dd..65a6d1d 100644
--- a/y2012/control_loops/accessories/BUILD
+++ b/y2012/control_loops/accessories/BUILD
@@ -1,25 +1,23 @@
-package(default_visibility = ['//visibility:public'])
+package(default_visibility = ["//visibility:public"])
 
-load('//aos/build:queues.bzl', 'queue_library')
+load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library")
 
 cc_binary(
-  name = 'accessories',
-  srcs = [
-    'accessories.cc',
-  ],
-  deps = [
-    ':accessories_queue',
-    '//aos:init',
-    '//aos/controls:control_loop',
-  ],
+    name = "accessories",
+    srcs = [
+        "accessories.cc",
+    ],
+    deps = [
+        ":accessories_fbs",
+        "//aos:init",
+        "//aos/controls:control_loop",
+        "//aos/controls:control_loop_fbs",
+    ],
 )
 
-queue_library(
-  name = 'accessories_queue',
-  srcs = [
-    'accessories.q',
-  ],
-  deps = [
-    '//aos/controls:control_loop_queues',
-  ],
+flatbuffer_cc_library(
+    name = "accessories_fbs",
+    srcs = [
+        "accessories.fbs",
+    ],
 )
diff --git a/y2012/control_loops/accessories/accessories.cc b/y2012/control_loops/accessories/accessories.cc
index 9d96840..726aede 100644
--- a/y2012/control_loops/accessories/accessories.cc
+++ b/y2012/control_loops/accessories/accessories.cc
@@ -1,28 +1,43 @@
-#include "y2012/control_loops/accessories/accessories.q.h"
+#include "y2012/control_loops/accessories/accessories_generated.h"
 
+#include "aos/events/shm_event_loop.h"
 #include "aos/init.h"
 #include "aos/controls/control_loop.h"
+#include "aos/controls/control_loops_generated.h"
 
 namespace y2012 {
 namespace control_loops {
 namespace accessories {
 
 class AccessoriesLoop : public ::aos::controls::ControlLoop<
-                            ::y2012::control_loops::AccessoriesQueue> {
+                            Message, ::aos::control_loops::Position,
+                            ::aos::control_loops::Status, Message> {
  public:
   explicit AccessoriesLoop(
       ::aos::EventLoop *event_loop,
       const ::std::string &name = ".y2012.control_loops.accessories_queue")
-      : ::aos::controls::ControlLoop<::y2012::control_loops::AccessoriesQueue>(
+      : ::aos::controls::ControlLoop<Message, ::aos::control_loops::Position,
+                                     ::aos::control_loops::Status, Message>(
             event_loop, name) {}
 
   void RunIteration(
-      const ::y2012::control_loops::AccessoriesQueue::Message *goal,
+      const Message *goal,
       const ::aos::control_loops::Position * /*position*/,
-      ::y2012::control_loops::AccessoriesQueue::Message *output,
-      ::aos::control_loops::Status * /*status*/) override {
+      ::aos::Sender<Message>::Builder *output,
+      ::aos::Sender<::aos::control_loops::Status>::Builder * /*status*/) override {
     if (output) {
-      *output = *goal;
+      //*output = *goal;
+      Message::Builder output_builder = output->MakeBuilder<Message>();
+      flatbuffers::Offset<flatbuffers::Vector<uint8_t>> solenoid_offset =
+          output->fbb()->template CreateVector<uint8_t>(
+              goal->solenoids()->data(), 3);
+      output_builder.add_solenoids(solenoid_offset);
+      flatbuffers::Offset<flatbuffers::Vector<double>> stick_offset =
+          output->fbb()->template CreateVector<double>(
+              goal->sticks()->data(), 2);
+      output_builder.add_sticks(stick_offset);
+
+      output_builder.Finish();
     }
   }
 };
@@ -34,7 +49,10 @@
 int main() {
   ::aos::InitNRT(true);
 
-  ::aos::ShmEventLoop event_loop;
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("config.json");
+
+  ::aos::ShmEventLoop event_loop(&config.message());
   ::y2012::control_loops::accessories::AccessoriesLoop accessories(&event_loop);
 
   event_loop.Run();
diff --git a/y2012/control_loops/accessories/accessories.fbs b/y2012/control_loops/accessories/accessories.fbs
new file mode 100644
index 0000000..1174b55
--- /dev/null
+++ b/y2012/control_loops/accessories/accessories.fbs
@@ -0,0 +1,8 @@
+namespace y2012.control_loops.accessories;
+
+table Message {
+  solenoids:[bool]; // Exactly 3 values
+  sticks:[double]; // Exactly 2 values
+}
+
+root_type Message;
diff --git a/y2012/control_loops/accessories/accessories.q b/y2012/control_loops/accessories/accessories.q
deleted file mode 100644
index 6427d49..0000000
--- a/y2012/control_loops/accessories/accessories.q
+++ /dev/null
@@ -1,17 +0,0 @@
-package y2012.control_loops;
-
-import "aos/controls/control_loops.q";
-
-// Published on ".y2012.control_loops.accessories_queue"
-queue_group AccessoriesQueue {
-  implements aos.control_loops.ControlLoop;
-  message Message {
-    bool[3] solenoids;
-    double[2] sticks;
-  };
-
-  queue Message goal;
-  queue .aos.control_loops.Position position;
-  queue Message output;
-  queue .aos.control_loops.Status status;
-};
diff --git a/y2012/control_loops/drivetrain/BUILD b/y2012/control_loops/drivetrain/BUILD
index 3be1e9a..35d596a 100644
--- a/y2012/control_loops/drivetrain/BUILD
+++ b/y2012/control_loops/drivetrain/BUILD
@@ -1,7 +1,5 @@
 package(default_visibility = ["//visibility:public"])
 
-load("//aos/build:queues.bzl", "queue_library")
-
 genrule(
     name = "genrule_drivetrain",
     outs = [
@@ -78,7 +76,7 @@
     deps = [
         ":drivetrain_base",
         "//aos:init",
-        "//aos/events:shm-event-loop",
+        "//aos/events:shm_event_loop",
         "//frc971/control_loops/drivetrain:drivetrain_lib",
     ],
 )
diff --git a/y2012/control_loops/drivetrain/drivetrain_main.cc b/y2012/control_loops/drivetrain/drivetrain_main.cc
index 75153cd..735f13f 100644
--- a/y2012/control_loops/drivetrain/drivetrain_main.cc
+++ b/y2012/control_loops/drivetrain/drivetrain_main.cc
@@ -1,6 +1,6 @@
 #include "aos/init.h"
 
-#include "aos/events/shm-event-loop.h"
+#include "aos/events/shm_event_loop.h"
 #include "frc971/control_loops/drivetrain/drivetrain.h"
 #include "y2012/control_loops/drivetrain/drivetrain_base.h"
 
@@ -9,7 +9,10 @@
 int main() {
   ::aos::InitNRT(true);
 
-  ::aos::ShmEventLoop event_loop;
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("config.json");
+
+  ::aos::ShmEventLoop event_loop(&config.message());
   ::frc971::control_loops::drivetrain::DeadReckonEkf localizer(
       &event_loop, ::y2012::control_loops::drivetrain::GetDrivetrainConfig());
   DrivetrainLoop drivetrain(