62 dynamic_buffer_(8 +
schema.dynamic_frame_size_bytes()),
63 static_buffer_(
schema.static_frame_size_bytes()) {
65 size_t dynamic_offset = 8;
66 size_t static_offset = 0;
68 for (
const auto &sig :
schema.signals()) {
69 if (sig.lifecycle == SignalLifecycle::Dynamic) {
70 dynamic_offsets_.push_back({sig.offset, dynamic_offset});
73 static_offsets_.push_back({sig.offset, static_offset});
91 std::memcpy(dynamic_buffer_.data(), &
time,
sizeof(
double));
94 for (
const auto &[src_offset, dst_offset] : dynamic_offsets_) {
95 std::memcpy(dynamic_buffer_.data() + dst_offset,
96 frame.
data() + src_offset, 8);
99 return std::span<const std::byte>(dynamic_buffer_);
109 for (
const auto &[src_offset, dst_offset] : static_offsets_) {
110 std::memcpy(static_buffer_.data() + dst_offset,
111 frame.
data() + src_offset, 8);
113 return std::span<const std::byte>(static_buffer_);
123 if (data.size() < 8) {
129 std::memcpy(&
time, data.data(),
sizeof(
double));
133 for (
const auto &[src_offset, dst_offset] : dynamic_offsets_) {
134 if (dst_offset + 8 > data.size()) {
136 "Invalid frame data: incomplete signal data");
138 std::memcpy(frame.
data() + src_offset, data.data() + dst_offset, 8);
149 for (
const auto &[src_offset, dst_offset] : static_offsets_) {
150 if (dst_offset + 8 > data.size()) {
152 "Invalid static data: incomplete signal data");
154 std::memcpy(frame.
data() + src_offset, data.data() + dst_offset, 8);
169 std::vector<std::byte> dynamic_buffer_;
170 std::vector<std::byte> static_buffer_;
173 std::vector<std::pair<size_t, size_t>> dynamic_offsets_;
174 std::vector<std::pair<size_t, size_t>> static_offsets_;
Telemetry frame data container for Vulcan I/O.
Telemetry signal schema definition for Vulcan I/O.
Exception hierarchy for Vulcan aerospace library.
Signal schema and frame errors.
Definition VulcanError.hpp:35
void deserialize_statics(std::span< const std::byte > data, Frame &frame)
Deserialize static signals.
Definition FrameSerializer.hpp:148
size_t static_size_bytes() const
Get static frame size in bytes.
Definition FrameSerializer.hpp:162
std::span< const std::byte > serialize_statics(const Frame &frame)
Serialize static signals only (for schema handshake).
Definition FrameSerializer.hpp:108
std::span< const std::byte > serialize(const Frame &frame)
Serialize frame (time + dynamic signals) to binary.
Definition FrameSerializer.hpp:88
const TelemetrySchema & schema() const
Get schema reference.
Definition FrameSerializer.hpp:165
void deserialize(std::span< const std::byte > data, Frame &frame)
Deserialize binary to frame (time + dynamic signals).
Definition FrameSerializer.hpp:122
FrameSerializer(const TelemetrySchema &schema)
Construct serializer for a schema.
Definition FrameSerializer.hpp:60
size_t dynamic_size_bytes() const
Get dynamic frame size in bytes (time + dynamic signals).
Definition FrameSerializer.hpp:159
Single timestep of telemetry data.
Definition Frame.hpp:39
void set_time(double t)
Set frame timestamp.
Definition Frame.hpp:54
double time() const
Get frame timestamp.
Definition Frame.hpp:57
const std::byte * data() const
Get raw buffer pointer (const).
Definition Frame.hpp:180
Telemetry schema builder and container.
Definition TelemetrySchema.hpp:41
Definition CSVExport.hpp:20