Add Encoder Fault Detector to frc971 Control Loop

The Encoder Fault Detector will take in a Position and CANPosition message to test whether either encoder or CAN encoders in a subsystem are faulted
Signed-off-by: Niko Sohmers <nikolai@sohmers.com>

Change-Id: I544772a809fbe4dc26dc0e37ef3c4b2ae4def75e
diff --git a/frc971/control_loops/BUILD b/frc971/control_loops/BUILD
index 925dd43..9986fef 100644
--- a/frc971/control_loops/BUILD
+++ b/frc971/control_loops/BUILD
@@ -176,6 +176,30 @@
 )
 
 cc_library(
+    name = "encoder_fault_detector",
+    srcs = ["encoder_fault_detector.cc"],
+    hdrs = ["encoder_fault_detector.h"],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = [
+        ":encoder_fault_status_fbs",
+        "//aos/containers:sized_array",
+        "//aos/time",
+        "//frc971/control_loops:can_talonfx_fbs",
+    ],
+)
+
+cc_test(
+    name = "encoder_fault_detector_test",
+    srcs = ["encoder_fault_detector_test.cc"],
+    target_compatible_with = ["@platforms//os:linux"],
+    deps = [
+        ":encoder_fault_detector",
+        "//aos:json_to_flatbuffer",
+        "//aos/testing:googletest",
+    ],
+)
+
+cc_library(
     name = "hall_effect_tracker",
     hdrs = [
         "hall_effect_tracker.h",
@@ -201,6 +225,20 @@
 )
 
 flatbuffer_ts_library(
+    name = "encoder_fault_status_ts_fbs",
+    srcs = [
+        "encoder_fault_status.fbs",
+    ],
+)
+
+static_flatbuffer(
+    name = "encoder_fault_status_fbs",
+    srcs = [
+        "encoder_fault_status.fbs",
+    ],
+)
+
+flatbuffer_ts_library(
     name = "can_talonfx_ts_fbs",
     srcs = [
         "can_talonfx.fbs",