mirror of
https://github.com/BotChain-Robots/firmware.git
synced 2026-07-08 09:37:21 +02:00
Add topology builder
This commit is contained in:
29
components/flatbuffers/TopologyBuilder.cpp
Normal file
29
components/flatbuffers/TopologyBuilder.cpp
Normal file
@@ -0,0 +1,29 @@
|
||||
#include "TopologyBuilder.h"
|
||||
#ifdef TOPOLOGYBUILDER
|
||||
namespace Flatbuffers{
|
||||
SerializedMessage TopologyBuilder::build_topology(const std::vector<flatbuffers::Offset<Topology::NeighbourBlob>>& topology){
|
||||
builder_.Clear();
|
||||
|
||||
auto neighbours_vec = builder_.CreateVector(topology);
|
||||
auto topology_offset = Topology::CreateTopologyInfo(builder_, static_cast<uint16_t>(topology.size()), neighbours_vec);
|
||||
|
||||
builder_.Finish(topology_offset);
|
||||
|
||||
return {
|
||||
builder_.GetBufferPointer(),
|
||||
builder_.GetSize()
|
||||
};
|
||||
}
|
||||
|
||||
flatbuffers::Offset<Topology::NeighbourBlob> TopologyBuilder::build_neighbour_info(uint16_t board_id, const std::vector<Topology::ChannelBoardConn>& connections){
|
||||
auto conn = builder_.CreateVectorOfStructs(connections);
|
||||
return Topology::CreateNeighbourBlob(builder_, board_id, static_cast<uint8_t>(connections.size()), conn);
|
||||
}
|
||||
|
||||
Topology::ChannelBoardConn TopologyBuilder::build_connections(uint8_t channel, uint16_t board_id){
|
||||
return Topology::ChannelBoardConn(channel, board_id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //TOPOLOGYBUILDER
|
||||
26
components/flatbuffers/include/TopologyBuilder.h
Normal file
26
components/flatbuffers/include/TopologyBuilder.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef TOPOLOGYBUILDER
|
||||
#define TOPOLOGYBUILDER
|
||||
|
||||
#include "SerializedMessage.h"
|
||||
#include <vector>
|
||||
#include "constants/datalink.h"
|
||||
#include "constants/rmt.h"
|
||||
|
||||
#include "flatbuffers_generated/Topology_generated.h"
|
||||
#include "flatbuffers/flatbuffers.h"
|
||||
|
||||
namespace Flatbuffers {
|
||||
class TopologyBuilder {
|
||||
public:
|
||||
TopologyBuilder() : builder_(RIP_MAX_ROUTES*(sizeof(Topology::NeighbourBlob) + sizeof(Topology::ChannelBoardConn)*MAX_CHANNELS)) {}
|
||||
|
||||
SerializedMessage build_topology(const std::vector<flatbuffers::Offset<Topology::NeighbourBlob>>& topology);
|
||||
flatbuffers::Offset<Topology::NeighbourBlob> build_neighbour_info(uint16_t board_id, const std::vector<Topology::ChannelBoardConn>& connections);
|
||||
Topology::ChannelBoardConn build_connections(uint8_t channel, uint16_t board_id);
|
||||
|
||||
private:
|
||||
flatbuffers::FlatBufferBuilder builder_;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //TOPOLOGYBUILDER
|
||||
@@ -20,8 +20,8 @@ struct ChannelBoardConn;
|
||||
struct NeighbourBlob;
|
||||
struct NeighbourBlobBuilder;
|
||||
|
||||
struct Topology;
|
||||
struct TopologyBuilder;
|
||||
struct TopologyInfo;
|
||||
struct TopologyInfoBuilder;
|
||||
|
||||
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(2) ChannelBoardConn FLATBUFFERS_FINAL_CLASS {
|
||||
private:
|
||||
@@ -127,8 +127,8 @@ inline ::flatbuffers::Offset<NeighbourBlob> CreateNeighbourBlobDirect(
|
||||
neighbour_connections__);
|
||||
}
|
||||
|
||||
struct Topology FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||
typedef TopologyBuilder Builder;
|
||||
struct TopologyInfo FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||
typedef TopologyInfoBuilder Builder;
|
||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||
VT_NUM_BOARDS = 4,
|
||||
VT_BOARDS = 6
|
||||
@@ -150,77 +150,77 @@ struct Topology FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||
}
|
||||
};
|
||||
|
||||
struct TopologyBuilder {
|
||||
typedef Topology Table;
|
||||
struct TopologyInfoBuilder {
|
||||
typedef TopologyInfo Table;
|
||||
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||
::flatbuffers::uoffset_t start_;
|
||||
void add_num_boards(uint16_t num_boards) {
|
||||
fbb_.AddElement<uint16_t>(Topology::VT_NUM_BOARDS, num_boards, 0);
|
||||
fbb_.AddElement<uint16_t>(TopologyInfo::VT_NUM_BOARDS, num_boards, 0);
|
||||
}
|
||||
void add_boards(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Topology::NeighbourBlob>>> boards) {
|
||||
fbb_.AddOffset(Topology::VT_BOARDS, boards);
|
||||
fbb_.AddOffset(TopologyInfo::VT_BOARDS, boards);
|
||||
}
|
||||
explicit TopologyBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||
explicit TopologyInfoBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||
: fbb_(_fbb) {
|
||||
start_ = fbb_.StartTable();
|
||||
}
|
||||
::flatbuffers::Offset<Topology> Finish() {
|
||||
::flatbuffers::Offset<TopologyInfo> Finish() {
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = ::flatbuffers::Offset<Topology>(end);
|
||||
auto o = ::flatbuffers::Offset<TopologyInfo>(end);
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
inline ::flatbuffers::Offset<Topology> CreateTopology(
|
||||
inline ::flatbuffers::Offset<TopologyInfo> CreateTopologyInfo(
|
||||
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||
uint16_t num_boards = 0,
|
||||
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Topology::NeighbourBlob>>> boards = 0) {
|
||||
TopologyBuilder builder_(_fbb);
|
||||
TopologyInfoBuilder builder_(_fbb);
|
||||
builder_.add_boards(boards);
|
||||
builder_.add_num_boards(num_boards);
|
||||
return builder_.Finish();
|
||||
}
|
||||
|
||||
inline ::flatbuffers::Offset<Topology> CreateTopologyDirect(
|
||||
inline ::flatbuffers::Offset<TopologyInfo> CreateTopologyInfoDirect(
|
||||
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||
uint16_t num_boards = 0,
|
||||
const std::vector<::flatbuffers::Offset<Topology::NeighbourBlob>> *boards = nullptr) {
|
||||
auto boards__ = boards ? _fbb.CreateVector<::flatbuffers::Offset<Topology::NeighbourBlob>>(*boards) : 0;
|
||||
return Topology::CreateTopology(
|
||||
return Topology::CreateTopologyInfo(
|
||||
_fbb,
|
||||
num_boards,
|
||||
boards__);
|
||||
}
|
||||
|
||||
inline const Topology::Topology *GetTopology(const void *buf) {
|
||||
return ::flatbuffers::GetRoot<Topology::Topology>(buf);
|
||||
inline const Topology::TopologyInfo *GetTopologyInfo(const void *buf) {
|
||||
return ::flatbuffers::GetRoot<Topology::TopologyInfo>(buf);
|
||||
}
|
||||
|
||||
inline const Topology::Topology *GetSizePrefixedTopology(const void *buf) {
|
||||
return ::flatbuffers::GetSizePrefixedRoot<Topology::Topology>(buf);
|
||||
inline const Topology::TopologyInfo *GetSizePrefixedTopologyInfo(const void *buf) {
|
||||
return ::flatbuffers::GetSizePrefixedRoot<Topology::TopologyInfo>(buf);
|
||||
}
|
||||
|
||||
template <bool B = false>
|
||||
inline bool VerifyTopologyBuffer(
|
||||
inline bool VerifyTopologyInfoBuffer(
|
||||
::flatbuffers::VerifierTemplate<B> &verifier) {
|
||||
return verifier.template VerifyBuffer<Topology::Topology>(nullptr);
|
||||
return verifier.template VerifyBuffer<Topology::TopologyInfo>(nullptr);
|
||||
}
|
||||
|
||||
template <bool B = false>
|
||||
inline bool VerifySizePrefixedTopologyBuffer(
|
||||
inline bool VerifySizePrefixedTopologyInfoBuffer(
|
||||
::flatbuffers::VerifierTemplate<B> &verifier) {
|
||||
return verifier.template VerifySizePrefixedBuffer<Topology::Topology>(nullptr);
|
||||
return verifier.template VerifySizePrefixedBuffer<Topology::TopologyInfo>(nullptr);
|
||||
}
|
||||
|
||||
inline void FinishTopologyBuffer(
|
||||
inline void FinishTopologyInfoBuffer(
|
||||
::flatbuffers::FlatBufferBuilder &fbb,
|
||||
::flatbuffers::Offset<Topology::Topology> root) {
|
||||
::flatbuffers::Offset<Topology::TopologyInfo> root) {
|
||||
fbb.Finish(root);
|
||||
}
|
||||
|
||||
inline void FinishSizePrefixedTopologyBuffer(
|
||||
inline void FinishSizePrefixedTopologyInfoBuffer(
|
||||
::flatbuffers::FlatBufferBuilder &fbb,
|
||||
::flatbuffers::Offset<Topology::Topology> root) {
|
||||
::flatbuffers::Offset<Topology::TopologyInfo> root) {
|
||||
fbb.FinishSizePrefixed(root);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user