Oled implementation (#1)

This commit is contained in:
2026-02-07 15:05:45 -05:00
committed by GitHub
parent 048e39016a
commit 33c3ebad53
46 changed files with 1790 additions and 1260 deletions

View File

@@ -10,20 +10,23 @@
class Hub final : public Module {
public:
explicit Hub(uint8_t device_id) : Module(device_id) {};
public:
explicit Hub(uint8_t device_id) : Module(device_id) {};
Hub(uint8_t device_id, ModuleType module_type) : Module(device_id, module_type) {};
Hub(uint8_t device_id, ModuleType module_type)
: Module(device_id, module_type) {};
Hub(uint8_t device_id, ModuleType module_type, Messaging::ConnectionType connection_type,
uint8_t leader)
: Module(device_id, module_type, connection_type, leader) {};
Hub(uint8_t device_id, ModuleType module_type,
Messaging::ConnectionType connection_type, uint8_t leader)
: Module(device_id, module_type, connection_type, leader) {};
double get_position() override;
void actuate(double position) override;
void actuate(double x, double y) override;
std::vector<uint8_t> get_actuation_message() override;
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
double get_position() override;
std::string get_text() override;
void actuate(double position) override;
void actuate(double x, double y) override;
void actuate(const std::string &t) override;
std::vector<uint8_t> get_actuation_message() override;
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
};
#endif // CONTROL_HUB_H

View File

@@ -7,6 +7,7 @@
#include <chrono>
#include <cstdint>
#include <string>
#include "flatbuffers/SensorMessageBuilder.h"
#include "flatbuffers_generated/RobotModule_generated.h"
@@ -14,53 +15,54 @@
#include "librpc.h"
struct neighbour {
uint8_t device_id;
Orientation orientation;
uint8_t device_id;
Orientation orientation;
};
class Module {
public:
explicit Module(uint8_t device_id) : m_device_id(device_id) {};
public:
explicit Module(uint8_t device_id) : m_device_id(device_id) {};
Module(uint8_t device_id, ModuleType module_type)
: m_device_id(device_id), m_module_type(module_type) {};
Module(uint8_t device_id, ModuleType module_type)
: m_device_id(device_id), m_module_type(module_type) {};
Module(uint8_t device_id, ModuleType module_type, Messaging::ConnectionType connection_type,
uint8_t leader)
: m_device_id(device_id), m_module_type(module_type), m_connection_type(connection_type),
m_leader(leader) {};
Module(uint8_t device_id, ModuleType module_type,
Messaging::ConnectionType connection_type, uint8_t leader)
: m_device_id(device_id), m_module_type(module_type),
m_connection_type(connection_type), m_leader(leader) {};
std::vector<neighbour> get_neighbours();
std::vector<neighbour> get_neighbours();
uint8_t get_device_id();
uint8_t get_device_id();
ModuleType get_type();
ModuleType get_type();
Messaging::ConnectionType get_connection_type();
Messaging::ConnectionType get_connection_type();
uint8_t get_leader();
uint8_t get_leader();
std::chrono::time_point<std::chrono::system_clock> get_last_updated_time();
std::chrono::time_point<std::chrono::system_clock> get_last_updated_time();
virtual double get_position() = 0;
virtual void actuate(double x) = 0;
// Not all modules implement all actuation/sensor values, some are no-ops
virtual double get_position() = 0;
virtual std::string get_text() = 0;
virtual void actuate(double x) = 0;
virtual void actuate(const std::string &text) = 0;
virtual void actuate(double x, double y) = 0;
// There are no modules with 2D actuation support, this is an example of how to implement it.
virtual void actuate(double x, double y) = 0;
void update_module_metadata(const Messaging::TopologyMessage &message);
void update_module_metadata(const Messaging::TopologyMessage &message);
virtual std::vector<uint8_t> get_actuation_message() = 0;
virtual void update_sensor_data(const Flatbuffers::sensor_value &value) = 0;
virtual std::vector<uint8_t> get_actuation_message() = 0;
virtual void update_sensor_data(const Flatbuffers::sensor_value &value) = 0;
private:
uint8_t m_device_id;
ModuleType m_module_type;
Messaging::ConnectionType m_connection_type;
uint8_t m_leader;
std::chrono::time_point<std::chrono::system_clock> m_last_updated;
std::vector<neighbour> m_neighbours;
std::shared_ptr<MessagingInterface> m_messaging_interface;
private:
uint8_t m_device_id;
ModuleType m_module_type;
Messaging::ConnectionType m_connection_type;
uint8_t m_leader;
std::chrono::time_point<std::chrono::system_clock> m_last_updated;
std::vector<neighbour> m_neighbours;
std::shared_ptr<MessagingInterface> m_messaging_interface;
};
#endif // CONTROL_MODULE_H

View File

@@ -5,10 +5,10 @@
#include "flatbuffers_generated/RobotModule_generated.h"
class ModuleFactory {
public:
static std::shared_ptr<Module>
createModule(uint8_t device_id, ModuleType type,
std::shared_ptr<MessagingInterface> &messaging_interface);
public:
static std::shared_ptr<Module>
createModule(uint8_t device_id, ModuleType type,
std::shared_ptr<MessagingInterface> &messaging_interface);
};
#endif // CONTROL_MODULEFACTORY_H

View File

@@ -9,20 +9,21 @@
#include "flatbuffers_generated/TopologyMessage_generated.h"
class Actuator : public Module {
public:
explicit Actuator(uint8_t device_id) : Module(device_id) {};
public:
explicit Actuator(uint8_t device_id) : Module(device_id) {};
Actuator(uint8_t device_id, ModuleType module_type) : Module(device_id, module_type) {};
Actuator(uint8_t device_id, ModuleType module_type)
: Module(device_id, module_type) {};
Actuator(uint8_t device_id, ModuleType module_type, Messaging::ConnectionType connection_type,
uint8_t leader)
: Module(device_id, module_type, connection_type, leader) {};
Actuator(uint8_t device_id, ModuleType module_type,
Messaging::ConnectionType connection_type, uint8_t leader)
: Module(device_id, module_type, connection_type, leader) {};
protected:
virtual std::vector<uint8_t> get_actuation_message() = 0;
protected:
virtual std::vector<uint8_t> get_actuation_message() = 0;
private:
[[noreturn]] void actuator_tx_loop();
private:
[[noreturn]] void actuator_tx_loop();
};
#endif // CONTROL_MODULE_H

View File

@@ -5,33 +5,38 @@
#ifndef CONTROL_BOUNDED1DPOSITIONALACTUATOR_H
#define CONTROL_BOUNDED1DPOSITIONALACTUATOR_H
#include <string>
#include "actuators/Actuator.h"
#include "flatbuffers/AngleControlMessageBuilder.h"
#include "flatbuffers/SensorMessageBuilder.h"
class BoundedPositionalActuator1D : public Actuator {
public:
BoundedPositionalActuator1D(uint8_t device_id, ModuleType type, double max_value,
double min_value, double initial_position)
: Actuator(device_id, type), m_target_position(initial_position), m_max_value(max_value),
m_min_value(min_value),
acm_builder(std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {
}
public:
BoundedPositionalActuator1D(uint8_t device_id, ModuleType type,
double max_value, double min_value,
double initial_position)
: Actuator(device_id, type), m_target_position(initial_position),
m_max_value(max_value), m_min_value(min_value),
acm_builder(
std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {}
double get_position() override;
void actuate(double position) override;
void actuate(double x, double y) override; // no-op
double get_position() override;
std::string get_text() override; // no-op
void actuate(double position) override;
void actuate(const std::string &text) override; // no-op
void actuate(double x, double y) override; // no-op
std::vector<uint8_t> get_actuation_message() override;
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
std::vector<uint8_t> get_actuation_message() override;
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
private:
double m_current_position = 0;
double m_target_position;
double m_max_value;
double m_min_value;
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> acm_builder;
private:
double m_current_position = 0;
double m_target_position;
double m_max_value;
double m_min_value;
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> acm_builder;
};
#endif // CONTROL_1DPOSITIONALACTUATOR_H

View File

@@ -0,0 +1,38 @@
//
// Created by Johnathon Slightham on 2025-11-13.
//
#ifndef CONTROL_OLEDACTUATOR_H
#define CONTROL_OLEDACTUATOR_H
#include <string>
#include "actuators/Actuator.h"
#include "flatbuffers/SensorMessageBuilder.h"
#include "flatbuffers/TextControlMessageBuilder.h"
class OledActuator : public Actuator {
public:
OledActuator(uint8_t device_id, ModuleType type)
: Actuator(device_id, type),
m_text_message_builder(
std::make_unique<Flatbuffers::TextControlMessageBuilder>()) {}
double get_position() override;
std::string get_text() override;
void actuate(double position) override;
void actuate(double x, double y) override; // no-op
void actuate(const std::string &text) override;
std::vector<uint8_t> get_actuation_message() override;
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
private:
std::string m_current_text = "";
std::string m_target_text = "";
std::unique_ptr<Flatbuffers::TextControlMessageBuilder>
m_text_message_builder;
};
#endif // CONTROL_OLEDACTUATOR_H

View File

@@ -5,30 +5,35 @@
#ifndef CONTROL_1DPOSITIONALACTUATOR_H
#define CONTROL_1DPOSITIONALACTUATOR_H
#include <string>
#include "actuators/Actuator.h"
#include "flatbuffers/AngleControlMessageBuilder.h"
#include "flatbuffers/SensorMessageBuilder.h"
class PositionalActuator1D final : public Actuator {
public:
PositionalActuator1D(uint8_t device_id, ModuleType type)
: Actuator(device_id, type),
m_acm_builder(std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {};
public:
PositionalActuator1D(uint8_t device_id, ModuleType type)
: Actuator(device_id, type),
m_acm_builder(
std::make_unique<Flatbuffers::AngleControlMessageBuilder>()) {};
double get_position() override;
void actuate(double position) override;
void actuate(double x, double y) override; // no-op
double get_position() override;
std::string get_text() override; // no-op
void actuate(double position) override;
void actuate(const std::string &text) override; // no-op
void actuate(double x, double y) override; // no-op
std::vector<uint8_t> get_actuation_message() override;
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
std::vector<uint8_t> get_actuation_message() override;
void update_sensor_data(const Flatbuffers::sensor_value &value) override;
private:
void update_loop();
double m_target_position = 0;
double m_current_position = 0;
double m_board_target_position = 0;
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> m_acm_builder;
private:
void update_loop();
double m_target_position = 0;
double m_current_position = 0;
double m_board_target_position = 0;
std::unique_ptr<Flatbuffers::AngleControlMessageBuilder> m_acm_builder;
};
#endif // CONTROL_1DPOSITIONALACTUATOR_H

View File

@@ -14,15 +14,15 @@
namespace Flatbuffers {
class AngleControlMessageBuilder {
public:
AngleControlMessageBuilder() : builder_(256) {
}
public:
AngleControlMessageBuilder() : builder_(256) {}
SerializedMessage build_angle_control_message(int16_t angle);
static const Messaging::AngleControlMessage *parse_angle_control_message(const uint8_t *buffer);
SerializedMessage build_angle_control_message(int16_t angle);
static const Messaging::AngleControlMessage *
parse_angle_control_message(const uint8_t *buffer);
private:
flatbuffers::FlatBufferBuilder builder_;
private:
flatbuffers::FlatBufferBuilder builder_;
};
} // namespace Flatbuffers

View File

@@ -12,33 +12,32 @@
namespace Flatbuffers {
struct ModuleInstance {
uint8_t id;
ModuleType type;
int angle;
uint8_t id;
ModuleType type;
int angle;
};
struct ModuleConnectionInstance {
uint8_t from_module_id;
uint8_t to_module_id;
uint8_t from_socket;
uint8_t to_socket;
Orientation orientation;
uint8_t from_module_id;
uint8_t to_module_id;
uint8_t from_socket;
uint8_t to_socket;
Orientation orientation;
};
class RobotConfigurationBuilder {
public:
RobotConfigurationBuilder() : builder_(1024) {
}
public:
RobotConfigurationBuilder() : builder_(1024) {}
SerializedMessage
build_robot_configuration(const std::vector<ModuleInstance> &modules,
const std::vector<ModuleConnectionInstance> &connections);
SerializedMessage build_robot_configuration(
const std::vector<ModuleInstance> &modules,
const std::vector<ModuleConnectionInstance> &connections);
static const Frontend::RobotConfiguration *
parse_robot_configuration(const std::uint8_t *buffer);
static const Frontend::RobotConfiguration *
parse_robot_configuration(const std::uint8_t *buffer);
private:
flatbuffers::FlatBufferBuilder builder_;
private:
flatbuffers::FlatBufferBuilder builder_;
};
} // namespace Flatbuffers

View File

@@ -5,6 +5,7 @@
#ifndef SENSORMESSAGEBUILDER_H
#define SENSORMESSAGEBUILDER_H
#include <string>
#include <variant>
#include "flatbuffers_generated/SensorMessage_generated.h"
@@ -12,42 +13,52 @@
namespace Flatbuffers {
struct target_angle {
int16_t angle;
int16_t angle;
};
struct current_angle {
int16_t angle;
int16_t angle;
};
typedef std::variant<target_angle, current_angle> sensor_value;
struct current_text {
std::string text;
};
typedef std::variant<target_angle, current_angle, current_text> sensor_value;
class SensorMessageBuilder {
public:
SensorMessageBuilder() : builder_(1024) {
public:
SensorMessageBuilder() : builder_(1024) {}
static const Messaging::SensorMessage *
parse_sensor_message(const std::uint8_t *buffer);
template <typename T>
static std::optional<sensor_value>
build_sensor_value(Messaging::SensorValue type, T value) {
switch (type) {
case Messaging::SensorValue_TargetAngle: {
const Messaging::TargetAngle *target =
static_cast<const Messaging::TargetAngle *>(value);
return target_angle{target->value()};
}
static const Messaging::SensorMessage *parse_sensor_message(const std::uint8_t *buffer);
template <typename T>
static std::optional<sensor_value> build_sensor_value(Messaging::SensorValue type, T value) {
switch (type) {
case Messaging::SensorValue_TargetAngle: {
const Messaging::TargetAngle *target =
static_cast<const Messaging::TargetAngle *>(value);
return target_angle{target->value()};
}
case Messaging::SensorValue_CurrentAngle: {
const Messaging::CurrentAngle *current =
static_cast<const Messaging::CurrentAngle *>(value);
return current_angle{current->value()};
}
default:
return std::nullopt;
}
case Messaging::SensorValue_CurrentAngle: {
const Messaging::CurrentAngle *current =
static_cast<const Messaging::CurrentAngle *>(value);
return current_angle{current->value()};
}
case Messaging::SensorValue_CurrentText: {
const Messaging::CurrentText *current =
static_cast<const Messaging::CurrentText *>(value);
return current_text{current->value()->str()};
}
default:
return std::nullopt;
}
}
private:
flatbuffers::FlatBufferBuilder builder_;
private:
flatbuffers::FlatBufferBuilder builder_;
};
} // namespace Flatbuffers

View File

@@ -9,8 +9,8 @@
namespace Flatbuffers {
struct SerializedMessage {
void *data;
size_t size;
void *data;
size_t size;
};
} // namespace Flatbuffers

View File

@@ -0,0 +1,27 @@
//
// Created by Johnathon Slightham on 2025-06-30.
//
#ifndef TEXTCONTROLMESSAGEBUILDER_H_
#define TEXTCONTROLMESSAGEBUILDER_H_
#include <string>
#include <vector>
#include "SerializedMessage.h"
#include "flatbuffers/flatbuffers.h"
#include "flatbuffers_generated/TextControlMessage_generated.h"
namespace Flatbuffers {
class TextControlMessageBuilder {
public:
TextControlMessageBuilder() : builder_(256) {}
SerializedMessage build_text_control_message(std::string &t);
private:
flatbuffers::FlatBufferBuilder builder_;
};
} // namespace Flatbuffers
#endif

View File

@@ -12,20 +12,21 @@
namespace Flatbuffers {
class TopologyMessageBuilder {
public:
TopologyMessageBuilder() : builder_(1024) {
}
public:
TopologyMessageBuilder() : builder_(1024) {}
SerializedMessage build_topology_message(uint8_t module_id, ModuleType module_type,
const std::vector<uint8_t> &channel_to_module,
const std::vector<int8_t> &orientation_to_module);
SerializedMessage
build_topology_message(uint8_t module_id, ModuleType module_type,
const std::vector<uint8_t> &channel_to_module,
const std::vector<int8_t> &orientation_to_module);
static const Messaging::TopologyMessage *parse_topology_message(const uint8_t *buffer);
static const Messaging::TopologyMessage *
parse_topology_message(const uint8_t *buffer);
static bool is_valid_topology_message(const uint8_t *buffer, size_t size);
static bool is_valid_topology_message(const uint8_t *buffer, size_t size);
private:
flatbuffers::FlatBufferBuilder builder_;
private:
flatbuffers::FlatBufferBuilder builder_;
};
} // namespace Flatbuffers

View File

@@ -17,68 +17,76 @@ namespace Messaging {
struct AngleControlMessage;
struct AngleControlMessageBuilder;
struct AngleControlMessage FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef AngleControlMessageBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_ANGLE = 4 };
int16_t angle() const {
return GetField<int16_t>(VT_ANGLE, 0);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyField<int16_t>(verifier, VT_ANGLE, 2) &&
verifier.EndTable();
}
struct AngleControlMessage FLATBUFFERS_FINAL_CLASS
: private ::flatbuffers::Table {
typedef AngleControlMessageBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_ANGLE = 4
};
int16_t angle() const { return GetField<int16_t>(VT_ANGLE, 0); }
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int16_t>(verifier, VT_ANGLE, 2) && verifier.EndTable();
}
};
struct AngleControlMessageBuilder {
typedef AngleControlMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_angle(int16_t angle) {
fbb_.AddElement<int16_t>(AngleControlMessage::VT_ANGLE, angle, 0);
}
explicit AngleControlMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<AngleControlMessage> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<AngleControlMessage>(end);
return o;
}
typedef AngleControlMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_angle(int16_t angle) {
fbb_.AddElement<int16_t>(AngleControlMessage::VT_ANGLE, angle, 0);
}
explicit AngleControlMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<AngleControlMessage> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<AngleControlMessage>(end);
return o;
}
};
inline ::flatbuffers::Offset<AngleControlMessage>
CreateAngleControlMessage(::flatbuffers::FlatBufferBuilder &_fbb, int16_t angle = 0) {
AngleControlMessageBuilder builder_(_fbb);
builder_.add_angle(angle);
return builder_.Finish();
CreateAngleControlMessage(::flatbuffers::FlatBufferBuilder &_fbb,
int16_t angle = 0) {
AngleControlMessageBuilder builder_(_fbb);
builder_.add_angle(angle);
return builder_.Finish();
}
inline const Messaging::AngleControlMessage *GetAngleControlMessage(const void *buf) {
return ::flatbuffers::GetRoot<Messaging::AngleControlMessage>(buf);
inline const Messaging::AngleControlMessage *
GetAngleControlMessage(const void *buf) {
return ::flatbuffers::GetRoot<Messaging::AngleControlMessage>(buf);
}
inline const Messaging::AngleControlMessage *GetSizePrefixedAngleControlMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::AngleControlMessage>(buf);
inline const Messaging::AngleControlMessage *
GetSizePrefixedAngleControlMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::AngleControlMessage>(
buf);
}
inline bool VerifyAngleControlMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<Messaging::AngleControlMessage>(nullptr);
return verifier.VerifyBuffer<Messaging::AngleControlMessage>(nullptr);
}
inline bool VerifySizePrefixedAngleControlMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::AngleControlMessage>(nullptr);
inline bool
VerifySizePrefixedAngleControlMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::AngleControlMessage>(
nullptr);
}
inline void
FinishAngleControlMessageBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::AngleControlMessage> root) {
fbb.Finish(root);
inline void FinishAngleControlMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::AngleControlMessage> root) {
fbb.Finish(root);
}
inline void FinishSizePrefixedAngleControlMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::AngleControlMessage> root) {
fbb.FinishSizePrefixed(root);
fbb.FinishSizePrefixed(root);
}
} // namespace Messaging

