12#include <Eigen/Geometry>
46 : schema_(&
schema), time_(0.0),
47 buffer_(
schema.frame_size_bytes(), std::byte{0}) {}
57 double time()
const {
return time_; }
64 void set(
const std::string &signal,
double value) {
65 const auto &desc = schema_->signal(signal);
69 write_at<double>(desc.offset, value);
73 void set(
const std::string &signal, int32_t value) {
74 const auto &desc = schema_->signal(signal);
79 write_at<int64_t>(desc.offset,
static_cast<int64_t
>(value));
83 void set(
const std::string &signal, int64_t value) {
84 const auto &desc = schema_->signal(signal);
88 write_at<int64_t>(desc.offset, value);
96 void set(
const std::string &signal,
const Eigen::Vector3d &v) {
97 set(signal +
".x", v.x());
98 set(signal +
".y", v.y());
99 set(signal +
".z", v.z());
104 void set(
const std::string &signal,
const Eigen::Vector4d &v) {
105 set(signal +
".w", v.w());
106 set(signal +
".x", v.x());
107 set(signal +
".y", v.y());
108 set(signal +
".z", v.z());
112 void set(
const std::string &signal,
const Eigen::Quaterniond &q) {
113 set(signal +
".w", q.w());
114 set(signal +
".x", q.x());
115 set(signal +
".y", q.y());
116 set(signal +
".z", q.z());
125 const auto &desc = schema_->signal(signal);
129 return read_at<double>(desc.offset);
134 const auto &desc = schema_->signal(signal);
138 return static_cast<int32_t
>(read_at<int64_t>(desc.offset));
143 const auto &desc = schema_->signal(signal);
147 return read_at<int64_t>(desc.offset);
155 Eigen::Vector3d
get_vec3(
const std::string &signal)
const {
156 return Eigen::Vector3d(
get_double(signal +
".x"),
162 Eigen::Quaterniond
get_quat(
const std::string &signal)
const {
163 return Eigen::Quaterniond(
169 Eigen::Vector4d
get_vec4(
const std::string &signal)
const {
170 return Eigen::Vector4d(
180 const std::byte *
data()
const {
return buffer_.data(); }
183 std::byte *
data() {
return buffer_.data(); }
194 std::fill(buffer_.begin(), buffer_.end(), std::byte{0});
200 std::vector<std::byte> buffer_;
202 template <
typename T>
void write_at(
size_t offset, T value) {
203 std::memcpy(buffer_.data() + offset, &value,
sizeof(T));
206 template <
typename T> T read_at(
size_t offset)
const {
208 std::memcpy(&value, buffer_.data() + offset,
sizeof(T));
Telemetry signal schema definition for Vulcan I/O.
Exception hierarchy for Vulcan aerospace library.
Signal schema and frame errors.
Definition VulcanError.hpp:35
size_t size_bytes() const
Get buffer size in bytes.
Definition Frame.hpp:186
void set(const std::string &signal, const Eigen::Quaterniond &q)
Set quaternion (expands to signal.w, signal.x, signal.y, signal.z).
Definition Frame.hpp:112
void set(const std::string &signal, int32_t value)
Set int32 signal value.
Definition Frame.hpp:73
void set(const std::string &signal, int64_t value)
Set int64 signal value.
Definition Frame.hpp:83
double get_double(const std::string &signal) const
Get double signal value.
Definition Frame.hpp:124
void set_time(double t)
Set frame timestamp.
Definition Frame.hpp:54
Frame(const TelemetrySchema &schema)
Construct frame with schema.
Definition Frame.hpp:45
Eigen::Quaterniond get_quat(const std::string &signal) const
Get quaternion from signal.w, signal.x, signal.y, signal.z.
Definition Frame.hpp:162
void clear()
Clear all values to zero.
Definition Frame.hpp:192
void set(const std::string &signal, const Eigen::Vector4d &v)
Definition Frame.hpp:104
void set(const std::string &signal, const Eigen::Vector3d &v)
Set 3-component vector (expands to signal.x, signal.y, signal.z).
Definition Frame.hpp:96
std::byte * data()
Get raw buffer pointer (mutable).
Definition Frame.hpp:183
double time() const
Get frame timestamp.
Definition Frame.hpp:57
Eigen::Vector4d get_vec4(const std::string &signal) const
Get 4-component vector from signal.w, signal.x, signal.y, signal.z.
Definition Frame.hpp:169
void set(const std::string &signal, double value)
Set double signal value.
Definition Frame.hpp:64
const TelemetrySchema & schema() const
Get schema reference.
Definition Frame.hpp:189
int64_t get_int64(const std::string &signal) const
Get int64 signal value.
Definition Frame.hpp:142
int32_t get_int32(const std::string &signal) const
Get int32 signal value.
Definition Frame.hpp:133
const std::byte * data() const
Get raw buffer pointer (const).
Definition Frame.hpp:180
Eigen::Vector3d get_vec3(const std::string &signal) const
Get 3-component vector from signal.x, signal.y, signal.z.
Definition Frame.hpp:155
Telemetry schema builder and container.
Definition TelemetrySchema.hpp:41
Definition CSVExport.hpp:20
@ Int32
4 bytes + 4 padding - modes, phases, counters
Definition Signal.hpp:20
@ Double
8 bytes - physical quantities
Definition Signal.hpp:19
@ Int64
8 bytes - timestamps, large counters
Definition Signal.hpp:21