lanyard.propulsion.ThrottleCommand.1.0¶
Group throttle setpoint for the propulsion array.
| Full name | lanyard.propulsion.ThrottleCommand |
| Version | 1.0 |
| Kind | Message |
| Fixed port ID | 6203 |
| Least supported transport | CAN FD |
Wire layout¶
| Section | Extent (bytes) | Max serialized (bytes) |
|---|---|---|
| Message | 18 | 18 |
A sealed type reports its extent as its exact serialized size; a delimited type reports the declared @extent, which bounds what a reader must be prepared to receive.
Definition¶
# Group throttle setpoint for the propulsion array.
#
# VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
# a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
# moment the definition acquires a compatibility promise for the first
# time. The field set was allowed to change on the way (a sequence
# counter and an emergency-stop flag were added) precisely because 0.1
# promised nothing.
#
# WHY SEALED: this message is published at the inner-loop rate on every
# armed flight. It is latency critical and never grows, so it pays
# neither the delimiter header nor the extent slack. When the field set
# does need to change, this definition will be superseded by 2.0 on a
# new port.
#
# LEAST SUPPORTED TRANSPORT: CAN FD.
uint4 MAX_MOTORS = 8
# Largest propulsion array this definition addresses. Exposed as a
# constant so that generated code carries the bound as a named value
# rather than a literal duplicated at every call site.
float16[<=8] ratio
# Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
# indexed by motor number.
uint7 sequence
# Free-running command counter, incremented once per published message
# and wrapping at 128. A controller that observes a gap knows it missed
# a command and may enter its own failsafe rather than continuing to
# actuate a stale setpoint.
bool emergency_stop
# When true, every controller shall cut drive current immediately and
# ignore the ratio array. This is a commanded stop, not a failsafe: it
# is asserted deliberately by the flight controller.
@assert _offset_.max <= 63 * 8
# The CAN FD single-frame budget: 63 payload bytes plus the Cyphal/CAN
# tail byte.
@sealed
Generated code¶
Declaration excerpts only -- the serialization bodies are omitted for length. Build the showroom target for the complete output in every language and profile.
C¶
/* Group throttle setpoint for the propulsion array. */
/* */
/* VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting */
/* a 0.x definition to 1.0 is not a "non-breaking change" -- it is the */
/* moment the definition acquires a compatibility promise for the first */
/* time. The field set was allowed to change on the way (a sequence */
/* counter and an emergency-stop flag were added) precisely because 0.1 */
/* promised nothing. */
/* */
/* WHY SEALED: this message is published at the inner-loop rate on every */
/* armed flight. It is latency critical and never grows, so it pays */
/* neither the delimiter header nor the extent slack. When the field set */
/* does need to change, this definition will be superseded by 2.0 on a */
/* new port. */
/* */
/* LEAST SUPPORTED TRANSPORT: CAN FD. */
typedef struct lanyard__propulsion__ThrottleCommand {
/* Normalized throttle command per motor, 0.0 (idle) to 1.0 (full), */
/* indexed by motor number. */
struct {
float elements[8U];
size_t count;
} ratio;
/* Free-running command counter, incremented once per published message */
/* and wrapping at 128. A controller that observes a gap knows it missed */
/* a command and may enter its own failsafe rather than continuing to */
/* actuate a stale setpoint. */
uint8_t sequence;
/* When true, every controller shall cut drive current immediately and */
/* ignore the ratio array. This is a commanded stop, not a failsafe: it */
/* is asserted deliberately by the flight controller. */
bool emergency_stop;
} lanyard__propulsion__ThrottleCommand;
C++ (std)¶
// Group throttle setpoint for the propulsion array.
//
// VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
// a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
// moment the definition acquires a compatibility promise for the first
// time. The field set was allowed to change on the way (a sequence
// counter and an emergency-stop flag were added) precisely because 0.1
// promised nothing.
//
// WHY SEALED: this message is published at the inner-loop rate on every
// armed flight. It is latency critical and never grows, so it pays
// neither the delimiter header nor the extent slack. When the field set
// does need to change, this definition will be superseded by 2.0 on a
// new port.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
struct ThrottleCommand_1_0 {
// Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
// indexed by motor number.
std::vector<float> ratio{};
// Free-running command counter, incremented once per published message
// and wrapping at 128. A controller that observes a gap knows it missed
// a command and may enter its own failsafe rather than continuing to
// actuate a stale setpoint.
std::uint8_t sequence{};
// When true, every controller shall cut drive current immediately and
// ignore the ratio array. This is a commanded stop, not a failsafe: it
// is asserted deliberately by the flight controller.
bool emergency_stop{};
static constexpr const char* FULL_NAME = "lanyard.propulsion.ThrottleCommand";
static constexpr bool IS_DEPRECATED = false;
static constexpr const char* FULL_NAME_AND_VERSION = "lanyard.propulsion.ThrottleCommand.1.0";
static constexpr std::size_t EXTENT_BYTES = 18U;
static constexpr std::size_t SERIALIZATION_BUFFER_SIZE_BYTES = 18U;
static constexpr bool ZOH_ALIAS_ELIGIBLE = false;
static constexpr const char* ZOH_ALIAS_REASON = "variable-array";
// Largest propulsion array this definition addresses. Exposed as a
// constant so that generated code carries the bound as a named value
// rather than a literal duplicated at every call site.
static constexpr auto MAX_MOTORS = 8;
static constexpr std::size_t RATIO_ARRAY_CAPACITY = 8U;
static constexpr bool RATIO_ARRAY_IS_VARIABLE_LENGTH = true;
LLVMDSDL_NODISCARD inline std::int8_t serialize(std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) const {
return ThrottleCommand_1_0__serialize_(this, buffer, inout_buffer_size_bytes);
}
LLVMDSDL_NODISCARD inline std::int8_t deserialize(const std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) {
return ThrottleCommand_1_0__deserialize_(this, buffer, inout_buffer_size_bytes);
}
LLVMDSDL_NODISCARD static inline std::int8_t try_deserialize_view(const std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes, const std::uint8_t** out_view_bytes) {
return ThrottleCommand_1_0__try_deserialize_view_(buffer, inout_buffer_size_bytes, out_view_bytes);
}
LLVMDSDL_NODISCARD static inline std::int8_t try_serialize_view(const std::uint8_t* view_bytes, std::size_t view_size_bytes, std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) {
return ThrottleCommand_1_0__try_serialize_view_(view_bytes, view_size_bytes, buffer, inout_buffer_size_bytes);
}
};
C++ (pmr)¶
Polymorphic-allocator profile: variable-length fields route through std::pmr.
// Group throttle setpoint for the propulsion array.
//
// VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
// a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
// moment the definition acquires a compatibility promise for the first
// time. The field set was allowed to change on the way (a sequence
// counter and an emergency-stop flag were added) precisely because 0.1
// promised nothing.
//
// WHY SEALED: this message is published at the inner-loop rate on every
// armed flight. It is latency critical and never grows, so it pays
// neither the delimiter header nor the extent slack. When the field set
// does need to change, this definition will be superseded by 2.0 on a
// new port.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
struct ThrottleCommand_1_0 {
// Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
// indexed by motor number.
std::pmr::vector<float> ratio{};
// Free-running command counter, incremented once per published message
// and wrapping at 128. A controller that observes a gap knows it missed
// a command and may enter its own failsafe rather than continuing to
// actuate a stale setpoint.
std::uint8_t sequence{};
// When true, every controller shall cut drive current immediately and
// ignore the ratio array. This is a commanded stop, not a failsafe: it
// is asserted deliberately by the flight controller.
bool emergency_stop{};
::llvmdsdl::cpp::MemoryResource* _memory_resource{::llvmdsdl::cpp::default_memory_resource()};
ThrottleCommand_1_0() = default;
explicit ThrottleCommand_1_0(::llvmdsdl::cpp::MemoryResource* memory_resource) { set_memory_resource(memory_resource); }
void set_memory_resource(::llvmdsdl::cpp::MemoryResource* memory_resource) {
_memory_resource = (memory_resource != nullptr) ? memory_resource : ::llvmdsdl::cpp::default_memory_resource();
ratio = decltype(ratio)(_memory_resource);
}
static constexpr const char* FULL_NAME = "lanyard.propulsion.ThrottleCommand";
static constexpr bool IS_DEPRECATED = false;
static constexpr const char* FULL_NAME_AND_VERSION = "lanyard.propulsion.ThrottleCommand.1.0";
static constexpr std::size_t EXTENT_BYTES = 18U;
static constexpr std::size_t SERIALIZATION_BUFFER_SIZE_BYTES = 18U;
static constexpr bool ZOH_ALIAS_ELIGIBLE = false;
static constexpr const char* ZOH_ALIAS_REASON = "variable-array";
// Largest propulsion array this definition addresses. Exposed as a
// constant so that generated code carries the bound as a named value
// rather than a literal duplicated at every call site.
static constexpr auto MAX_MOTORS = 8;
static constexpr std::size_t RATIO_ARRAY_CAPACITY = 8U;
static constexpr bool RATIO_ARRAY_IS_VARIABLE_LENGTH = true;
LLVMDSDL_NODISCARD inline std::int8_t serialize(std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) const {
return ThrottleCommand_1_0__serialize_(this, buffer, inout_buffer_size_bytes, _memory_resource);
}
LLVMDSDL_NODISCARD inline std::int8_t deserialize(const std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) {
return ThrottleCommand_1_0__deserialize_(this, buffer, inout_buffer_size_bytes, _memory_resource);
}
LLVMDSDL_NODISCARD static inline std::int8_t try_deserialize_view(const std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes, const std::uint8_t** out_view_bytes) {
return ThrottleCommand_1_0__try_deserialize_view_(buffer, inout_buffer_size_bytes, out_view_bytes);
}
LLVMDSDL_NODISCARD static inline std::int8_t try_serialize_view(const std::uint8_t* view_bytes, std::size_t view_size_bytes, std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) {
return ThrottleCommand_1_0__try_serialize_view_(view_bytes, view_size_bytes, buffer, inout_buffer_size_bytes);
}
LLVMDSDL_NODISCARD inline std::int8_t serialize(std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes, ::llvmdsdl::cpp::MemoryResource* memory_resource) const {
return ThrottleCommand_1_0__serialize_(this, buffer, inout_buffer_size_bytes, memory_resource);
}
LLVMDSDL_NODISCARD inline std::int8_t deserialize(const std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes, ::llvmdsdl::cpp::MemoryResource* memory_resource) {
return ThrottleCommand_1_0__deserialize_(this, buffer, inout_buffer_size_bytes, memory_resource);
}
};
C++ (autosar)¶
AUTOSAR C++14 subset profile.
// Group throttle setpoint for the propulsion array.
//
// VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
// a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
// moment the definition acquires a compatibility promise for the first
// time. The field set was allowed to change on the way (a sequence
// counter and an emergency-stop flag were added) precisely because 0.1
// promised nothing.
//
// WHY SEALED: this message is published at the inner-loop rate on every
// armed flight. It is latency critical and never grows, so it pays
// neither the delimiter header nor the extent slack. When the field set
// does need to change, this definition will be superseded by 2.0 on a
// new port.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
struct ThrottleCommand_1_0 {
// Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
// indexed by motor number.
::llvmdsdl::cpp::autosar::BoundedVector<float, 8U> ratio{};
// Free-running command counter, incremented once per published message
// and wrapping at 128. A controller that observes a gap knows it missed
// a command and may enter its own failsafe rather than continuing to
// actuate a stale setpoint.
std::uint8_t sequence{};
// When true, every controller shall cut drive current immediately and
// ignore the ratio array. This is a commanded stop, not a failsafe: it
// is asserted deliberately by the flight controller.
bool emergency_stop{};
static constexpr const char* FULL_NAME = "lanyard.propulsion.ThrottleCommand";
static constexpr bool IS_DEPRECATED = false;
static constexpr const char* FULL_NAME_AND_VERSION = "lanyard.propulsion.ThrottleCommand.1.0";
static constexpr std::size_t EXTENT_BYTES = 18U;
static constexpr std::size_t SERIALIZATION_BUFFER_SIZE_BYTES = 18U;
static constexpr bool ZOH_ALIAS_ELIGIBLE = false;
static constexpr const char* ZOH_ALIAS_REASON = "variable-array";
// Largest propulsion array this definition addresses. Exposed as a
// constant so that generated code carries the bound as a named value
// rather than a literal duplicated at every call site.
static constexpr auto MAX_MOTORS = 8;
static constexpr std::size_t RATIO_ARRAY_CAPACITY = 8U;
static constexpr bool RATIO_ARRAY_IS_VARIABLE_LENGTH = true;
LLVMDSDL_NODISCARD inline std::int8_t serialize(std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) const {
return ThrottleCommand_1_0__serialize_(this, buffer, inout_buffer_size_bytes);
}
LLVMDSDL_NODISCARD inline std::int8_t deserialize(const std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) {
return ThrottleCommand_1_0__deserialize_(this, buffer, inout_buffer_size_bytes);
}
LLVMDSDL_NODISCARD static inline std::int8_t try_deserialize_view(const std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes, const std::uint8_t** out_view_bytes) {
return ThrottleCommand_1_0__try_deserialize_view_(buffer, inout_buffer_size_bytes, out_view_bytes);
}
LLVMDSDL_NODISCARD static inline std::int8_t try_serialize_view(const std::uint8_t* view_bytes, std::size_t view_size_bytes, std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) {
return ThrottleCommand_1_0__try_serialize_view_(view_bytes, view_size_bytes, buffer, inout_buffer_size_bytes);
}
};
Rust (std)¶
/// Group throttle setpoint for the propulsion array.
///
/// VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
/// a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
/// moment the definition acquires a compatibility promise for the first
/// time. The field set was allowed to change on the way (a sequence
/// counter and an emergency-stop flag were added) precisely because 0.1
/// promised nothing.
///
/// WHY SEALED: this message is published at the inner-loop rate on every
/// armed flight. It is latency critical and never grows, so it pays
/// neither the delimiter header nor the extent slack. When the field set
/// does need to change, this definition will be superseded by 2.0 on a
/// new port.
///
/// LEAST SUPPORTED TRANSPORT: CAN FD.
#[derive(Clone, Debug, PartialEq)]
pub struct lanyard_propulsion_ThrottleCommand_1_0 {
/// Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
/// indexed by motor number.
pub ratio: crate::dsdl_runtime::DsdlVec<f32>,
/// Free-running command counter, incremented once per published message
/// and wrapping at 128. A controller that observes a gap knows it missed
/// a command and may enter its own failsafe rather than continuing to
/// actuate a stale setpoint.
pub sequence: u8,
/// When true, every controller shall cut drive current immediately and
/// ignore the ratio array. This is a commanded stop, not a failsafe: it
/// is asserted deliberately by the flight controller.
pub emergency_stop: bool,
}
Rust (no-std)¶
no_std + alloc profile, as a flight-controller firmware build would use.
/// Group throttle setpoint for the propulsion array.
///
/// VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
/// a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
/// moment the definition acquires a compatibility promise for the first
/// time. The field set was allowed to change on the way (a sequence
/// counter and an emergency-stop flag were added) precisely because 0.1
/// promised nothing.
///
/// WHY SEALED: this message is published at the inner-loop rate on every
/// armed flight. It is latency critical and never grows, so it pays
/// neither the delimiter header nor the extent slack. When the field set
/// does need to change, this definition will be superseded by 2.0 on a
/// new port.
///
/// LEAST SUPPORTED TRANSPORT: CAN FD.
#[derive(Clone, Debug, PartialEq)]
pub struct lanyard_propulsion_ThrottleCommand_1_0 {
/// Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
/// indexed by motor number.
pub ratio: crate::dsdl_runtime::DsdlVec<f32>,
/// Free-running command counter, incremented once per published message
/// and wrapping at 128. A controller that observes a gap knows it missed
/// a command and may enter its own failsafe rather than continuing to
/// actuate a stale setpoint.
pub sequence: u8,
/// When true, every controller shall cut drive current immediately and
/// ignore the ratio array. This is a commanded stop, not a failsafe: it
/// is asserted deliberately by the flight controller.
pub emergency_stop: bool,
}
Go¶
// Group throttle setpoint for the propulsion array.
//
// VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
// a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
// moment the definition acquires a compatibility promise for the first
// time. The field set was allowed to change on the way (a sequence
// counter and an emergency-stop flag were added) precisely because 0.1
// promised nothing.
//
// WHY SEALED: this message is published at the inner-loop rate on every
// armed flight. It is latency critical and never grows, so it pays
// neither the delimiter header nor the extent slack. When the field set
// does need to change, this definition will be superseded by 2.0 on a
// new port.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
type ThrottleCommand_1_0 struct {
// Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
// indexed by motor number.
Ratio []float32
// Free-running command counter, incremented once per published message
// and wrapping at 128. A controller that observes a gap knows it missed
// a command and may enter its own failsafe rather than continuing to
// actuate a stale setpoint.
Sequence uint8
// When true, every controller shall cut drive current immediately and
// ignore the ratio array. This is a commanded stop, not a failsafe: it
// is asserted deliberately by the flight controller.
EmergencyStop bool
}
TypeScript¶
// Group throttle setpoint for the propulsion array.
//
// VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
// a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
// moment the definition acquires a compatibility promise for the first
// time. The field set was allowed to change on the way (a sequence
// counter and an emergency-stop flag were added) precisely because 0.1
// promised nothing.
//
// WHY SEALED: this message is published at the inner-loop rate on every
// armed flight. It is latency critical and never grows, so it pays
// neither the delimiter header nor the extent slack. When the field set
// does need to change, this definition will be superseded by 2.0 on a
// new port.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
export interface ThrottleCommand_1_0 {
// Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
// indexed by motor number.
ratio: Array<number>;
// Free-running command counter, incremented once per published message
// and wrapping at 128. A controller that observes a gap knows it missed
// a command and may enter its own failsafe rather than continuing to
// actuate a stale setpoint.
sequence: number;
// When true, every controller shall cut drive current immediately and
// ignore the ratio array. This is a commanded stop, not a failsafe: it
// is asserted deliberately by the flight controller.
emergency_stop: boolean;
}
Python¶
# Group throttle setpoint for the propulsion array.
#
# VERSIONING: the stabilized successor to ThrottleCommand.0.1. Promoting
# a 0.x definition to 1.0 is not a "non-breaking change" -- it is the
# moment the definition acquires a compatibility promise for the first
# time. The field set was allowed to change on the way (a sequence
# counter and an emergency-stop flag were added) precisely because 0.1
# promised nothing.
#
# WHY SEALED: this message is published at the inner-loop rate on every
# armed flight. It is latency critical and never grows, so it pays
# neither the delimiter header nor the extent slack. When the field set
# does need to change, this definition will be superseded by 2.0 on a
# new port.
#
# LEAST SUPPORTED TRANSPORT: CAN FD.
@dataclass(slots=True)
class ThrottleCommand_1_0:
# Normalized throttle command per motor, 0.0 (idle) to 1.0 (full),
# indexed by motor number.
ratio: list[float] = field(default_factory=list)
# Free-running command counter, incremented once per published message
# and wrapping at 128. A controller that observes a gap knows it missed
# a command and may enter its own failsafe rather than continuing to
# actuate a stale setpoint.
sequence: int = 0
# When true, every controller shall cut drive current immediately and
# ignore the ratio array. This is a commanded stop, not a failsafe: it
# is asserted deliberately by the flight controller.
emergency_stop: bool = False
Every build recipe compiles this definition along with the rest of the namespace.