View File

@@ -23,177 +23,195 @@ struct RobotConfiguration;
struct RobotConfigurationBuilder;
struct ModuleConnection FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef ModuleConnectionBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_FROM_MODULE_ID = 4,
VT_TO_MODULE_ID = 6,
VT_FROM_SOCKET = 8,
VT_TO_SOCKET = 10,
VT_ORIENTATION = 12
};
uint8_t from_module_id() const {
return GetField<uint8_t>(VT_FROM_MODULE_ID, 0);
}
uint8_t to_module_id() const {
return GetField<uint8_t>(VT_TO_MODULE_ID, 0);
}
uint8_t from_socket() const {
return GetField<uint8_t>(VT_FROM_SOCKET, 0);
}
uint8_t to_socket() const {
return GetField<uint8_t>(VT_TO_SOCKET, 0);
}
Orientation orientation() const {
return static_cast<Orientation>(GetField<int8_t>(VT_ORIENTATION, 0));
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyField<uint8_t>(verifier, VT_FROM_MODULE_ID, 1) &&
VerifyField<uint8_t>(verifier, VT_TO_MODULE_ID, 1) &&
VerifyField<uint8_t>(verifier, VT_FROM_SOCKET, 1) &&
VerifyField<uint8_t>(verifier, VT_TO_SOCKET, 1) &&
VerifyField<int8_t>(verifier, VT_ORIENTATION, 1) && verifier.EndTable();
}
typedef ModuleConnectionBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_FROM_MODULE_ID = 4,
VT_TO_MODULE_ID = 6,
VT_FROM_SOCKET = 8,
VT_TO_SOCKET = 10,
VT_ORIENTATION = 12
};
uint8_t from_module_id() const {
return GetField<uint8_t>(VT_FROM_MODULE_ID, 0);
}
uint8_t to_module_id() const { return GetField<uint8_t>(VT_TO_MODULE_ID, 0); }
uint8_t from_socket() const { return GetField<uint8_t>(VT_FROM_SOCKET, 0); }
uint8_t to_socket() const { return GetField<uint8_t>(VT_TO_SOCKET, 0); }
Orientation orientation() const {
return static_cast<Orientation>(GetField<int8_t>(VT_ORIENTATION, 0));
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<uint8_t>(verifier, VT_FROM_MODULE_ID, 1) &&
VerifyField<uint8_t>(verifier, VT_TO_MODULE_ID, 1) &&
VerifyField<uint8_t>(verifier, VT_FROM_SOCKET, 1) &&
VerifyField<uint8_t>(verifier, VT_TO_SOCKET, 1) &&
VerifyField<int8_t>(verifier, VT_ORIENTATION, 1) &&
verifier.EndTable();
}
};
struct ModuleConnectionBuilder {
typedef ModuleConnection Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_from_module_id(uint8_t from_module_id) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_FROM_MODULE_ID, from_module_id, 0);
}
void add_to_module_id(uint8_t to_module_id) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_TO_MODULE_ID, to_module_id, 0);
}
void add_from_socket(uint8_t from_socket) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_FROM_SOCKET, from_socket, 0);
}
void add_to_socket(uint8_t to_socket) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_TO_SOCKET, to_socket, 0);
}
void add_orientation(Orientation orientation) {
fbb_.AddElement<int8_t>(ModuleConnection::VT_ORIENTATION, static_cast<int8_t>(orientation),
0);
}
explicit ModuleConnectionBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<ModuleConnection> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<ModuleConnection>(end);
return o;
}
typedef ModuleConnection Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_from_module_id(uint8_t from_module_id) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_FROM_MODULE_ID,
from_module_id, 0);
}
void add_to_module_id(uint8_t to_module_id) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_TO_MODULE_ID, to_module_id,
0);
}
void add_from_socket(uint8_t from_socket) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_FROM_SOCKET, from_socket, 0);
}
void add_to_socket(uint8_t to_socket) {
fbb_.AddElement<uint8_t>(ModuleConnection::VT_TO_SOCKET, to_socket, 0);
}
void add_orientation(Orientation orientation) {
fbb_.AddElement<int8_t>(ModuleConnection::VT_ORIENTATION,
static_cast<int8_t>(orientation), 0);
}
explicit ModuleConnectionBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<ModuleConnection> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<ModuleConnection>(end);
return o;
}
};
inline ::flatbuffers::Offset<ModuleConnection>
CreateModuleConnection(::flatbuffers::FlatBufferBuilder &_fbb, uint8_t from_module_id = 0,
uint8_t to_module_id = 0, uint8_t from_socket = 0, uint8_t to_socket = 0,
CreateModuleConnection(::flatbuffers::FlatBufferBuilder &_fbb,
uint8_t from_module_id = 0, uint8_t to_module_id = 0,
uint8_t from_socket = 0, uint8_t to_socket = 0,
Orientation orientation = Orientation_Deg0) {
ModuleConnectionBuilder builder_(_fbb);
builder_.add_orientation(orientation);
builder_.add_to_socket(to_socket);
builder_.add_from_socket(from_socket);
builder_.add_to_module_id(to_module_id);
builder_.add_from_module_id(from_module_id);
return builder_.Finish();
ModuleConnectionBuilder builder_(_fbb);
builder_.add_orientation(orientation);
builder_.add_to_socket(to_socket);
builder_.add_from_socket(from_socket);
builder_.add_to_module_id(to_module_id);
builder_.add_from_module_id(from_module_id);
return builder_.Finish();
}
struct RobotConfiguration FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef RobotConfigurationBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_MODULES = 4,
VT_CONNECTIONS = 6
};
const ::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>> *modules() const {
return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>> *>(
VT_MODULES);
}
const ::flatbuffers::Vector<::flatbuffers::Offset<Frontend::ModuleConnection>> *
connections() const {
return GetPointer<
const ::flatbuffers::Vector<::flatbuffers::Offset<Frontend::ModuleConnection>> *>(
VT_CONNECTIONS);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_MODULES) &&
verifier.VerifyVector(modules()) && verifier.VerifyVectorOfTables(modules()) &&
VerifyOffset(verifier, VT_CONNECTIONS) && verifier.VerifyVector(connections()) &&
verifier.VerifyVectorOfTables(connections()) && verifier.EndTable();
}
struct RobotConfiguration FLATBUFFERS_FINAL_CLASS
: private ::flatbuffers::Table {
typedef RobotConfigurationBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_MODULES = 4,
VT_CONNECTIONS = 6
};
const ::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>> *
modules() const {
return GetPointer<
const ::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>> *>(
VT_MODULES);
}
const ::flatbuffers::Vector<
::flatbuffers::Offset<Frontend::ModuleConnection>> *
connections() const {
return GetPointer<const ::flatbuffers::Vector<
::flatbuffers::Offset<Frontend::ModuleConnection>> *>(VT_CONNECTIONS);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_MODULES) &&
verifier.VerifyVector(modules()) &&
verifier.VerifyVectorOfTables(modules()) &&
VerifyOffset(verifier, VT_CONNECTIONS) &&
verifier.VerifyVector(connections()) &&
verifier.VerifyVectorOfTables(connections()) && verifier.EndTable();
}
};
struct RobotConfigurationBuilder {
typedef RobotConfiguration Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_modules(
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>>> modules) {
fbb_.AddOffset(RobotConfiguration::VT_MODULES, modules);
}
void add_connections(::flatbuffers::Offset<
::flatbuffers::Vector<::flatbuffers::Offset<Frontend::ModuleConnection>>>
connections) {
fbb_.AddOffset(RobotConfiguration::VT_CONNECTIONS, connections);
}
explicit RobotConfigurationBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<RobotConfiguration> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<RobotConfiguration>(end);
return o;
}
typedef RobotConfiguration Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_modules(::flatbuffers::Offset<
::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>>>
modules) {
fbb_.AddOffset(RobotConfiguration::VT_MODULES, modules);
}
void add_connections(::flatbuffers::Offset<::flatbuffers::Vector<
::flatbuffers::Offset<Frontend::ModuleConnection>>>
connections) {
fbb_.AddOffset(RobotConfiguration::VT_CONNECTIONS, connections);
}
explicit RobotConfigurationBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<RobotConfiguration> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<RobotConfiguration>(end);
return o;
}
};
inline ::flatbuffers::Offset<RobotConfiguration> CreateRobotConfiguration(
::flatbuffers::FlatBufferBuilder &_fbb,
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>>> modules = 0,
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<Frontend::ModuleConnection>>>
::flatbuffers::Offset<
::flatbuffers::Vector<::flatbuffers::Offset<RobotModule>>>
modules = 0,
::flatbuffers::Offset<::flatbuffers::Vector<
::flatbuffers::Offset<Frontend::ModuleConnection>>>
connections = 0) {
RobotConfigurationBuilder builder_(_fbb);
builder_.add_connections(connections);
builder_.add_modules(modules);
return builder_.Finish();
RobotConfigurationBuilder builder_(_fbb);
builder_.add_connections(connections);
builder_.add_modules(modules);
return builder_.Finish();
}
inline ::flatbuffers::Offset<RobotConfiguration> CreateRobotConfigurationDirect(
::flatbuffers::FlatBufferBuilder &_fbb,
const std::vector<::flatbuffers::Offset<RobotModule>> *modules = nullptr,
const std::vector<::flatbuffers::Offset<Frontend::ModuleConnection>> *connections = nullptr) {
auto modules__ = modules ? _fbb.CreateVector<::flatbuffers::Offset<RobotModule>>(*modules) : 0;
auto connections__ =
connections
? _fbb.CreateVector<::flatbuffers::Offset<Frontend::ModuleConnection>>(*connections)
: 0;
return Frontend::CreateRobotConfiguration(_fbb, modules__, connections__);
const std::vector<::flatbuffers::Offset<Frontend::ModuleConnection>>
*connections = nullptr) {
auto modules__ =
modules ? _fbb.CreateVector<::flatbuffers::Offset<RobotModule>>(*modules)
: 0;
auto connections__ =
connections
? _fbb.CreateVector<
::flatbuffers::Offset<Frontend::ModuleConnection>>(*connections)
: 0;
return Frontend::CreateRobotConfiguration(_fbb, modules__, connections__);
}
inline const Frontend::RobotConfiguration *GetRobotConfiguration(const void *buf) {
return ::flatbuffers::GetRoot<Frontend::RobotConfiguration>(buf);
inline const Frontend::RobotConfiguration *
GetRobotConfiguration(const void *buf) {
return ::flatbuffers::GetRoot<Frontend::RobotConfiguration>(buf);
}
inline const Frontend::RobotConfiguration *GetSizePrefixedRobotConfiguration(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Frontend::RobotConfiguration>(buf);
inline const Frontend::RobotConfiguration *
GetSizePrefixedRobotConfiguration(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Frontend::RobotConfiguration>(buf);
}
inline bool VerifyRobotConfigurationBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<Frontend::RobotConfiguration>(nullptr);
return verifier.VerifyBuffer<Frontend::RobotConfiguration>(nullptr);
}
inline bool VerifySizePrefixedRobotConfigurationBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Frontend::RobotConfiguration>(nullptr);
inline bool
VerifySizePrefixedRobotConfigurationBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Frontend::RobotConfiguration>(
nullptr);
}
inline void
FinishRobotConfigurationBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Frontend::RobotConfiguration> root) {
fbb.Finish(root);
inline void FinishRobotConfigurationBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Frontend::RobotConfiguration> root) {
fbb.Finish(root);
}
inline void FinishSizePrefixedRobotConfigurationBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Frontend::RobotConfiguration> root) {
fbb.FinishSizePrefixed(root);
fbb.FinishSizePrefixed(root);
}
} // namespace Frontend

