Load spline jsons for autonomous

Change-Id: I70f495255210eb5c9cfe041332ee8723cfcf1e2f
diff --git a/y2020/BUILD b/y2020/BUILD
index a759681..63034ae 100644
--- a/y2020/BUILD
+++ b/y2020/BUILD
@@ -11,6 +11,9 @@
     data = [
         ":config",
     ],
+    dirs = [
+      "//y2020/actors:splines"
+    ],
     start_binaries = [
         "//aos/events/logging:logger_main",
         ":joystick_reader",
diff --git a/y2020/actors/BUILD b/y2020/actors/BUILD
index fee0196..434b8db 100644
--- a/y2020/actors/BUILD
+++ b/y2020/actors/BUILD
@@ -1,3 +1,5 @@
+load("//frc971/downloader:downloader.bzl", "aos_downloader_dir")
+
 filegroup(
     name = "binaries.stripped",
     srcs = [
@@ -14,6 +16,24 @@
     visibility = ["//visibility:public"],
 )
 
+filegroup(
+    name = "spline_jsons",
+    srcs = glob([
+        "splines/*.json"
+        ]),
+    visibility = ["//visibility:public"],
+)
+
+aos_downloader_dir(
+    name = "splines",
+    srcs = [
+        ":spline_jsons",
+    ],
+    dir = "splines",
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+)
+
 cc_library(
     name = "autonomous_action_lib",
     srcs = [
diff --git a/y2020/actors/auto_splines.h b/y2020/actors/auto_splines.h
index 96f055f..5ea1748 100644
--- a/y2020/actors/auto_splines.h
+++ b/y2020/actors/auto_splines.h
@@ -2,6 +2,7 @@
 #define y2020_ACTORS_AUTO_SPLINES_H_
 
 #include "aos/events/event_loop.h"
+#include "aos/flatbuffer_merge.h"
 #include "aos/robot_state/joystick_state_generated.h"
 #include "frc971/control_loops/control_loops_generated.h"
 #include "frc971/control_loops/drivetrain/drivetrain_goal_generated.h"
@@ -17,11 +18,24 @@
 
 class AutonomousSplines {
  public:
+  AutonomousSplines()
+      : test_spline_(aos::JsonFileToFlatbuffer<frc971::MultiSpline>(
+            "splines/test_spline.json")) {}
+
   static flatbuffers::Offset<frc971::MultiSpline> BasicSSpline(
       aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
       aos::Alliance alliance);
   static flatbuffers::Offset<frc971::MultiSpline> StraightLine(
       aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder);
+
+  flatbuffers::Offset<frc971::MultiSpline> TestSpline(
+      aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder) {
+    return aos::CopyFlatBuffer<frc971::MultiSpline>(test_spline_,
+                                                    builder->fbb());
+  }
+
+ private:
+  aos::FlatbufferDetachedBuffer<frc971::MultiSpline> test_spline_;
 };
 
 }  // namespace actors
diff --git a/y2020/actors/autonomous_actor.cc b/y2020/actors/autonomous_actor.cc
index fdf7ada..752ba95 100644
--- a/y2020/actors/autonomous_actor.cc
+++ b/y2020/actors/autonomous_actor.cc
@@ -8,8 +8,8 @@
 #include "aos/logging/logging.h"
 #include "aos/util/math.h"
 #include "frc971/control_loops/drivetrain/localizer_generated.h"
-#include "y2020/control_loops/drivetrain/drivetrain_base.h"
 #include "y2020/actors/auto_splines.h"
+#include "y2020/control_loops/drivetrain/drivetrain_base.h"
 
 DEFINE_bool(spline_auto, true, "If true, define a spline autonomous mode");
 
@@ -24,11 +24,13 @@
 AutonomousActor::AutonomousActor(::aos::EventLoop *event_loop)
     : frc971::autonomous::BaseAutonomousActor(
           event_loop, control_loops::drivetrain::GetDrivetrainConfig()),
-      localizer_control_sender_(event_loop->MakeSender<
-          ::frc971::control_loops::drivetrain::LocalizerControl>(
-          "/drivetrain")),
+      localizer_control_sender_(
+          event_loop->MakeSender<
+              ::frc971::control_loops::drivetrain::LocalizerControl>(
+              "/drivetrain")),
       joystick_state_fetcher_(
-          event_loop->MakeFetcher<aos::JoystickState>("/aos")) {
+          event_loop->MakeFetcher<aos::JoystickState>("/aos")),
+      auto_splines_() {
   set_max_drivetrain_voltage(2.0);
 }
 
@@ -84,9 +86,10 @@
 }
 
 void AutonomousActor::SplineAuto() {
-  SplineHandle spline1 = PlanSpline(std::bind(AutonomousSplines::BasicSSpline,
-                                              std::placeholders::_1, alliance_),
-                                    SplineDirection::kForward);
+  SplineHandle spline1 = PlanSpline(
+      [this](aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder
+                 *builder) { return auto_splines_.TestSpline(builder); },
+      SplineDirection::kForward);
 
   if (!spline1.WaitForPlan()) return;
   spline1.Start();
diff --git a/y2020/actors/autonomous_actor.h b/y2020/actors/autonomous_actor.h
index 4ad04d2..a58e3f9 100644
--- a/y2020/actors/autonomous_actor.h
+++ b/y2020/actors/autonomous_actor.h
@@ -7,6 +7,7 @@
 #include "frc971/control_loops/control_loops_generated.h"
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
 #include "frc971/control_loops/drivetrain/localizer_generated.h"
+#include "y2020/actors/auto_splines.h"
 
 namespace y2020 {
 namespace actors {
@@ -27,6 +28,7 @@
       localizer_control_sender_;
   aos::Fetcher<aos::JoystickState> joystick_state_fetcher_;
   aos::Alliance alliance_ = aos::Alliance::kInvalid;
+  AutonomousSplines auto_splines_;
 };
 
 }  // namespace actors
diff --git a/y2020/actors/splines/left_curve.json b/y2020/actors/splines/left_curve.json
new file mode 100644
index 0000000..1b54455
--- /dev/null
+++ b/y2020/actors/splines/left_curve.json
@@ -0,0 +1 @@
+{"spline_count": 1, "spline_x": [-5.265658676891484, -4.506548152324582, -3.9768989099928174, -3.455392453356026, -2.7826532359982323, -2.197294440050362], "spline_y": [-0.18454159151187616, -0.14940533686866445, -0.23880801776223934, -0.23880801776223934, 0.055956793313775184, 0.5131957091906839], "constraints": [{"constraint_type": "LONGITUDINAL_ACCELERATION", "value": 3}, {"constraint_type": "LATERAL_ACCELERATION", "value": 2}, {"constraint_type": "VOLTAGE", "value": 10}]}
\ No newline at end of file
diff --git a/y2020/actors/splines/test_spline.json b/y2020/actors/splines/test_spline.json
new file mode 100644
index 0000000..733d516
--- /dev/null
+++ b/y2020/actors/splines/test_spline.json
@@ -0,0 +1 @@
+{"spline_count": 1, "spline_x": [0, 0.4, 0.4, 0.6, 0.6, 1.0], "spline_y": [0, 0, 0.05, 0.1, 0.15, 0.15], "constraints": [{"constraint_type": "LONGITUDINAL_ACCELERATION", "value": 1}, {"constraint_type": "LATERAL_ACCELERATION", "value": 1}, {"constraint_type": "VOLTAGE", "value": 2}]}