Add a drivetrain can position flatbuffer to frc971

Signed-off-by: Maxwell Henderson <maxwell.henderson@mailbox.org>
Change-Id: I73ab47b47327af0bf189554b030d5e5626f3df13
diff --git a/frc971/control_loops/drivetrain/BUILD b/frc971/control_loops/drivetrain/BUILD
index 86c1ec0..93b4a11 100644
--- a/frc971/control_loops/drivetrain/BUILD
+++ b/frc971/control_loops/drivetrain/BUILD
@@ -8,6 +8,12 @@
 package(default_visibility = ["//visibility:public"])
 
 flatbuffer_cc_library(
+    name = "drivetrain_can_position_fbs",
+    srcs = ["drivetrain_can_position.fbs"],
+    gen_reflections = 1,
+)
+
+flatbuffer_cc_library(
     name = "spline_goal_fbs",
     srcs = ["spline_goal.fbs"],
     gen_reflections = 1,
@@ -352,11 +358,11 @@
         ":drivetrain_config",
         ":drivetrain_states",
         ":gear",
+        ":spline_goal_fbs",
         "//aos:math",
-        "//frc971/control_loops:polytope",
         "//frc971/control_loops:coerce_goal",
         "//frc971/control_loops:control_loops_fbs",
-        ":spline_goal_fbs",
+        "//frc971/control_loops:polytope",
         "//frc971/control_loops:state_feedback_loop",
     ] + select({
         "@platforms//os:linux": [
@@ -364,8 +370,8 @@
             ":drivetrain_output_fbs",
             ":drivetrain_position_fbs",
             ":drivetrain_status_fbs",
-            "//frc971/input:robot_state_fbs",
             "//aos/util:log_interval",
+            "//frc971/input:robot_state_fbs",
         ],
         "@platforms//os:none": [
             ":drivetrain_goal_float_fbs",
@@ -469,8 +475,8 @@
         "//frc971/control_loops:control_loops_fbs",
         "//frc971/control_loops:state_feedback_loop",
         "//frc971/queues:gyro_fbs",
-        "//frc971/wpilib:imu_fbs",
         "//frc971/wpilib:imu_batch_fbs",
+        "//frc971/wpilib:imu_fbs",
         "//y2016:constants",
         "//y2016/control_loops/drivetrain:polydrivetrain_plants",
     ] + cpu_select({
@@ -498,17 +504,17 @@
     target_compatible_with = ["@platforms//os:linux"],
     deps = [
         ":drivetrain_config",
-        ":trajectory_generator",
-        ":drivetrain_lib",
-        ":localizer_fbs",
         ":drivetrain_goal_fbs",
-        ":drivetrain_status_fbs",
-        ":drivetrain_position_fbs",
+        ":drivetrain_lib",
         ":drivetrain_output_fbs",
+        ":drivetrain_position_fbs",
+        ":drivetrain_status_fbs",
         ":drivetrain_test_lib",
-        "//frc971/control_loops:control_loop_test",
+        ":localizer_fbs",
+        ":trajectory_generator",
         "//aos/events/logging:log_writer",
         "//aos/testing:googletest",
+        "//frc971/control_loops:control_loop_test",
         "//frc971/queues:gyro_fbs",
         "//frc971/wpilib:imu_fbs",
     ] + cpu_select({
@@ -633,8 +639,8 @@
     target_compatible_with = ["@platforms//os:linux"],
     deps = [
         ":distance_spline",
-        "//aos/testing:googletest",
         "//aos:flatbuffers",
+        "//aos/testing:googletest",
         "//aos/testing:test_shm",
         "@com_github_gflags_gflags//:gflags",
     ] + cpu_select({
@@ -712,8 +718,8 @@
     linkstatic = True,
     target_compatible_with = ["@platforms//os:linux"],
     deps = [
-        ":trajectory",
         ":drivetrain_test_lib",
+        ":trajectory",
         "//aos/testing:googletest",
         "//aos/testing:test_shm",
         "//y2016:constants",
diff --git a/frc971/control_loops/drivetrain/drivetrain_can_position.fbs b/frc971/control_loops/drivetrain/drivetrain_can_position.fbs
new file mode 100644
index 0000000..a44ef50
--- /dev/null
+++ b/frc971/control_loops/drivetrain/drivetrain_can_position.fbs
@@ -0,0 +1,42 @@
+namespace frc971.control_loops.drivetrain;
+
+table CANFalcon {
+  // The CAN id of the falcon
+  id:int (id: 0);
+
+  // In Amps
+  supply_current:float (id: 1);
+
+  // In Amps
+  // Stator current where positive current means torque is applied in
+  // the motor's forward direction as determined by its Inverted setting.
+  torque_current:float (id: 2);
+
+  // In Volts
+  supply_voltage:float (id: 3);
+
+  // In degrees Celsius
+  device_temp:float (id: 4);
+
+  // In meters traveled on the drivetrain
+  position:float (id: 5);
+
+  // Nominal range is -1 to 1, but can be -2 to +2
+  duty_cycle: float (id: 6);
+}
+
+// CAN readings from the CAN sensor reader loop
+table CANPosition {
+  falcons: [CANFalcon] (id: 0);
+
+  // The timestamp of the measurement on the canivore clock in nanoseconds
+  // This will have less jitter than the
+  // timestamp of the message being sent out.
+  timestamp:int64 (id: 1);
+
+  // The ctre::phoenix::StatusCode of the measurement
+  // Should be OK = 0
+  status:int (id: 2);
+}
+
+root_type CANPosition;