Change CopyPosition to use static flatbuffers

This also changes previous years code to use static flatbuffers when
sending position while using CopyPosition.

Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: I07c523a882dfd6fa7f6fb0cbc6eb807f3f04fa88
diff --git a/y2022/wpilib_interface.cc b/y2022/wpilib_interface.cc
index 5b3cd96..55cf510 100644
--- a/y2022/wpilib_interface.cc
+++ b/y2022/wpilib_interface.cc
@@ -55,7 +55,7 @@
 #include "y2022/control_loops/superstructure/led_indicator.h"
 #include "y2022/control_loops/superstructure/superstructure_can_position_generated.h"
 #include "y2022/control_loops/superstructure/superstructure_output_generated.h"
-#include "y2022/control_loops/superstructure/superstructure_position_generated.h"
+#include "y2022/control_loops/superstructure/superstructure_position_static.h"
 
 using ::aos::monotonic_clock;
 using ::y2022::constants::Values;
@@ -167,7 +167,7 @@
             event_loop->MakeSender<::frc971::autonomous::AutonomousMode>(
                 "/autonomous")),
         superstructure_position_sender_(
-            event_loop->MakeSender<superstructure::Position>(
+            event_loop->MakeSender<superstructure::PositionStatic>(
                 "/superstructure")),
         drivetrain_position_sender_(
             event_loop
@@ -227,74 +227,44 @@
   void RunIteration() override {
     superstructure_reading_->Set(true);
     {
-      auto builder = superstructure_position_sender_.MakeBuilder();
+      aos::Sender<superstructure::PositionStatic>::StaticBuilder builder =
+          superstructure_position_sender_.MakeStaticBuilder();
 
-      frc971::PotAndAbsolutePositionT catapult;
-      CopyPosition(catapult_encoder_, &catapult,
+      CopyPosition(catapult_encoder_, builder->add_catapult(),
                    Values::kCatapultEncoderCountsPerRevolution(),
                    Values::kCatapultEncoderRatio(), catapult_pot_translate,
                    false, values_->catapult.potentiometer_offset);
-      flatbuffers::Offset<frc971::PotAndAbsolutePosition> catapult_offset =
-          frc971::PotAndAbsolutePosition::Pack(*builder.fbb(), &catapult);
 
-      frc971::RelativePositionT climber;
-      CopyPosition(*climber_potentiometer_, &climber, climber_pot_translate,
-                   false, values_->climber.potentiometer_offset);
-      flatbuffers::Offset<frc971::RelativePosition> climber_offset =
-          frc971::RelativePosition::Pack(*builder.fbb(), &climber);
+      CopyPosition(*climber_potentiometer_, builder->add_climber(),
+                   climber_pot_translate, false,
+                   values_->climber.potentiometer_offset);
 
-      frc971::RelativePositionT flipper_arm_left;
-      CopyPosition(*flipper_arm_left_potentiometer_, &flipper_arm_left,
-                   flipper_arms_pot_translate, false,
-                   values_->flipper_arm_left.potentiometer_offset);
+      CopyPosition(*flipper_arm_left_potentiometer_,
+                   builder->add_flipper_arm_left(), flipper_arms_pot_translate,
+                   false, values_->flipper_arm_left.potentiometer_offset);
 
-      frc971::RelativePositionT flipper_arm_right;
-      CopyPosition(*flipper_arm_right_potentiometer_, &flipper_arm_right,
-                   flipper_arms_pot_translate, true,
-                   values_->flipper_arm_right.potentiometer_offset);
+      CopyPosition(*flipper_arm_right_potentiometer_,
+                   builder->add_flipper_arm_right(), flipper_arms_pot_translate,
+                   true, values_->flipper_arm_right.potentiometer_offset);
 
       // Intake
-      frc971::PotAndAbsolutePositionT intake_front;
-      CopyPosition(intake_encoder_front_, &intake_front,
+      CopyPosition(intake_encoder_front_, builder->add_intake_front(),
                    Values::kIntakeEncoderCountsPerRevolution(),
                    Values::kIntakeEncoderRatio(), intake_pot_translate, true,
                    values_->intake_front.potentiometer_offset);
-      frc971::PotAndAbsolutePositionT intake_back;
-      CopyPosition(intake_encoder_back_, &intake_back,
+      CopyPosition(intake_encoder_back_, builder->add_intake_back(),
                    Values::kIntakeEncoderCountsPerRevolution(),
                    Values::kIntakeEncoderRatio(), intake_pot_translate, true,
                    values_->intake_back.potentiometer_offset);
-      frc971::PotAndAbsolutePositionT turret;
-      CopyPosition(turret_encoder_, &turret,
+      CopyPosition(turret_encoder_, builder->add_turret(),
                    Values::kTurretEncoderCountsPerRevolution(),
                    Values::kTurretEncoderRatio(), turret_pot_translate, false,
                    values_->turret.potentiometer_offset);
 
-      flatbuffers::Offset<frc971::PotAndAbsolutePosition> intake_offset_front =
-          frc971::PotAndAbsolutePosition::Pack(*builder.fbb(), &intake_front);
-      flatbuffers::Offset<frc971::PotAndAbsolutePosition> intake_offset_back =
-          frc971::PotAndAbsolutePosition::Pack(*builder.fbb(), &intake_back);
-      flatbuffers::Offset<frc971::PotAndAbsolutePosition> turret_offset =
-          frc971::PotAndAbsolutePosition::Pack(*builder.fbb(), &turret);
-      flatbuffers::Offset<frc971::RelativePosition> flipper_arm_left_offset =
-          frc971::RelativePosition::Pack(*builder.fbb(), &flipper_arm_left);
-      flatbuffers::Offset<frc971::RelativePosition> flipper_arm_right_offset =
-          frc971::RelativePosition::Pack(*builder.fbb(), &flipper_arm_right);
-
-      superstructure::Position::Builder position_builder =
-          builder.MakeBuilder<superstructure::Position>();
-      position_builder.add_climber(climber_offset);
-      position_builder.add_flipper_arm_left(flipper_arm_left_offset);
-      position_builder.add_flipper_arm_right(flipper_arm_right_offset);
-      position_builder.add_intake_front(intake_offset_front);
-      position_builder.add_intake_back(intake_offset_back);
-      position_builder.add_turret(turret_offset);
-      position_builder.add_intake_beambreak_front(
-          intake_beambreak_front_->Get());
-      position_builder.add_intake_beambreak_back(intake_beambreak_back_->Get());
-      position_builder.add_turret_beambreak(turret_beambreak_->Get());
-      position_builder.add_catapult(catapult_offset);
-      builder.CheckOk(builder.Send(position_builder.Finish()));
+      builder->set_intake_beambreak_front(intake_beambreak_front_->Get());
+      builder->set_intake_beambreak_back(intake_beambreak_back_->Get());
+      builder->set_turret_beambreak(turret_beambreak_->Get());
+      builder.CheckOk(builder.Send());
     }
 
     {
@@ -454,7 +424,7 @@
   std::shared_ptr<const Values> values_;
 
   aos::Sender<frc971::autonomous::AutonomousMode> auto_mode_sender_;
-  aos::Sender<superstructure::Position> superstructure_position_sender_;
+  aos::Sender<superstructure::PositionStatic> superstructure_position_sender_;
   aos::Sender<frc971::control_loops::drivetrain::Position>
       drivetrain_position_sender_;
   ::aos::Sender<::frc971::sensors::GyroReading> gyro_sender_;