View File

@@ -19,200 +19,227 @@ struct RobotModule;
struct RobotModuleBuilder;
enum ModuleType : int8_t {
ModuleType_SPLITTER = 0,
ModuleType_SERVO_1 = 1,
ModuleType_DC_MOTOR = 2,
ModuleType_BATTERY = 3,
ModuleType_SERVO_2 = 4,
ModuleType_MIN = ModuleType_SPLITTER,
ModuleType_MAX = ModuleType_SERVO_2
ModuleType_SPLITTER = 0,
ModuleType_SERVO_1 = 1,
ModuleType_DC_MOTOR = 2,
ModuleType_BATTERY = 3,
ModuleType_SERVO_2 = 4,
ModuleType_DISPLAY = 5,
ModuleType_GRIPPER = 6,
ModuleType_SPEAKER = 7,
ModuleType_IMU = 8,
ModuleType_DISTANCE_SENSOR = 9,
ModuleType_SPLITTER_2 = 10,
ModuleType_SPLITTER_3 = 11,
ModuleType_SPLITTER_4 = 12,
ModuleType_SPLITTER_5 = 13,
ModuleType_SPLITTER_6 = 14,
ModuleType_SPLITTER_7 = 15,
ModuleType_SPLITTER_8 = 16,
ModuleType_MIN = ModuleType_SPLITTER,
ModuleType_MAX = ModuleType_SPLITTER_8
};
inline const ModuleType (&EnumValuesModuleType())[5] {
static const ModuleType values[] = {ModuleType_SPLITTER, ModuleType_SERVO_1,
ModuleType_DC_MOTOR, ModuleType_BATTERY,
ModuleType_SERVO_2};
return values;
inline const ModuleType (&EnumValuesModuleType())[17] {
static const ModuleType values[] = {
ModuleType_SPLITTER, ModuleType_SERVO_1, ModuleType_DC_MOTOR,
ModuleType_BATTERY, ModuleType_SERVO_2, ModuleType_DISPLAY,
ModuleType_GRIPPER, ModuleType_SPEAKER, ModuleType_IMU,
ModuleType_DISTANCE_SENSOR, ModuleType_SPLITTER_2, ModuleType_SPLITTER_3,
ModuleType_SPLITTER_4, ModuleType_SPLITTER_5, ModuleType_SPLITTER_6,
ModuleType_SPLITTER_7, ModuleType_SPLITTER_8};
return values;
}
inline const char *const *EnumNamesModuleType() {
static const char *const names[6] = {"SPLITTER", "SERVO_1", "DC_MOTOR",
"BATTERY", "SERVO_2", nullptr};
return names;
static const char *const names[18] = {
"SPLITTER", "SERVO_1", "DC_MOTOR", "BATTERY", "SERVO_2",
"DISPLAY", "GRIPPER", "SPEAKER", "IMU", "DISTANCE_SENSOR",
"SPLITTER_2", "SPLITTER_3", "SPLITTER_4", "SPLITTER_5", "SPLITTER_6",
"SPLITTER_7", "SPLITTER_8", nullptr};
return names;
}
inline const char *EnumNameModuleType(ModuleType e) {
if (::flatbuffers::IsOutRange(e, ModuleType_SPLITTER, ModuleType_SERVO_2))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesModuleType()[index];
if (::flatbuffers::IsOutRange(e, ModuleType_SPLITTER, ModuleType_SPLITTER_8))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesModuleType()[index];
}
enum Orientation : int8_t {
Orientation_Deg0 = 0,
Orientation_Deg90 = 1,
Orientation_Deg180 = 2,
Orientation_Deg270 = 3,
Orientation_MIN = Orientation_Deg0,
Orientation_MAX = Orientation_Deg270
Orientation_Deg0 = 0,
Orientation_Deg90 = 1,
Orientation_Deg180 = 2,
Orientation_Deg270 = 3,
Orientation_MIN = Orientation_Deg0,
Orientation_MAX = Orientation_Deg270
};
inline const Orientation (&EnumValuesOrientation())[4] {
static const Orientation values[] = {Orientation_Deg0, Orientation_Deg90, Orientation_Deg180,
Orientation_Deg270};
return values;
static const Orientation values[] = {Orientation_Deg0, Orientation_Deg90,
Orientation_Deg180, Orientation_Deg270};
return values;
}
inline const char *const *EnumNamesOrientation() {
static const char *const names[5] = {"Deg0", "Deg90", "Deg180", "Deg270", nullptr};
return names;
static const char *const names[5] = {"Deg0", "Deg90", "Deg180", "Deg270",
nullptr};
return names;
}
inline const char *EnumNameOrientation(Orientation e) {
if (::flatbuffers::IsOutRange(e, Orientation_Deg0, Orientation_Deg270))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesOrientation()[index];
if (::flatbuffers::IsOutRange(e, Orientation_Deg0, Orientation_Deg270))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesOrientation()[index];
}
enum ModuleState : uint8_t {
ModuleState_NONE = 0,
ModuleState_MotorState = 1,
ModuleState_MIN = ModuleState_NONE,
ModuleState_MAX = ModuleState_MotorState
ModuleState_NONE = 0,
ModuleState_MotorState = 1,
ModuleState_MIN = ModuleState_NONE,
ModuleState_MAX = ModuleState_MotorState
};
inline const ModuleState (&EnumValuesModuleState())[2] {
static const ModuleState values[] = {ModuleState_NONE, ModuleState_MotorState};
return values;
static const ModuleState values[] = {ModuleState_NONE,
ModuleState_MotorState};
return values;
}
inline const char *const *EnumNamesModuleState() {
static const char *const names[3] = {"NONE", "MotorState", nullptr};
return names;
static const char *const names[3] = {"NONE", "MotorState", nullptr};
return names;
}
inline const char *EnumNameModuleState(ModuleState e) {
if (::flatbuffers::IsOutRange(e, ModuleState_NONE, ModuleState_MotorState))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesModuleState()[index];
if (::flatbuffers::IsOutRange(e, ModuleState_NONE, ModuleState_MotorState))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesModuleState()[index];
}
template <typename T> struct ModuleStateTraits {
static const ModuleState enum_value = ModuleState_NONE;
static const ModuleState enum_value = ModuleState_NONE;
};
template <> struct ModuleStateTraits<MotorState> {
static const ModuleState enum_value = ModuleState_MotorState;
static const ModuleState enum_value = ModuleState_MotorState;
};
bool VerifyModuleState(::flatbuffers::Verifier &verifier, const void *obj, ModuleState type);
bool VerifyModuleStateVector(::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types);
bool VerifyModuleState(::flatbuffers::Verifier &verifier, const void *obj,
ModuleState type);
bool VerifyModuleStateVector(
::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types);
struct MotorState FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef MotorStateBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_ANGLE = 4 };
int32_t angle() const {
return GetField<int32_t>(VT_ANGLE, 0);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyField<int32_t>(verifier, VT_ANGLE, 4) &&
verifier.EndTable();
}
typedef MotorStateBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_ANGLE = 4
};
int32_t angle() const { return GetField<int32_t>(VT_ANGLE, 0); }
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int32_t>(verifier, VT_ANGLE, 4) && verifier.EndTable();
}
};
struct MotorStateBuilder {
typedef MotorState Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_angle(int32_t angle) {
fbb_.AddElement<int32_t>(MotorState::VT_ANGLE, angle, 0);
}
explicit MotorStateBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<MotorState> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<MotorState>(end);
return o;
}
typedef MotorState Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_angle(int32_t angle) {
fbb_.AddElement<int32_t>(MotorState::VT_ANGLE, angle, 0);
}
explicit MotorStateBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<MotorState> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<MotorState>(end);
return o;
}
};
inline ::flatbuffers::Offset<MotorState> CreateMotorState(::flatbuffers::FlatBufferBuilder &_fbb,
int32_t angle = 0) {
MotorStateBuilder builder_(_fbb);
builder_.add_angle(angle);
return builder_.Finish();
inline ::flatbuffers::Offset<MotorState>
CreateMotorState(::flatbuffers::FlatBufferBuilder &_fbb, int32_t angle = 0) {
MotorStateBuilder builder_(_fbb);
builder_.add_angle(angle);
return builder_.Finish();
}
struct RobotModule FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef RobotModuleBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_ID = 4,
VT_MODULE_TYPE = 6,
VT_CONFIGURATION_TYPE = 8,
VT_CONFIGURATION = 10
};
uint8_t id() const {
return GetField<uint8_t>(VT_ID, 0);
}
ModuleType module_type() const {
return static_cast<ModuleType>(GetField<int8_t>(VT_MODULE_TYPE, 0));
}
ModuleState configuration_type() const {
return static_cast<ModuleState>(GetField<uint8_t>(VT_CONFIGURATION_TYPE, 0));
}
const void *configuration() const {
return GetPointer<const void *>(VT_CONFIGURATION);
}
template <typename T> const T *configuration_as() const;
const MotorState *configuration_as_MotorState() const {
return configuration_type() == ModuleState_MotorState
? static_cast<const MotorState *>(configuration())
: nullptr;
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyField<uint8_t>(verifier, VT_ID, 1) &&
VerifyField<int8_t>(verifier, VT_MODULE_TYPE, 1) &&
VerifyField<uint8_t>(verifier, VT_CONFIGURATION_TYPE, 1) &&
VerifyOffset(verifier, VT_CONFIGURATION) &&
VerifyModuleState(verifier, configuration(), configuration_type()) &&
verifier.EndTable();
}
typedef RobotModuleBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_ID = 4,
VT_MODULE_TYPE = 6,
VT_CONFIGURATION_TYPE = 8,
VT_CONFIGURATION = 10
};
uint8_t id() const { return GetField<uint8_t>(VT_ID, 0); }
ModuleType module_type() const {
return static_cast<ModuleType>(GetField<int8_t>(VT_MODULE_TYPE, 0));
}
ModuleState configuration_type() const {
return static_cast<ModuleState>(
GetField<uint8_t>(VT_CONFIGURATION_TYPE, 0));
}
const void *configuration() const {
return GetPointer<const void *>(VT_CONFIGURATION);
}
template <typename T> const T *configuration_as() const;
const MotorState *configuration_as_MotorState() const {
return configuration_type() == ModuleState_MotorState
? static_cast<const MotorState *>(configuration())
: nullptr;
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<uint8_t>(verifier, VT_ID, 1) &&
VerifyField<int8_t>(verifier, VT_MODULE_TYPE, 1) &&
VerifyField<uint8_t>(verifier, VT_CONFIGURATION_TYPE, 1) &&
VerifyOffset(verifier, VT_CONFIGURATION) &&
VerifyModuleState(verifier, configuration(), configuration_type()) &&
verifier.EndTable();
}
};
template <> inline const MotorState *RobotModule::configuration_as<MotorState>() const {
return configuration_as_MotorState();
template <>
inline const MotorState *RobotModule::configuration_as<MotorState>() const {
return configuration_as_MotorState();
}
struct RobotModuleBuilder {
typedef RobotModule Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_id(uint8_t id) {
fbb_.AddElement<uint8_t>(RobotModule::VT_ID, id, 0);
}
void add_module_type(ModuleType module_type) {
fbb_.AddElement<int8_t>(RobotModule::VT_MODULE_TYPE, static_cast<int8_t>(module_type), 0);
}
void add_configuration_type(ModuleState configuration_type) {
fbb_.AddElement<uint8_t>(RobotModule::VT_CONFIGURATION_TYPE,
static_cast<uint8_t>(configuration_type), 0);
}
void add_configuration(::flatbuffers::Offset<void> configuration) {
fbb_.AddOffset(RobotModule::VT_CONFIGURATION, configuration);
}
explicit RobotModuleBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<RobotModule> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<RobotModule>(end);
return o;
}
typedef RobotModule Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_id(uint8_t id) {
fbb_.AddElement<uint8_t>(RobotModule::VT_ID, id, 0);
}
void add_module_type(ModuleType module_type) {
fbb_.AddElement<int8_t>(RobotModule::VT_MODULE_TYPE,
static_cast<int8_t>(module_type), 0);
}
void add_configuration_type(ModuleState configuration_type) {
fbb_.AddElement<uint8_t>(RobotModule::VT_CONFIGURATION_TYPE,
static_cast<uint8_t>(configuration_type), 0);
}
void add_configuration(::flatbuffers::Offset<void> configuration) {
fbb_.AddOffset(RobotModule::VT_CONFIGURATION, configuration);
}
explicit RobotModuleBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<RobotModule> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<RobotModule>(end);
return o;
}
};
inline ::flatbuffers::Offset<RobotModule>
@@ -220,69 +247,72 @@ CreateRobotModule(::flatbuffers::FlatBufferBuilder &_fbb, uint8_t id = 0,
ModuleType module_type = ModuleType_SPLITTER,
ModuleState configuration_type = ModuleState_NONE,
::flatbuffers::Offset<void> configuration = 0) {
RobotModuleBuilder builder_(_fbb);
builder_.add_configuration(configuration);
builder_.add_configuration_type(configuration_type);
builder_.add_module_type(module_type);
builder_.add_id(id);
return builder_.Finish();
RobotModuleBuilder builder_(_fbb);
builder_.add_configuration(configuration);
builder_.add_configuration_type(configuration_type);
builder_.add_module_type(module_type);
builder_.add_id(id);
return builder_.Finish();
}
inline bool VerifyModuleState(::flatbuffers::Verifier &verifier, const void *obj,
ModuleState type) {
switch (type) {
case ModuleState_NONE: {
return true;
}
case ModuleState_MotorState: {
auto ptr = reinterpret_cast<const MotorState *>(obj);
return verifier.VerifyTable(ptr);
}
default:
return true;
}
}
inline bool
VerifyModuleStateVector(::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types) {
if (!values || !types)
return !values && !types;
if (values->size() != types->size())
return false;
for (::flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
if (!VerifyModuleState(verifier, values->Get(i), types->GetEnum<ModuleState>(i))) {
return false;
}
}
inline bool VerifyModuleState(::flatbuffers::Verifier &verifier,
const void *obj, ModuleState type) {
switch (type) {
case ModuleState_NONE: {
return true;
}
case ModuleState_MotorState: {
auto ptr = reinterpret_cast<const MotorState *>(obj);
return verifier.VerifyTable(ptr);
}
default:
return true;
}
}
inline bool VerifyModuleStateVector(
::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types) {
if (!values || !types)
return !values && !types;
if (values->size() != types->size())
return false;
for (::flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
if (!VerifyModuleState(verifier, values->Get(i),
types->GetEnum<ModuleState>(i))) {
return false;
}
}
return true;
}
inline const RobotModule *GetRobotModule(const void *buf) {
return ::flatbuffers::GetRoot<RobotModule>(buf);
return ::flatbuffers::GetRoot<RobotModule>(buf);
}
inline const RobotModule *GetSizePrefixedRobotModule(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<RobotModule>(buf);
return ::flatbuffers::GetSizePrefixedRoot<RobotModule>(buf);
}
inline bool VerifyRobotModuleBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<RobotModule>(nullptr);
return verifier.VerifyBuffer<RobotModule>(nullptr);
}
inline bool VerifySizePrefixedRobotModuleBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<RobotModule>(nullptr);
inline bool
VerifySizePrefixedRobotModuleBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<RobotModule>(nullptr);
}
inline void FinishRobotModuleBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<RobotModule> root) {
fbb.Finish(root);
fbb.Finish(root);
}
inline void FinishSizePrefixedRobotModuleBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<RobotModule> root) {
fbb.FinishSizePrefixed(root);
inline void
FinishSizePrefixedRobotModuleBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<RobotModule> root) {
fbb.FinishSizePrefixed(root);
}
#endif // FLATBUFFERS_GENERATED_ROBOTMODULE_H_

