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(