From 43fec0207352af06cc933a4826dae11c352970ac Mon Sep 17 00:00:00 2001 From: superkor Date: Thu, 15 Jan 2026 02:14:48 -0500 Subject: [PATCH] flatbuffer wrapper for movement sets --- components/flatbuffers/MovementSetBuilder.cpp | 45 +++++++++++++++++ .../flatbuffers/include/MovementSetBuilder.h | 29 +++++++++++ .../Movement_generated.h | 44 ++++++++--------- .../Topology_generated.h | 48 +++++++++---------- .../movements/include/MovementSetManager.h | 2 +- 5 files changed, 121 insertions(+), 47 deletions(-) create mode 100644 components/flatbuffers/MovementSetBuilder.cpp create mode 100644 components/flatbuffers/include/MovementSetBuilder.h diff --git a/components/flatbuffers/MovementSetBuilder.cpp b/components/flatbuffers/MovementSetBuilder.cpp new file mode 100644 index 0000000..02d5515 --- /dev/null +++ b/components/flatbuffers/MovementSetBuilder.cpp @@ -0,0 +1,45 @@ +// Justin Chow created file >:) + +#include "MovementSetBuilder.h" +#include "SerializedMessage.h" + +#ifdef MOVEMENTSETBUILDER + +namespace Flatbuffers { + SerializedMessage MovementSetBuilder::build_movement_set(const std::vector>& set){ + + builder_.Clear(); + + const auto set_vector = builder_.CreateVector(set); + + const auto message = Movement::CreateMovementSet( + builder_, + static_cast(set.size()), + set_vector + ); + + builder_.Finish(message); + + return {builder_.GetBufferPointer(), builder_.GetSize()}; + } + + flatbuffers::Offset MovementSetBuilder::build_movement_entry(uint16_t board_id, uint8_t module_type, uint16_t value_action, + const Movement::ConditionBlob& condition, uint8_t ack, uint16_t ack_ttl_ms, uint16_t post_delay_ms){ + return Movement::CreateMovementEntry( + builder_, + board_id, + module_type, + value_action, + &condition, + ack, + ack_ttl_ms, + post_delay_ms + ); + } + + Movement::ConditionBlob MovementSetBuilder::build_condition_blob(uint16_t value, uint8_t cond, uint8_t module_type, uint8_t in_use){ + return Movement::ConditionBlob(value, cond, module_type, in_use); + } +} + +#endif //MOVEMENTSETBUILDER diff --git a/components/flatbuffers/include/MovementSetBuilder.h b/components/flatbuffers/include/MovementSetBuilder.h new file mode 100644 index 0000000..cbf5af6 --- /dev/null +++ b/components/flatbuffers/include/MovementSetBuilder.h @@ -0,0 +1,29 @@ +// Justin Chow created file >:) + +#ifndef MOVEMENTSETBUILDER +#define MOVEMENTSETBUILDER + +#define MAX_MOVEMENTS_IN_SET 255 //max number movements in `MovementEntry.num_movements` can hold + +#include + +#include "SerializedMessage.h" +#include "flatbuffers_generated/Movement_generated.h" +#include "flatbuffers/flatbuffers.h" + +namespace Flatbuffers { + class MovementSetBuilder { + public: + MovementSetBuilder() : builder_(MAX_MOVEMENTS_IN_SET*sizeof(Movement::MovementEntry)) {} + + SerializedMessage build_movement_set(const std::vector>& set); + flatbuffers::Offset build_movement_entry(uint16_t board_id, uint8_t module_type, uint16_t value_action, + const Movement::ConditionBlob& condition, uint8_t ack, uint16_t ack_ttl_ms, uint16_t post_delay_ms); + Movement::ConditionBlob build_condition_blob(uint16_t value, uint8_t cond, uint8_t module_type, uint8_t in_use); + + private: + flatbuffers::FlatBufferBuilder builder_; + }; +} + +#endif //MOVEMENTSETBUILDER diff --git a/components/flatbuffers/include/flatbuffers_generated/Movement_generated.h b/components/flatbuffers/include/flatbuffers_generated/Movement_generated.h index 783b6ea..a8acf9a 100644 --- a/components/flatbuffers/include/flatbuffers_generated/Movement_generated.h +++ b/components/flatbuffers/include/flatbuffers_generated/Movement_generated.h @@ -13,7 +13,7 @@ static_assert(FLATBUFFERS_VERSION_MAJOR == 25 && FLATBUFFERS_VERSION_REVISION == 19, "Non-compatible flatbuffers version included"); -namespace movement { +namespace Movement { struct ConditionBlob; @@ -83,8 +83,8 @@ struct MovementEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { uint16_t value_action() const { return GetField(VT_VALUE_ACTION, 0); } - const movement::ConditionBlob *condition() const { - return GetStruct(VT_CONDITION); + const Movement::ConditionBlob *condition() const { + return GetStruct(VT_CONDITION); } uint8_t ack() const { return GetField(VT_ACK, 0); @@ -101,7 +101,7 @@ struct MovementEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { VerifyField(verifier, VT_BOARD_ID, 2) && VerifyField(verifier, VT_MODULE_TYPE, 1) && VerifyField(verifier, VT_VALUE_ACTION, 2) && - VerifyField(verifier, VT_CONDITION, 2) && + VerifyField(verifier, VT_CONDITION, 2) && VerifyField(verifier, VT_ACK, 1) && VerifyField(verifier, VT_ACK_TTL_MS, 2) && VerifyField(verifier, VT_POST_DELAY_MS, 2) && @@ -122,7 +122,7 @@ struct MovementEntryBuilder { void add_value_action(uint16_t value_action) { fbb_.AddElement(MovementEntry::VT_VALUE_ACTION, value_action, 0); } - void add_condition(const movement::ConditionBlob *condition) { + void add_condition(const Movement::ConditionBlob *condition) { fbb_.AddStruct(MovementEntry::VT_CONDITION, condition); } void add_ack(uint8_t ack) { @@ -150,7 +150,7 @@ inline ::flatbuffers::Offset CreateMovementEntry( uint16_t board_id = 0, uint8_t module_type = 0, uint16_t value_action = 0, - const movement::ConditionBlob *condition = nullptr, + const Movement::ConditionBlob *condition = nullptr, uint8_t ack = 0, uint16_t ack_ttl_ms = 0, uint16_t post_delay_ms = 0) { @@ -174,8 +174,8 @@ struct MovementSet FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { uint8_t num_movements() const { return GetField(VT_NUM_MOVEMENTS, 0); } - const ::flatbuffers::Vector<::flatbuffers::Offset> *movements() const { - return GetPointer> *>(VT_MOVEMENTS); + const ::flatbuffers::Vector<::flatbuffers::Offset> *movements() const { + return GetPointer> *>(VT_MOVEMENTS); } template bool Verify(::flatbuffers::VerifierTemplate &verifier) const { @@ -195,7 +195,7 @@ struct MovementSetBuilder { void add_num_movements(uint8_t num_movements) { fbb_.AddElement(MovementSet::VT_NUM_MOVEMENTS, num_movements, 0); } - void add_movements(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> movements) { + void add_movements(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> movements) { fbb_.AddOffset(MovementSet::VT_MOVEMENTS, movements); } explicit MovementSetBuilder(::flatbuffers::FlatBufferBuilder &_fbb) @@ -212,7 +212,7 @@ struct MovementSetBuilder { inline ::flatbuffers::Offset CreateMovementSet( ::flatbuffers::FlatBufferBuilder &_fbb, uint8_t num_movements = 0, - ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> movements = 0) { + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> movements = 0) { MovementSetBuilder builder_(_fbb); builder_.add_movements(movements); builder_.add_num_movements(num_movements); @@ -222,46 +222,46 @@ inline ::flatbuffers::Offset CreateMovementSet( inline ::flatbuffers::Offset CreateMovementSetDirect( ::flatbuffers::FlatBufferBuilder &_fbb, uint8_t num_movements = 0, - const std::vector<::flatbuffers::Offset> *movements = nullptr) { - auto movements__ = movements ? _fbb.CreateVector<::flatbuffers::Offset>(*movements) : 0; - return movement::CreateMovementSet( + const std::vector<::flatbuffers::Offset> *movements = nullptr) { + auto movements__ = movements ? _fbb.CreateVector<::flatbuffers::Offset>(*movements) : 0; + return Movement::CreateMovementSet( _fbb, num_movements, movements__); } -inline const movement::MovementSet *GetMovementSet(const void *buf) { - return ::flatbuffers::GetRoot(buf); +inline const Movement::MovementSet *GetMovementSet(const void *buf) { + return ::flatbuffers::GetRoot(buf); } -inline const movement::MovementSet *GetSizePrefixedMovementSet(const void *buf) { - return ::flatbuffers::GetSizePrefixedRoot(buf); +inline const Movement::MovementSet *GetSizePrefixedMovementSet(const void *buf) { + return ::flatbuffers::GetSizePrefixedRoot(buf); } template inline bool VerifyMovementSetBuffer( ::flatbuffers::VerifierTemplate &verifier) { - return verifier.template VerifyBuffer(nullptr); + return verifier.template VerifyBuffer(nullptr); } template inline bool VerifySizePrefixedMovementSetBuffer( ::flatbuffers::VerifierTemplate &verifier) { - return verifier.template VerifySizePrefixedBuffer(nullptr); + return verifier.template VerifySizePrefixedBuffer(nullptr); } inline void FinishMovementSetBuffer( ::flatbuffers::FlatBufferBuilder &fbb, - ::flatbuffers::Offset root) { + ::flatbuffers::Offset root) { fbb.Finish(root); } inline void FinishSizePrefixedMovementSetBuffer( ::flatbuffers::FlatBufferBuilder &fbb, - ::flatbuffers::Offset root) { + ::flatbuffers::Offset root) { fbb.FinishSizePrefixed(root); } -} // namespace movement +} // namespace Movement #endif // FLATBUFFERS_GENERATED_MOVEMENT_MOVEMENT_H_ diff --git a/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h b/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h index 3bb0d37..aa30ca0 100644 --- a/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h +++ b/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h @@ -13,7 +13,7 @@ static_assert(FLATBUFFERS_VERSION_MAJOR == 25 && FLATBUFFERS_VERSION_REVISION == 19, "Non-compatible flatbuffers version included"); -namespace topology { +namespace Topology { struct ChannelBoardConn; @@ -64,8 +64,8 @@ struct NeighbourBlob FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { uint8_t num_connections() const { return GetField(VT_NUM_CONNECTIONS, 0); } - const ::flatbuffers::Vector *neighbour_connections() const { - return GetPointer *>(VT_NEIGHBOUR_CONNECTIONS); + const ::flatbuffers::Vector *neighbour_connections() const { + return GetPointer *>(VT_NEIGHBOUR_CONNECTIONS); } template bool Verify(::flatbuffers::VerifierTemplate &verifier) const { @@ -88,7 +88,7 @@ struct NeighbourBlobBuilder { void add_num_connections(uint8_t num_connections) { fbb_.AddElement(NeighbourBlob::VT_NUM_CONNECTIONS, num_connections, 0); } - void add_neighbour_connections(::flatbuffers::Offset<::flatbuffers::Vector> neighbour_connections) { + void add_neighbour_connections(::flatbuffers::Offset<::flatbuffers::Vector> neighbour_connections) { fbb_.AddOffset(NeighbourBlob::VT_NEIGHBOUR_CONNECTIONS, neighbour_connections); } explicit NeighbourBlobBuilder(::flatbuffers::FlatBufferBuilder &_fbb) @@ -106,7 +106,7 @@ inline ::flatbuffers::Offset CreateNeighbourBlob( ::flatbuffers::FlatBufferBuilder &_fbb, uint16_t curr_board_id = 0, uint8_t num_connections = 0, - ::flatbuffers::Offset<::flatbuffers::Vector> neighbour_connections = 0) { + ::flatbuffers::Offset<::flatbuffers::Vector> neighbour_connections = 0) { NeighbourBlobBuilder builder_(_fbb); builder_.add_neighbour_connections(neighbour_connections); builder_.add_curr_board_id(curr_board_id); @@ -118,9 +118,9 @@ inline ::flatbuffers::Offset CreateNeighbourBlobDirect( ::flatbuffers::FlatBufferBuilder &_fbb, uint16_t curr_board_id = 0, uint8_t num_connections = 0, - const std::vector *neighbour_connections = nullptr) { - auto neighbour_connections__ = neighbour_connections ? _fbb.CreateVectorOfStructs(*neighbour_connections) : 0; - return topology::CreateNeighbourBlob( + const std::vector *neighbour_connections = nullptr) { + auto neighbour_connections__ = neighbour_connections ? _fbb.CreateVectorOfStructs(*neighbour_connections) : 0; + return Topology::CreateNeighbourBlob( _fbb, curr_board_id, num_connections, @@ -136,8 +136,8 @@ struct Topology FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { uint16_t num_boards() const { return GetField(VT_NUM_BOARDS, 0); } - const ::flatbuffers::Vector<::flatbuffers::Offset> *boards() const { - return GetPointer> *>(VT_BOARDS); + const ::flatbuffers::Vector<::flatbuffers::Offset> *boards() const { + return GetPointer> *>(VT_BOARDS); } template bool Verify(::flatbuffers::VerifierTemplate &verifier) const { @@ -157,7 +157,7 @@ struct TopologyBuilder { void add_num_boards(uint16_t num_boards) { fbb_.AddElement(Topology::VT_NUM_BOARDS, num_boards, 0); } - void add_boards(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> boards) { + void add_boards(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> boards) { fbb_.AddOffset(Topology::VT_BOARDS, boards); } explicit TopologyBuilder(::flatbuffers::FlatBufferBuilder &_fbb) @@ -174,7 +174,7 @@ struct TopologyBuilder { inline ::flatbuffers::Offset CreateTopology( ::flatbuffers::FlatBufferBuilder &_fbb, uint16_t num_boards = 0, - ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> boards = 0) { + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> boards = 0) { TopologyBuilder builder_(_fbb); builder_.add_boards(boards); builder_.add_num_boards(num_boards); @@ -184,46 +184,46 @@ inline ::flatbuffers::Offset CreateTopology( inline ::flatbuffers::Offset CreateTopologyDirect( ::flatbuffers::FlatBufferBuilder &_fbb, uint16_t num_boards = 0, - const std::vector<::flatbuffers::Offset> *boards = nullptr) { - auto boards__ = boards ? _fbb.CreateVector<::flatbuffers::Offset>(*boards) : 0; - return topology::CreateTopology( + const std::vector<::flatbuffers::Offset> *boards = nullptr) { + auto boards__ = boards ? _fbb.CreateVector<::flatbuffers::Offset>(*boards) : 0; + return Topology::CreateTopology( _fbb, num_boards, boards__); } -inline const topology::Topology *GetTopology(const void *buf) { - return ::flatbuffers::GetRoot(buf); +inline const Topology::Topology *GetTopology(const void *buf) { + return ::flatbuffers::GetRoot(buf); } -inline const topology::Topology *GetSizePrefixedTopology(const void *buf) { - return ::flatbuffers::GetSizePrefixedRoot(buf); +inline const Topology::Topology *GetSizePrefixedTopology(const void *buf) { + return ::flatbuffers::GetSizePrefixedRoot(buf); } template inline bool VerifyTopologyBuffer( ::flatbuffers::VerifierTemplate &verifier) { - return verifier.template VerifyBuffer(nullptr); + return verifier.template VerifyBuffer(nullptr); } template inline bool VerifySizePrefixedTopologyBuffer( ::flatbuffers::VerifierTemplate &verifier) { - return verifier.template VerifySizePrefixedBuffer(nullptr); + return verifier.template VerifySizePrefixedBuffer(nullptr); } inline void FinishTopologyBuffer( ::flatbuffers::FlatBufferBuilder &fbb, - ::flatbuffers::Offset root) { + ::flatbuffers::Offset root) { fbb.Finish(root); } inline void FinishSizePrefixedTopologyBuffer( ::flatbuffers::FlatBufferBuilder &fbb, - ::flatbuffers::Offset root) { + ::flatbuffers::Offset root) { fbb.FinishSizePrefixed(root); } -} // namespace topology +} // namespace Topology #endif // FLATBUFFERS_GENERATED_TOPOLOGY_TOPOLOGY_H_ diff --git a/components/movements/include/MovementSetManager.h b/components/movements/include/MovementSetManager.h index 20981f9..db2b8f7 100644 --- a/components/movements/include/MovementSetManager.h +++ b/components/movements/include/MovementSetManager.h @@ -21,7 +21,7 @@ class MovementSetManager { private: std::unique_ptr topology_manager; - std::vector movements; + // std::vector movements; nvs_handle_t handle; };