View File

@@ -8,15 +8,18 @@
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
// static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
// FLATBUFFERS_VERSION_MINOR == 2 &&
// FLATBUFFERS_VERSION_REVISION == 10,
// "Non-compatible flatbuffers version included");
// FLATBUFFERS_VERSION_MINOR == 2 &&
// FLATBUFFERS_VERSION_REVISION == 10,
// "Non-compatible flatbuffers version included");
namespace Messaging {
struct TargetAngle;
struct TargetAngleBuilder;
struct CurrentText;
struct CurrentTextBuilder;
struct CurrentAngle;
struct CurrentAngleBuilder;
@@ -24,240 +27,316 @@ struct SensorMessage;
struct SensorMessageBuilder;
enum SensorValue : uint8_t {
SensorValue_NONE = 0,
SensorValue_TargetAngle = 1,
SensorValue_CurrentAngle = 2,
SensorValue_MIN = SensorValue_NONE,
SensorValue_MAX = SensorValue_CurrentAngle
SensorValue_NONE = 0,
SensorValue_TargetAngle = 1,
SensorValue_CurrentAngle = 2,
SensorValue_CurrentText = 3,
SensorValue_MIN = SensorValue_NONE,
SensorValue_MAX = SensorValue_CurrentText
};
inline const SensorValue (&EnumValuesSensorValue())[3] {
static const SensorValue values[] = {SensorValue_NONE, SensorValue_TargetAngle,
SensorValue_CurrentAngle};
return values;
inline const SensorValue (&EnumValuesSensorValue())[4] {
static const SensorValue values[] = {
SensorValue_NONE, SensorValue_TargetAngle, SensorValue_CurrentAngle,
SensorValue_CurrentText};
return values;
}
inline const char *const *EnumNamesSensorValue() {
static const char *const names[4] = {"NONE", "TargetAngle", "CurrentAngle", nullptr};
return names;
static const char *const names[5] = {"NONE", "TargetAngle", "CurrentAngle",
"CurrentText", nullptr};
return names;
}
inline const char *EnumNameSensorValue(SensorValue e) {
if (::flatbuffers::IsOutRange(e, SensorValue_NONE, SensorValue_CurrentAngle))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesSensorValue()[index];
if (::flatbuffers::IsOutRange(e, SensorValue_NONE, SensorValue_CurrentText))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesSensorValue()[index];
}
template <typename T> struct SensorValueTraits {
static const SensorValue enum_value = SensorValue_NONE;
static const SensorValue enum_value = SensorValue_NONE;
};
template <> struct SensorValueTraits<Messaging::TargetAngle> {
static const SensorValue enum_value = SensorValue_TargetAngle;
static const SensorValue enum_value = SensorValue_TargetAngle;
};
template <> struct SensorValueTraits<Messaging::CurrentAngle> {
static const SensorValue enum_value = SensorValue_CurrentAngle;
static const SensorValue enum_value = SensorValue_CurrentAngle;
};
bool VerifySensorValue(::flatbuffers::Verifier &verifier, const void *obj, SensorValue type);
bool VerifySensorValueVector(::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types);
template <> struct SensorValueTraits<Messaging::CurrentText> {
static const SensorValue enum_value = SensorValue_CurrentText;
};
bool VerifySensorValue(::flatbuffers::Verifier &verifier, const void *obj,
SensorValue type);
bool VerifySensorValueVector(
::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types);
struct TargetAngle FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef TargetAngleBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_VALUE = 4 };
int16_t value() const {
return GetField<int16_t>(VT_VALUE, 0);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyField<int16_t>(verifier, VT_VALUE, 2) &&
verifier.EndTable();
}
typedef TargetAngleBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_VALUE = 4
};
int16_t value() const { return GetField<int16_t>(VT_VALUE, 0); }
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int16_t>(verifier, VT_VALUE, 2) && verifier.EndTable();
}
};
struct TargetAngleBuilder {
typedef TargetAngle Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_value(int16_t value) {
fbb_.AddElement<int16_t>(TargetAngle::VT_VALUE, value, 0);
}
explicit TargetAngleBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<TargetAngle> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<TargetAngle>(end);
return o;
}
typedef TargetAngle Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_value(int16_t value) {
fbb_.AddElement<int16_t>(TargetAngle::VT_VALUE, value, 0);
}
explicit TargetAngleBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<TargetAngle> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<TargetAngle>(end);
return o;
}
};
inline ::flatbuffers::Offset<TargetAngle> CreateTargetAngle(::flatbuffers::FlatBufferBuilder &_fbb,
int16_t value = 0) {
TargetAngleBuilder builder_(_fbb);
builder_.add_value(value);
return builder_.Finish();
inline ::flatbuffers::Offset<TargetAngle>
CreateTargetAngle(::flatbuffers::FlatBufferBuilder &_fbb, int16_t value = 0) {
TargetAngleBuilder builder_(_fbb);
builder_.add_value(value);
return builder_.Finish();
}
struct CurrentText FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef CurrentTextBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_VALUE = 4
};
const ::flatbuffers::String *value() const {
return GetPointer<const ::flatbuffers::String *>(VT_VALUE);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_VALUE) &&
verifier.VerifyString(value()) && verifier.EndTable();
}
};
struct CurrentTextBuilder {
typedef CurrentText Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_value(::flatbuffers::Offset<::flatbuffers::String> value) {
fbb_.AddOffset(CurrentText::VT_VALUE, value);
}
explicit CurrentTextBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<CurrentText> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<CurrentText>(end);
return o;
}
};
inline ::flatbuffers::Offset<CurrentText>
CreateCurrentText(::flatbuffers::FlatBufferBuilder &_fbb,
::flatbuffers::Offset<::flatbuffers::String> value = 0) {
CurrentTextBuilder builder_(_fbb);
builder_.add_value(value);
return builder_.Finish();
}
inline ::flatbuffers::Offset<CurrentText>
CreateCurrentTextDirect(::flatbuffers::FlatBufferBuilder &_fbb,
const char *value = nullptr) {
auto value__ = value ? _fbb.CreateString(value) : 0;
return Messaging::CreateCurrentText(_fbb, value__);
}
struct CurrentAngle FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef CurrentAngleBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_VALUE = 4 };
int16_t value() const {
return GetField<int16_t>(VT_VALUE, 0);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyField<int16_t>(verifier, VT_VALUE, 2) &&
verifier.EndTable();
}
typedef CurrentAngleBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_VALUE = 4
};
int16_t value() const { return GetField<int16_t>(VT_VALUE, 0); }
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int16_t>(verifier, VT_VALUE, 2) && verifier.EndTable();
}
};
struct CurrentAngleBuilder {
typedef CurrentAngle Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_value(int16_t value) {
fbb_.AddElement<int16_t>(CurrentAngle::VT_VALUE, value, 0);
}
explicit CurrentAngleBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<CurrentAngle> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<CurrentAngle>(end);
return o;
}
typedef CurrentAngle Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_value(int16_t value) {
fbb_.AddElement<int16_t>(CurrentAngle::VT_VALUE, value, 0);
}
explicit CurrentAngleBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<CurrentAngle> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<CurrentAngle>(end);
return o;
}
};
inline ::flatbuffers::Offset<CurrentAngle>
CreateCurrentAngle(::flatbuffers::FlatBufferBuilder &_fbb, int16_t value = 0) {
CurrentAngleBuilder builder_(_fbb);
builder_.add_value(value);
return builder_.Finish();
CurrentAngleBuilder builder_(_fbb);
builder_.add_value(value);
return builder_.Finish();
}
struct SensorMessage FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef SensorMessageBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_VALUES_TYPE = 4,
VT_VALUES = 6
};
const ::flatbuffers::Vector<uint8_t> *values_type() const {
return GetPointer<const ::flatbuffers::Vector<uint8_t> *>(VT_VALUES_TYPE);
}
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values() const {
return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *>(VT_VALUES);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_VALUES_TYPE) &&
verifier.VerifyVector(values_type()) && VerifyOffset(verifier, VT_VALUES) &&
verifier.VerifyVector(values()) &&
VerifySensorValueVector(verifier, values(), values_type()) && verifier.EndTable();
}
typedef SensorMessageBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_VALUES_TYPE = 4,
VT_VALUES = 6
};
const ::flatbuffers::Vector<uint8_t> *values_type() const {
return GetPointer<const ::flatbuffers::Vector<uint8_t> *>(VT_VALUES_TYPE);
}
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values() const {
return GetPointer<
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *>(VT_VALUES);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyOffset(verifier, VT_VALUES_TYPE) &&
verifier.VerifyVector(values_type()) &&
VerifyOffset(verifier, VT_VALUES) &&
verifier.VerifyVector(values()) &&
VerifySensorValueVector(verifier, values(), values_type()) &&
verifier.EndTable();
}
};
struct SensorMessageBuilder {
typedef SensorMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_values_type(::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> values_type) {
fbb_.AddOffset(SensorMessage::VT_VALUES_TYPE, values_type);
}
void
add_values(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<void>>> values) {
fbb_.AddOffset(SensorMessage::VT_VALUES, values);
}
explicit SensorMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<SensorMessage> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<SensorMessage>(end);
return o;
}
typedef SensorMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_values_type(
::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> values_type) {
fbb_.AddOffset(SensorMessage::VT_VALUES_TYPE, values_type);
}
void add_values(
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<void>>>
values) {
fbb_.AddOffset(SensorMessage::VT_VALUES, values);
}
explicit SensorMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<SensorMessage> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<SensorMessage>(end);
return o;
}
};
inline ::flatbuffers::Offset<SensorMessage> CreateSensorMessage(
::flatbuffers::FlatBufferBuilder &_fbb,
::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> values_type = 0,
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<void>>> values = 0) {
SensorMessageBuilder builder_(_fbb);
builder_.add_values(values);
builder_.add_values_type(values_type);
return builder_.Finish();
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<void>>>
values = 0) {
SensorMessageBuilder builder_(_fbb);
builder_.add_values(values);
builder_.add_values_type(values_type);
return builder_.Finish();
}
inline ::flatbuffers::Offset<SensorMessage>
CreateSensorMessageDirect(::flatbuffers::FlatBufferBuilder &_fbb,
const std::vector<uint8_t> *values_type = nullptr,
const std::vector<::flatbuffers::Offset<void>> *values = nullptr) {
auto values_type__ = values_type ? _fbb.CreateVector<uint8_t>(*values_type) : 0;
auto values__ = values ? _fbb.CreateVector<::flatbuffers::Offset<void>>(*values) : 0;
return Messaging::CreateSensorMessage(_fbb, values_type__, values__);
inline ::flatbuffers::Offset<SensorMessage> CreateSensorMessageDirect(
::flatbuffers::FlatBufferBuilder &_fbb,
const std::vector<uint8_t> *values_type = nullptr,
const std::vector<::flatbuffers::Offset<void>> *values = nullptr) {
auto values_type__ =
values_type ? _fbb.CreateVector<uint8_t>(*values_type) : 0;
auto values__ =
values ? _fbb.CreateVector<::flatbuffers::Offset<void>>(*values) : 0;
return Messaging::CreateSensorMessage(_fbb, values_type__, values__);
}
inline bool VerifySensorValue(::flatbuffers::Verifier &verifier, const void *obj,
SensorValue type) {
switch (type) {
case SensorValue_NONE: {
return true;
}
case SensorValue_TargetAngle: {
auto ptr = reinterpret_cast<const Messaging::TargetAngle *>(obj);
return verifier.VerifyTable(ptr);
}
case SensorValue_CurrentAngle: {
auto ptr = reinterpret_cast<const Messaging::CurrentAngle *>(obj);
return verifier.VerifyTable(ptr);
}
default:
return true;
}
}
inline bool
VerifySensorValueVector(::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types) {
if (!values || !types)
return !values && !types;
if (values->size() != types->size())
return false;
for (::flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
if (!VerifySensorValue(verifier, values->Get(i), types->GetEnum<SensorValue>(i))) {
return false;
}
}
inline bool VerifySensorValue(::flatbuffers::Verifier &verifier,
const void *obj, SensorValue type) {
switch (type) {
case SensorValue_NONE: {
return true;
}
case SensorValue_TargetAngle: {
auto ptr = reinterpret_cast<const Messaging::TargetAngle *>(obj);
return verifier.VerifyTable(ptr);
}
case SensorValue_CurrentAngle: {
auto ptr = reinterpret_cast<const Messaging::CurrentAngle *>(obj);
return verifier.VerifyTable(ptr);
}
case SensorValue_CurrentText: {
auto ptr = reinterpret_cast<const Messaging::CurrentText *>(obj);
return verifier.VerifyTable(ptr);
}
default:
return true;
}
}
inline bool VerifySensorValueVector(
::flatbuffers::Verifier &verifier,
const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *values,
const ::flatbuffers::Vector<uint8_t> *types) {
if (!values || !types)
return !values && !types;
if (values->size() != types->size())
return false;
for (::flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
if (!VerifySensorValue(verifier, values->Get(i),
types->GetEnum<SensorValue>(i))) {
return false;
}
}
return true;
}
inline const Messaging::SensorMessage *GetSensorMessage(const void *buf) {
return ::flatbuffers::GetRoot<Messaging::SensorMessage>(buf);
return ::flatbuffers::GetRoot<Messaging::SensorMessage>(buf);
}
inline const Messaging::SensorMessage *GetSizePrefixedSensorMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::SensorMessage>(buf);
inline const Messaging::SensorMessage *
GetSizePrefixedSensorMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::SensorMessage>(buf);
}
inline bool VerifySensorMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<Messaging::SensorMessage>(nullptr);
return verifier.VerifyBuffer<Messaging::SensorMessage>(nullptr);
}
inline bool VerifySizePrefixedSensorMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::SensorMessage>(nullptr);
inline bool
VerifySizePrefixedSensorMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::SensorMessage>(nullptr);
}
inline void FinishSensorMessageBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::SensorMessage> root) {
fbb.Finish(root);
inline void FinishSensorMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::SensorMessage> root) {
fbb.Finish(root);
}
inline void
FinishSizePrefixedSensorMessageBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::SensorMessage> root) {
fbb.FinishSizePrefixed(root);
inline void FinishSizePrefixedSensorMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::SensorMessage> root) {
fbb.FinishSizePrefixed(root);
}
} // namespace Messaging

