Support static flatbuffers in ContinuousAbsoluteEncoderZeroingEstimator
Change-Id: Ic4dac2ff1084e987b2b20286018821c02967975b
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/aos/containers/error_list.h b/aos/containers/error_list.h
index 7ceb1fe..762d2ad 100644
--- a/aos/containers/error_list.h
+++ b/aos/containers/error_list.h
@@ -5,6 +5,7 @@
#include <algorithm>
+#include "absl/log/check.h"
#include "flatbuffers/buffer.h"
#include "flatbuffers/flatbuffer_builder.h"
#include "flatbuffers/vector.h"
@@ -128,7 +129,11 @@
flatbuffers::FlatBufferBuilder *fbb) const {
return fbb->CreateVector(array_.data(), array_.size());
}
-}; // namespace aos
+ template <typename StaticBuilder>
+ void ToStaticFlatbuffer(StaticBuilder *vector_builder) const {
+ CHECK(vector_builder->FromData(array_.data(), array_.size()));
+ }
+};
} // namespace aos
diff --git a/frc971/zeroing/continuous_absolute_encoder.cc b/frc971/zeroing/continuous_absolute_encoder.cc
index 3381833..733d46d 100644
--- a/frc971/zeroing/continuous_absolute_encoder.cc
+++ b/frc971/zeroing/continuous_absolute_encoder.cc
@@ -165,4 +165,14 @@
return builder.Finish();
}
+void ContinuousAbsoluteEncoderZeroingEstimator::GetEstimatorState(
+ AbsoluteEncoderEstimatorStateStatic *fbs) const {
+ errors_.ToStaticFlatbuffer(fbs->add_errors());
+
+ fbs->set_error(error_);
+ fbs->set_zeroed(zeroed_);
+ fbs->set_position(position_);
+ fbs->set_absolute_position(filtered_absolute_encoder_);
+}
+
} // namespace frc971::zeroing
diff --git a/frc971/zeroing/continuous_absolute_encoder.h b/frc971/zeroing/continuous_absolute_encoder.h
index 4994280..5e700ee 100644
--- a/frc971/zeroing/continuous_absolute_encoder.h
+++ b/frc971/zeroing/continuous_absolute_encoder.h
@@ -47,6 +47,8 @@
virtual flatbuffers::Offset<State> GetEstimatorState(
flatbuffers::FlatBufferBuilder *fbb) const override;
+ void GetEstimatorState(AbsoluteEncoderEstimatorStateStatic *fbs) const;
+
private:
struct PositionStruct {
PositionStruct(const AbsolutePosition &position_buffer)
diff --git a/frc971/zeroing/zeroing.h b/frc971/zeroing/zeroing.h
index 68ef38f..01c2c61 100644
--- a/frc971/zeroing/zeroing.h
+++ b/frc971/zeroing/zeroing.h
@@ -10,7 +10,7 @@
#include "flatbuffers/flatbuffers.h"
#include "frc971/constants.h"
-#include "frc971/control_loops/control_loops_generated.h"
+#include "frc971/control_loops/control_loops_static.h"
// TODO(pschrader): Flag an error if encoder index pulse is not n revolutions
// away from the last one (i.e. got extra counts from noise, etc..)