mirror of
https://github.com/BotChain-Robots/firmware.git
synced 2026-07-08 17:47: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 NeighbourBlob;
|
||||||
struct NeighbourBlobBuilder;
|
struct NeighbourBlobBuilder;
|
||||||
|
|
||||||
struct Topology;
|
struct TopologyInfo;
|
||||||
struct TopologyBuilder;
|
struct TopologyInfoBuilder;
|
||||||
|
|
||||||
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(2) ChannelBoardConn FLATBUFFERS_FINAL_CLASS {
|
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(2) ChannelBoardConn FLATBUFFERS_FINAL_CLASS {
|
||||||
private:
|
private:
|
||||||
@@ -127,8 +127,8 @@ inline ::flatbuffers::Offset<NeighbourBlob> CreateNeighbourBlobDirect(
|
|||||||
neighbour_connections__);
|
neighbour_connections__);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Topology FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
struct TopologyInfo FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||||
typedef TopologyBuilder Builder;
|
typedef TopologyInfoBuilder Builder;
|
||||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||||
VT_NUM_BOARDS = 4,
|
VT_NUM_BOARDS = 4,
|
||||||
VT_BOARDS = 6
|
VT_BOARDS = 6
|
||||||
@@ -150,77 +150,77 @@ struct Topology FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TopologyBuilder {
|
struct TopologyInfoBuilder {
|
||||||
typedef Topology Table;
|
typedef TopologyInfo Table;
|
||||||
::flatbuffers::FlatBufferBuilder &fbb_;
|
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||||
::flatbuffers::uoffset_t start_;
|
::flatbuffers::uoffset_t start_;
|
||||||
void add_num_boards(uint16_t num_boards) {
|
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) {
|
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) {
|
: fbb_(_fbb) {
|
||||||
start_ = fbb_.StartTable();
|
start_ = fbb_.StartTable();
|
||||||
}
|
}
|
||||||
::flatbuffers::Offset<Topology> Finish() {
|
::flatbuffers::Offset<TopologyInfo> Finish() {
|
||||||
const auto end = fbb_.EndTable(start_);
|
const auto end = fbb_.EndTable(start_);
|
||||||
auto o = ::flatbuffers::Offset<Topology>(end);
|
auto o = ::flatbuffers::Offset<TopologyInfo>(end);
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline ::flatbuffers::Offset<Topology> CreateTopology(
|
inline ::flatbuffers::Offset<TopologyInfo> CreateTopologyInfo(
|
||||||
::flatbuffers::FlatBufferBuilder &_fbb,
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
uint16_t num_boards = 0,
|
uint16_t num_boards = 0,
|
||||||
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Topology::NeighbourBlob>>> boards = 0) {
|
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Topology::NeighbourBlob>>> boards = 0) {
|
||||||
TopologyBuilder builder_(_fbb);
|
TopologyInfoBuilder builder_(_fbb);
|
||||||
builder_.add_boards(boards);
|
builder_.add_boards(boards);
|
||||||
builder_.add_num_boards(num_boards);
|
builder_.add_num_boards(num_boards);
|
||||||
return builder_.Finish();
|
return builder_.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ::flatbuffers::Offset<Topology> CreateTopologyDirect(
|
inline ::flatbuffers::Offset<TopologyInfo> CreateTopologyInfoDirect(
|
||||||
::flatbuffers::FlatBufferBuilder &_fbb,
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
uint16_t num_boards = 0,
|
uint16_t num_boards = 0,
|
||||||
const std::vector<::flatbuffers::Offset<Topology::NeighbourBlob>> *boards = nullptr) {
|
const std::vector<::flatbuffers::Offset<Topology::NeighbourBlob>> *boards = nullptr) {
|
||||||
auto boards__ = boards ? _fbb.CreateVector<::flatbuffers::Offset<Topology::NeighbourBlob>>(*boards) : 0;
|
auto boards__ = boards ? _fbb.CreateVector<::flatbuffers::Offset<Topology::NeighbourBlob>>(*boards) : 0;
|
||||||
return Topology::CreateTopology(
|
return Topology::CreateTopologyInfo(
|
||||||
_fbb,
|
_fbb,
|
||||||
num_boards,
|
num_boards,
|
||||||
boards__);
|
boards__);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const Topology::Topology *GetTopology(const void *buf) {
|
inline const Topology::TopologyInfo *GetTopologyInfo(const void *buf) {
|
||||||
return ::flatbuffers::GetRoot<Topology::Topology>(buf);
|
return ::flatbuffers::GetRoot<Topology::TopologyInfo>(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const Topology::Topology *GetSizePrefixedTopology(const void *buf) {
|
inline const Topology::TopologyInfo *GetSizePrefixedTopologyInfo(const void *buf) {
|
||||||
return ::flatbuffers::GetSizePrefixedRoot<Topology::Topology>(buf);
|
return ::flatbuffers::GetSizePrefixedRoot<Topology::TopologyInfo>(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <bool B = false>
|
template <bool B = false>
|
||||||
inline bool VerifyTopologyBuffer(
|
inline bool VerifyTopologyInfoBuffer(
|
||||||
::flatbuffers::VerifierTemplate<B> &verifier) {
|
::flatbuffers::VerifierTemplate<B> &verifier) {
|
||||||
return verifier.template VerifyBuffer<Topology::Topology>(nullptr);
|
return verifier.template VerifyBuffer<Topology::TopologyInfo>(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <bool B = false>
|
template <bool B = false>
|
||||||
inline bool VerifySizePrefixedTopologyBuffer(
|
inline bool VerifySizePrefixedTopologyInfoBuffer(
|
||||||
::flatbuffers::VerifierTemplate<B> &verifier) {
|
::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::FlatBufferBuilder &fbb,
|
||||||
::flatbuffers::Offset<Topology::Topology> root) {
|
::flatbuffers::Offset<Topology::TopologyInfo> root) {
|
||||||
fbb.Finish(root);
|
fbb.Finish(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void FinishSizePrefixedTopologyBuffer(
|
inline void FinishSizePrefixedTopologyInfoBuffer(
|
||||||
::flatbuffers::FlatBufferBuilder &fbb,
|
::flatbuffers::FlatBufferBuilder &fbb,
|
||||||
::flatbuffers::Offset<Topology::Topology> root) {
|
::flatbuffers::Offset<Topology::TopologyInfo> root) {
|
||||||
fbb.FinishSizePrefixed(root);
|
fbb.FinishSizePrefixed(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user