View File

@@ -0,0 +1,102 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_TEXTCONTROLMESSAGE_MESSAGING_H_
#define FLATBUFFERS_GENERATED_TEXTCONTROLMESSAGE_MESSAGING_H_
#include "flatbuffers/flatbuffers.h"
// Ensure the included flatbuffers.h is the same version as when this file was
// generated, otherwise it may not be compatible.
// static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
// FLATBUFFERS_VERSION_MINOR == 2 &&
// FLATBUFFERS_VERSION_REVISION == 10,
// "Non-compatible flatbuffers version included");
namespace Messaging {
struct TextControlMessage;
struct TextControlMessageBuilder;
struct TextControlMessage FLATBUFFERS_FINAL_CLASS
: private ::flatbuffers::Table {
typedef TextControlMessageBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_MESSAGE = 4
};
const ::flatbuffers::String *message() const {
return GetPointer<const ::flatbuffers::String *>(VT_MESSAGE);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_MESSAGE) &&
verifier.VerifyString(message()) && verifier.EndTable();
}
};
struct TextControlMessageBuilder {
typedef TextControlMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_message(::flatbuffers::Offset<::flatbuffers::String> message) {
fbb_.AddOffset(TextControlMessage::VT_MESSAGE, message);
}
explicit TextControlMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<TextControlMessage> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<TextControlMessage>(end);
return o;
}
};
inline ::flatbuffers::Offset<TextControlMessage> CreateTextControlMessage(
::flatbuffers::FlatBufferBuilder &_fbb,
::flatbuffers::Offset<::flatbuffers::String> message = 0) {
TextControlMessageBuilder builder_(_fbb);
builder_.add_message(message);
return builder_.Finish();
}
inline ::flatbuffers::Offset<TextControlMessage>
CreateTextControlMessageDirect(::flatbuffers::FlatBufferBuilder &_fbb,
const char *message = nullptr) {
auto message__ = message ? _fbb.CreateString(message) : 0;
return Messaging::CreateTextControlMessage(_fbb, message__);
}
inline const Messaging::TextControlMessage *
GetTextControlMessage(const void *buf) {
return ::flatbuffers::GetRoot<Messaging::TextControlMessage>(buf);
}
inline const Messaging::TextControlMessage *
GetSizePrefixedTextControlMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::TextControlMessage>(buf);
}
inline bool VerifyTextControlMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<Messaging::TextControlMessage>(nullptr);
}
inline bool
VerifySizePrefixedTextControlMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::TextControlMessage>(
nullptr);
}
inline void FinishTextControlMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::TextControlMessage> root) {
fbb.Finish(root);
}
inline void FinishSizePrefixedTextControlMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::TextControlMessage> root) {
fbb.FinishSizePrefixed(root);
}
} // namespace Messaging
#endif // FLATBUFFERS_GENERATED_TEXTCONTROLMESSAGE_MESSAGING_H_

