Display control code

This commit is contained in:
2026-02-07 01:38:05 -05:00
parent 2e9004ee34
commit 52ff24e649
21 changed files with 797 additions and 86 deletions

View File

@@ -15,11 +15,15 @@ struct current_angle {
int16_t angle;
};
typedef std::variant<target_angle, current_angle> sensor_value;
struct target_text {
std::string text;
};
typedef std::variant<target_angle, current_angle, target_text> sensor_value;
class SensorMessageBuilder {
public:
SensorMessageBuilder() : builder_(128) {
SensorMessageBuilder() : builder_(256) {
}
SerializedMessage build_sensor_message(std::vector<sensor_value> &values);

View File

@@ -0,0 +1,18 @@
//
// Created by Johnathon Slightham on 2025-06-30.
//
#ifndef TEXTCONTROLMESSAGEBUILDER_H_
#define TEXTCONTROLMESSAGEBUILDER_H_
#include "flatbuffers_generated/TextControlMessage_generated.h"
#include "flatbuffers/flatbuffers.h"
namespace Flatbuffers {
class TextControlMessageBuilder {
public:
static const Messaging::TextControlMessage* parse_text_control_message(const uint8_t* buffer);
};
}
#endif

View File

@@ -7,7 +7,7 @@
#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.
// generated, otherwise it may not be compatible.
// static_assert(FLATBUFFERS_VERSION_MAJOR == 25 &&
// FLATBUFFERS_VERSION_MINOR == 2 &&
// FLATBUFFERS_VERSION_REVISION == 10,
@@ -25,35 +25,71 @@ enum ModuleType : int8_t {
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_SERVO_2
ModuleType_MAX = ModuleType_SPLITTER_8
};
inline const ModuleType (&EnumValuesModuleType())[5] {
inline const ModuleType (&EnumValuesModuleType())[17] {
static const ModuleType values[] = {
ModuleType_SPLITTER,
ModuleType_SERVO_1,
ModuleType_DC_MOTOR,
ModuleType_BATTERY,
ModuleType_SERVO_2
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] = {
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 "";
if (::flatbuffers::IsOutRange(e, ModuleType_SPLITTER, ModuleType_SPLITTER_8)) return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesModuleType()[index];
}

View File

@@ -1,5 +1,6 @@
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_SENSORMESSAGE_MESSAGING_H_
#define FLATBUFFERS_GENERATED_SENSORMESSAGE_MESSAGING_H_
@@ -17,6 +18,9 @@ namespace Messaging {
struct TargetAngle;
struct TargetAngleBuilder;
struct CurrentText;
struct CurrentTextBuilder;
struct CurrentAngle;
struct CurrentAngleBuilder;
@@ -27,57 +31,69 @@ enum SensorValue : uint8_t {
SensorValue_NONE = 0,
SensorValue_TargetAngle = 1,
SensorValue_CurrentAngle = 2,
SensorValue_CurrentText = 3,
SensorValue_MIN = SensorValue_NONE,
SensorValue_MAX = SensorValue_CurrentAngle
SensorValue_MAX = SensorValue_CurrentText
};
inline const SensorValue (&EnumValuesSensorValue())[3] {
inline const SensorValue (&EnumValuesSensorValue())[4] {
static const SensorValue values[] = {
SensorValue_NONE, SensorValue_TargetAngle, SensorValue_CurrentAngle};
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};
inline const char * const *EnumNamesSensorValue() {
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 "";
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 {
template<typename T> struct SensorValueTraits {
static const SensorValue enum_value = SensorValue_NONE;
};
template <> struct SensorValueTraits<Messaging::TargetAngle> {
template<> struct SensorValueTraits<Messaging::TargetAngle> {
static const SensorValue enum_value = SensorValue_TargetAngle;
};
template <> struct SensorValueTraits<Messaging::CurrentAngle> {
template<> struct SensorValueTraits<Messaging::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); }
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();
VerifyField<int16_t>(verifier, VT_VALUE, 2) &&
verifier.EndTable();
}
};
@@ -89,7 +105,7 @@ struct TargetAngleBuilder {
fbb_.AddElement<int16_t>(TargetAngle::VT_VALUE, value, 0);
}
explicit TargetAngleBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<TargetAngle> Finish() {
@@ -99,22 +115,77 @@ struct TargetAngleBuilder {
}
};
inline ::flatbuffers::Offset<TargetAngle>
CreateTargetAngle(::flatbuffers::FlatBufferBuilder &_fbb, int16_t value = 0) {
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); }
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();
VerifyField<int16_t>(verifier, VT_VALUE, 2) &&
verifier.EndTable();
}
};
@@ -126,7 +197,7 @@ struct CurrentAngleBuilder {
fbb_.AddElement<int16_t>(CurrentAngle::VT_VALUE, value, 0);
}
explicit CurrentAngleBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<CurrentAngle> Finish() {
@@ -136,8 +207,9 @@ struct CurrentAngleBuilder {
}
};
inline ::flatbuffers::Offset<CurrentAngle>
CreateCurrentAngle(::flatbuffers::FlatBufferBuilder &_fbb, int16_t value = 0) {
inline ::flatbuffers::Offset<CurrentAngle> CreateCurrentAngle(
::flatbuffers::FlatBufferBuilder &_fbb,
int16_t value = 0) {
CurrentAngleBuilder builder_(_fbb);
builder_.add_value(value);
return builder_.Finish();
@@ -153,8 +225,7 @@ struct SensorMessage FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
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);
return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<void>> *>(VT_VALUES);
}
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
@@ -171,17 +242,14 @@ struct SensorMessageBuilder {
typedef SensorMessage Table;
::flatbuffers::FlatBufferBuilder &fbb_;
::flatbuffers::uoffset_t start_;
void add_values_type(
::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> values_type) {
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) {
void add_values(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<void>>> values) {
fbb_.AddOffset(SensorMessage::VT_VALUES, values);
}
explicit SensorMessageBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
::flatbuffers::Offset<SensorMessage> Finish() {
@@ -194,8 +262,7 @@ struct SensorMessageBuilder {
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) {
::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<void>>> values = 0) {
SensorMessageBuilder builder_(_fbb);
builder_.add_values(values);
builder_.add_values_type(values_type);
@@ -206,43 +273,41 @@ 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__);
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) {
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;
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;
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))) {
if (!VerifySensorValue(
verifier, values->Get(i), types->GetEnum<SensorValue>(i))) {
return false;
}
}
@@ -253,17 +318,17 @@ inline const Messaging::SensorMessage *GetSensorMessage(const void *buf) {
return ::flatbuffers::GetRoot<Messaging::SensorMessage>(buf);
}
inline const Messaging::SensorMessage *
GetSizePrefixedSensorMessage(const void *buf) {
inline const Messaging::SensorMessage *GetSizePrefixedSensorMessage(const void *buf) {
return ::flatbuffers::GetSizePrefixedRoot<Messaging::SensorMessage>(buf);
}
inline bool VerifySensorMessageBuffer(::flatbuffers::Verifier &verifier) {
inline bool VerifySensorMessageBuffer(
::flatbuffers::Verifier &verifier) {
return verifier.VerifyBuffer<Messaging::SensorMessage>(nullptr);
}
inline bool
VerifySizePrefixedSensorMessageBuffer(::flatbuffers::Verifier &verifier) {
inline bool VerifySizePrefixedSensorMessageBuffer(
::flatbuffers::Verifier &verifier) {
return verifier.VerifySizePrefixedBuffer<Messaging::SensorMessage>(nullptr);
}
@@ -279,6 +344,6 @@ inline void FinishSizePrefixedSensorMessageBuffer(
fbb.FinishSizePrefixed(root);
}
} // namespace Messaging
} // namespace Messaging
#endif // FLATBUFFERS_GENERATED_SENSORMESSAGE_MESSAGING_H_
#endif // FLATBUFFERS_GENERATED_SENSORMESSAGE_MESSAGING_H_

View File

@@ -0,0 +1,104 @@
// 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_