View File

@@ -20,182 +20,192 @@ struct TopologyMessage;
struct TopologyMessageBuilder;
enum ConnectionType : int8_t {
ConnectionType_DIRECT = 0,
ConnectionType_HOP = 1,
ConnectionType_MIN = ConnectionType_DIRECT,
ConnectionType_MAX = ConnectionType_HOP
ConnectionType_DIRECT = 0,
ConnectionType_HOP = 1,
ConnectionType_MIN = ConnectionType_DIRECT,
ConnectionType_MAX = ConnectionType_HOP
};
inline const ConnectionType (&EnumValuesConnectionType())[2] {
static const ConnectionType values[] = {ConnectionType_DIRECT, ConnectionType_HOP};
return values;
static const ConnectionType values[] = {ConnectionType_DIRECT,
ConnectionType_HOP};
return values;
}
inline const char *const *EnumNamesConnectionType() {
static const char *const names[3] = {"DIRECT", "HOP", nullptr};
return names;
static const char *const names[3] = {"DIRECT", "HOP", nullptr};
return names;
}
inline const char *EnumNameConnectionType(ConnectionType e) {
if (::flatbuffers::IsOutRange(e, ConnectionType_DIRECT, ConnectionType_HOP))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesConnectionType()[index];
if (::flatbuffers::IsOutRange(e, ConnectionType_DIRECT, ConnectionType_HOP))
return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesConnectionType()[index];
}
struct TopologyMessage FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
typedef TopologyMessageBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_MODULE_ID = 4,
VT_MODULE_TYPE = 6,
VT_NUM_CHANNELS = 8,
VT_CHANNEL_TO_MODULE = 10,
VT_CHANNEL_TO_ORIENTATION = 12,
VT_CONNECTION = 14,
VT_LEADER = 16,
VT_FIRMWARE = 18
};
uint8_t module_id() const {
return GetField<uint8_t>(VT_MODULE_ID, 0);
}
ModuleType module_type() const {
return static_cast<ModuleType>(GetField<int8_t>(VT_MODULE_TYPE, 0));
}
uint8_t num_channels() const {
return GetField<uint8_t>(VT_NUM_CHANNELS, 0);
}
const ::flatbuffers::Vector<uint8_t> *channel_to_module() const {
return GetPointer<const ::flatbuffers::Vector<uint8_t> *>(VT_CHANNEL_TO_MODULE);
}
const ::flatbuffers::Vector<int8_t> *channel_to_orientation() const {
return GetPointer<const ::flatbuffers::Vector<int8_t> *>(VT_CHANNEL_TO_ORIENTATION);
}
Messaging::ConnectionType connection() const {
return static_cast<Messaging::ConnectionType>(GetField<int8_t>(VT_CONNECTION, 0));
}
uint8_t leader() const {
return GetField<uint8_t>(VT_LEADER, 0);
}
const ::flatbuffers::String *firmware() const {
return GetPointer<const ::flatbuffers::String *>(VT_FIRMWARE);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && VerifyField<uint8_t>(verifier, VT_MODULE_ID, 1) &&
VerifyField<int8_t>(verifier, VT_MODULE_TYPE, 1) &&
VerifyField<uint8_t>(verifier, VT_NUM_CHANNELS, 1) &&
VerifyOffset(verifier, VT_CHANNEL_TO_MODULE) &&
verifier.VerifyVector(channel_to_module()) &&
VerifyOffset(verifier, VT_CHANNEL_TO_ORIENTATION) &&
verifier.VerifyVector(channel_to_orientation()) &&
VerifyField<int8_t>(verifier, VT_CONNECTION, 1) &&
VerifyField<uint8_t>(verifier, VT_LEADER, 1) &&
VerifyOffset(verifier, VT_FIRMWARE) && verifier.VerifyString(firmware()) &&
verifier.EndTable();
}
typedef TopologyMessageBuilder Builder;
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
VT_MODULE_ID = 4,
VT_MODULE_TYPE = 6,
VT_NUM_CHANNELS = 8,
VT_CHANNEL_TO_MODULE = 10,
VT_CHANNEL_TO_ORIENTATION = 12,
VT_CONNECTION = 14,
VT_LEADER = 16,
VT_FIRMWARE = 18
};
uint8_t module_id() const { return GetField<uint8_t>(VT_MODULE_ID, 0); }
ModuleType module_type() const {
return static_cast<ModuleType>(GetField<int8_t>(VT_MODULE_TYPE, 0));
}
uint8_t num_channels() const { return GetField<uint8_t>(VT_NUM_CHANNELS, 0); }
const ::flatbuffers::Vector<uint8_t> *channel_to_module() const {
return GetPointer<const ::flatbuffers::Vector<uint8_t> *>(
VT_CHANNEL_TO_MODULE);
}
const ::flatbuffers::Vector<int8_t> *channel_to_orientation() const {
return GetPointer<const ::flatbuffers::Vector<int8_t> *>(
VT_CHANNEL_TO_ORIENTATION);
}
Messaging::ConnectionType connection() const {
return static_cast<Messaging::ConnectionType>(
GetField<int8_t>(VT_CONNECTION, 0));
}
uint8_t leader() const { return GetField<uint8_t>(VT_LEADER, 0); }
const ::flatbuffers::String *firmware() const {
return GetPointer<const ::flatbuffers::String *>(VT_FIRMWARE);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<uint8_t>(verifier, VT_MODULE_ID, 1) &&
VerifyField<int8_t>(verifier, VT_MODULE_TYPE, 1) &&
VerifyField<uint8_t>(verifier, VT_NUM_CHANNELS, 1) &&
VerifyOffset(verifier, VT_CHANNEL_TO_MODULE) &&
verifier.VerifyVector(channel_to_module()) &&
VerifyOffset(verifier, VT_CHANNEL_TO_ORIENTATION) &&
verifier.VerifyVector(channel_to_orientation()) &&
VerifyField<int8_t>(verifier, VT_CONNECTION, 1) &&
VerifyField<uint8_t>(verifier, VT_LEADER, 1) &&
VerifyOffset(verifier, VT_FIRMWARE) &&
verifier.VerifyString(firmware()) && verifier.EndTable();
}
};
struct TopologyMessageBuilder {
typedef TopologyMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_module_id(uint8_t module_id) {
fbb_.AddElement<uint8_t>(TopologyMessage::VT_MODULE_ID, module_id, 0);
}
void add_module_type(ModuleType module_type) {
fbb_.AddElement<int8_t>(TopologyMessage::VT_MODULE_TYPE, static_cast<int8_t>(module_type),
0);
}
void add_num_channels(uint8_t num_channels) {
fbb_.AddElement<uint8_t>(TopologyMessage::VT_NUM_CHANNELS, num_channels, 0);
}
void
add_channel_to_module(::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> channel_to_module) {
fbb_.AddOffset(TopologyMessage::VT_CHANNEL_TO_MODULE, channel_to_module);
}
void add_channel_to_orientation(
::flatbuffers::Offset<::flatbuffers::Vector<int8_t>> channel_to_orientation) {
fbb_.AddOffset(TopologyMessage::VT_CHANNEL_TO_ORIENTATION, channel_to_orientation);
}
void add_connection(Messaging::ConnectionType connection) {
fbb_.AddElement<int8_t>(TopologyMessage::VT_CONNECTION, static_cast<int8_t>(connection), 0);
}
void add_leader(uint8_t leader) {
fbb_.AddElement<uint8_t>(TopologyMessage::VT_LEADER, leader, 0);
}
void add_firmware(::flatbuffers::Offset<::flatbuffers::String> firmware) {
fbb_.AddOffset(TopologyMessage::VT_FIRMWARE, firmware);
}
explicit TopologyMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<TopologyMessage> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<TopologyMessage>(end);
return o;
}
typedef TopologyMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_module_id(uint8_t module_id) {
fbb_.AddElement<uint8_t>(TopologyMessage::VT_MODULE_ID, module_id, 0);
}
void add_module_type(ModuleType module_type) {
fbb_.AddElement<int8_t>(TopologyMessage::VT_MODULE_TYPE,
static_cast<int8_t>(module_type), 0);
}
void add_num_channels(uint8_t num_channels) {
fbb_.AddElement<uint8_t>(TopologyMessage::VT_NUM_CHANNELS, num_channels, 0);
}
void add_channel_to_module(
::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> channel_to_module) {
fbb_.AddOffset(TopologyMessage::VT_CHANNEL_TO_MODULE, channel_to_module);
}
void add_channel_to_orientation(
::flatbuffers::Offset<::flatbuffers::Vector<int8_t>>
channel_to_orientation) {
fbb_.AddOffset(TopologyMessage::VT_CHANNEL_TO_ORIENTATION,
channel_to_orientation);
}
void add_connection(Messaging::ConnectionType connection) {
fbb_.AddElement<int8_t>(TopologyMessage::VT_CONNECTION,
static_cast<int8_t>(connection), 0);
}
void add_leader(uint8_t leader) {
fbb_.AddElement<uint8_t>(TopologyMessage::VT_LEADER, leader, 0);
}
void add_firmware(::flatbuffers::Offset<::flatbuffers::String> firmware) {
fbb_.AddOffset(TopologyMessage::VT_FIRMWARE, firmware);
}
explicit TopologyMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<TopologyMessage> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = ::flatbuffers::Offset<TopologyMessage>(end);
return o;
}
};
inline ::flatbuffers::Offset<TopologyMessage> CreateTopologyMessage(
::flatbuffers::FlatBufferBuilder &_fbb, uint8_t module_id = 0,
ModuleType module_type = ModuleType_SPLITTER, uint8_t num_channels = 0,
::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> channel_to_module = 0,
::flatbuffers::Offset<::flatbuffers::Vector<int8_t>> channel_to_orientation = 0,
Messaging::ConnectionType connection = Messaging::ConnectionType_DIRECT, uint8_t leader = 0,
::flatbuffers::Offset<::flatbuffers::Vector<int8_t>>
channel_to_orientation = 0,
Messaging::ConnectionType connection = Messaging::ConnectionType_DIRECT,
uint8_t leader = 0,
::flatbuffers::Offset<::flatbuffers::String> firmware = 0) {
TopologyMessageBuilder builder_(_fbb);
builder_.add_firmware(firmware);
builder_.add_channel_to_orientation(channel_to_orientation);
builder_.add_channel_to_module(channel_to_module);
builder_.add_leader(leader);
builder_.add_connection(connection);
builder_.add_num_channels(num_channels);
builder_.add_module_type(module_type);
builder_.add_module_id(module_id);
return builder_.Finish();
TopologyMessageBuilder builder_(_fbb);
builder_.add_firmware(firmware);
builder_.add_channel_to_orientation(channel_to_orientation);
builder_.add_channel_to_module(channel_to_module);
builder_.add_leader(leader);
builder_.add_connection(connection);
builder_.add_num_channels(num_channels);
builder_.add_module_type(module_type);
builder_.add_module_id(module_id);
return builder_.Finish();
}
inline ::flatbuffers::Offset<TopologyMessage>
CreateTopologyMessageDirect(::flatbuffers::FlatBufferBuilder &_fbb, uint8_t module_id = 0,
ModuleType module_type = ModuleType_SPLITTER, uint8_t num_channels = 0,
const std::vector<uint8_t> *channel_to_module = nullptr,
const std::vector<int8_t> *channel_to_orientation = nullptr,
Messaging::ConnectionType connection = Messaging::ConnectionType_DIRECT,
uint8_t leader = 0, const char *firmware = nullptr) {
auto channel_to_module__ =
channel_to_module ? _fbb.CreateVector<uint8_t>(*channel_to_module) : 0;
auto channel_to_orientation__ =
channel_to_orientation ? _fbb.CreateVector<int8_t>(*channel_to_orientation) : 0;
auto firmware__ = firmware ? _fbb.CreateString(firmware) : 0;
return Messaging::CreateTopologyMessage(_fbb, module_id, module_type, num_channels,
channel_to_module__, channel_to_orientation__,
connection, leader, firmware__);
inline ::flatbuffers::Offset<TopologyMessage> CreateTopologyMessageDirect(
::flatbuffers::FlatBufferBuilder &_fbb, uint8_t module_id = 0,
ModuleType module_type = ModuleType_SPLITTER, uint8_t num_channels = 0,
const std::vector<uint8_t> *channel_to_module = nullptr,
const std::vector<int8_t> *channel_to_orientation = nullptr,
Messaging::ConnectionType connection = Messaging::ConnectionType_DIRECT,
uint8_t leader = 0, const char *firmware = nullptr) {
auto channel_to_module__ =
channel_to_module ? _fbb.CreateVector<uint8_t>(*channel_to_module) : 0;
auto channel_to_orientation__ =
channel_to_orientation
? _fbb.CreateVector<int8_t>(*channel_to_orientation)
: 0;
auto firmware__ = firmware ? _fbb.CreateString(firmware) : 0;
return Messaging::CreateTopologyMessage(
_fbb, module_id, module_type, num_channels, channel_to_module__,
channel_to_orientation__, connection, leader, firmware__);
}
inline const Messaging::TopologyMessage *GetTopologyMessage(const void *buf) {
return ::flatbuffers::GetRoot<Messaging::TopologyMessage>(buf);
return ::flatbuffers::GetRoot<Messaging::TopologyMessage>(buf);
}
inline const Messaging::TopologyMessage *GetSizePrefixedTopologyMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::TopologyMessage>(buf);
inline const Messaging::TopologyMessage *
GetSizePrefixedTopologyMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::TopologyMessage>(buf);
}
inline bool VerifyTopologyMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<Messaging::TopologyMessage>(nullptr);
return verifier.VerifyBuffer<Messaging::TopologyMessage>(nullptr);
}
inline bool VerifySizePrefixedTopologyMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::TopologyMessage>(nullptr);
inline bool
VerifySizePrefixedTopologyMessageBuffer(::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::TopologyMessage>(nullptr);
}
inline void FinishTopologyMessageBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::TopologyMessage> root) {
fbb.Finish(root);
inline void FinishTopologyMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::TopologyMessage> root) {
fbb.Finish(root);
}
inline void
FinishSizePrefixedTopologyMessageBuffer(::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::TopologyMessage> root) {
fbb.FinishSizePrefixed(root);
inline void FinishSizePrefixedTopologyMessageBuffer(
::flatbuffers::FlatBufferBuilder &fbb,
::flatbuffers::Offset<Messaging::TopologyMessage> root) {
fbb.FinishSizePrefixed(root);
}
} // namespace Messaging

View File

@@ -17,8 +17,10 @@ LIB_API void cleanup();
LIB_API int send_angle_control(int module_id, int angle);
LIB_API char *get_configuration(int *size_out);
LIB_API bool control_sentry_init(const char *dsn, const char *environment, const char *release);
LIB_API void control_sentry_set_app_info(const char *app_name, const char *app_version,
LIB_API bool control_sentry_init(const char *dsn, const char *environment,
const char *release);
LIB_API void control_sentry_set_app_info(const char *app_name,
const char *app_version,
const char *build_number);
LIB_API void control_sentry_shutdown(void);
}

View File

@@ -27,28 +27,29 @@
*/
class RobotController {
public:
/**
public:
/**
* \brief Creates a new RobotController.
*
* Each RobotController will establish unique connections to accessible
* BotChain modules.
*/
RobotController()
: m_messaging_interface(std::make_unique<MessagingInterface>()),
m_metadata_loop(std::thread(&RobotController::metadata_loop, this)),
m_transmit_loop(std::thread(&RobotController::transmit_loop, this)),
m_configuration_loop(std::thread(&RobotController::configuration_loop, this)),
m_sensor_loop(std::thread(&RobotController::sensor_loop, this)),
m_expiry_looop(std::thread(&RobotController::expiry_loop, this)) {
m_logger = spdlog::basic_logger_mt("default_logger", "libcontrol.log");
spdlog::flush_on(spdlog::level::info);
spdlog::set_default_logger(m_logger);
}
RobotController()
: m_messaging_interface(std::make_unique<MessagingInterface>()),
m_metadata_loop(std::thread(&RobotController::metadata_loop, this)),
m_transmit_loop(std::thread(&RobotController::transmit_loop, this)),
m_configuration_loop(
std::thread(&RobotController::configuration_loop, this)),
m_sensor_loop(std::thread(&RobotController::sensor_loop, this)),
m_expiry_looop(std::thread(&RobotController::expiry_loop, this)) {
m_logger = spdlog::basic_logger_mt("default_logger", "libcontrol.log");
spdlog::flush_on(spdlog::level::info);
spdlog::set_default_logger(m_logger);
}
~RobotController();
~RobotController();
/**
/**
* \brief Get a list of accessible modules
*
* Returns a std::vector containing robotic modules. This list includes
@@ -57,9 +58,9 @@ class RobotController {
* commands can be sent by calling the "as" function for the correct
* type (can be identified through the ModuleType).
*/
std::vector<std::weak_ptr<Module>> getModules();
std::vector<std::weak_ptr<Module>> getModules();
/**
/**
* \brief Get a module by ID
*
* Returns a std::vector containing robotic modules. This list includes
@@ -68,59 +69,60 @@ class RobotController {
* commands can be sent by calling the "as" function for the correct
* type (can be identified through the ModuleType).
*/
std::optional<std::weak_ptr<Module>> getModule(uint8_t device_id);
std::optional<std::weak_ptr<Module>> getModule(uint8_t device_id);
/**
/**
* \brief Get a list of all connections.
*
* Returns a list containing all connections between modules.
*/
std::vector<Flatbuffers::ModuleConnectionInstance> getConnections();
std::vector<Flatbuffers::ModuleConnectionInstance> getConnections();
/**
/**
* \brief Get a list of accessible modules.
*
* Returns a list containing ID and types of each module.
*/
std::vector<Flatbuffers::ModuleInstance> getModuleList();
std::vector<Flatbuffers::ModuleInstance> getModuleList();
/**
/**
* \brief Reset the list of modules.
*
* Reset the internal list containing known modules. Note: This list is
* automatically updated, only call this function when you need to update the
* list faster than the internal refresh logic.
*/
void resetModules();
void resetModules();
/**
/**
* \brief Poll for devices accessible to the PC.
*
* Manually trigger a poll for devices accessible to the PC.
*/
void fetchDirectlyConnectedModules(bool block);
void fetchDirectlyConnectedModules(bool block);
private:
std::shared_ptr<spdlog::logger> m_logger;
std::unordered_map<uint8_t, std::shared_ptr<Module>> m_id_to_module{};
std::unordered_map<uint8_t, std::vector<Flatbuffers::ModuleConnectionInstance>>
m_connection_map{};
std::shared_mutex m_module_lock{};
std::shared_mutex m_connection_lock{};
std::shared_ptr<MessagingInterface> m_messaging_interface;
std::atomic<bool> m_stop_thread{false}; // todo: make sure threads stop if we
// dont get any messages (timeouts)
std::thread m_metadata_loop;
std::thread m_transmit_loop;
std::thread m_configuration_loop;
std::thread m_sensor_loop;
std::thread m_expiry_looop;
private:
std::shared_ptr<spdlog::logger> m_logger;
std::unordered_map<uint8_t, std::shared_ptr<Module>> m_id_to_module{};
std::unordered_map<uint8_t,
std::vector<Flatbuffers::ModuleConnectionInstance>>
m_connection_map{};
std::shared_mutex m_module_lock{};
std::shared_mutex m_connection_lock{};
std::shared_ptr<MessagingInterface> m_messaging_interface;
std::atomic<bool> m_stop_thread{false}; // todo: make sure threads stop if we
// dont get any messages (timeouts)
std::thread m_metadata_loop;
std::thread m_transmit_loop;
std::thread m_configuration_loop;
std::thread m_sensor_loop;
std::thread m_expiry_looop;
void metadata_loop();
void transmit_loop();
void configuration_loop();
void sensor_loop();
void expiry_loop();
void metadata_loop();
void transmit_loop();
void configuration_loop();
void sensor_loop();
void expiry_loop();
};
#endif // CONTROL_LIBCONTROL_H

View File

@@ -7,44 +7,41 @@
class Event;
class CallbackHandle {
public:
CallbackHandle(Event *evt, int id) : evt(evt), id(id) {
}
~CallbackHandle();
public:
CallbackHandle(Event *evt, int id) : evt(evt), id(id) {}
~CallbackHandle();
private:
Event *evt;
int id;
private:
Event *evt;
int id;
};
class Event {
public:
using Callback = std::function<void()>;
public:
using Callback = std::function<void()>;
CallbackHandle addListener(Callback cb) {
int id = nextId++;
callbacks[id] = std::move(cb);
return CallbackHandle(this, id);
}
CallbackHandle addListener(Callback cb) {
int id = nextId++;
callbacks[id] = std::move(cb);
return CallbackHandle(this, id);
}
void remove(int id) {
callbacks.erase(id);
}
void remove(int id) { callbacks.erase(id); }
void fire() {
for (auto &kv : callbacks)
kv.second();
}
void fire() {
for (auto &kv : callbacks)
kv.second();
}
private:
friend class CallbackHandle;
std::unordered_map<int, Callback> callbacks;
int nextId = 0;
private:
friend class CallbackHandle;
std::unordered_map<int, Callback> callbacks;
int nextId = 0;
};
CallbackHandle::~CallbackHandle() {
if (evt)
evt->remove(id);
if (evt)
evt->remove(id);
}
#endif // CONTROL_EVENT_H

View File

@@ -7,12 +7,12 @@
template <typename K, typename V, typename H>
std::vector<V> map_to_values(const std::unordered_map<K, V, H> &map) {
std::vector<V> out;
out.reserve(map.size());
for (auto const &[key, value] : map) {
out.push_back(value);
}
return out;
std::vector<V> out;
out.reserve(map.size());
for (auto const &[key, value] : map) {
out.push_back(value);
}
return out;
}
#endif // CONTROL_MAP_H

View File

@@ -6,9 +6,9 @@
// Custom hash function for std::pair
template <typename T> struct pair_hash {
std::size_t operator()(const std::pair<T, T> &p) const {
return std::hash<T>()(p.first) ^ (std::hash<T>()(p.second) << 1);
}
std::size_t operator()(const std::pair<T, T> &p) const {
return std::hash<T>()(p.first) ^ (std::hash<T>()(p.second) << 1);
}
};
#endif // CONTROL_PAIRHASH_H

View File

@@ -5,7 +5,7 @@
#include <variant> // NOLINT
template <class... Ts> struct overloaded : Ts... {
using Ts::operator()...;
using Ts::operator()...;
};
template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>;