lanyard.link.TelemetryLinkStats.1.0¶
Health of the air-to-ground telemetry link, published at 1 Hz by the radio modem node.
| Full name | lanyard.link.TelemetryLinkStats |
| Version | 1.0 |
| Kind | Message |
| Fixed port ID | 6241 |
| Least supported transport | CAN FD |
Wire layout¶
| Section | Extent (bytes) | Max serialized (bytes) |
|---|---|---|
| Message | 24 | 24 |
A sealed type reports its extent as its exact serialised size; a delimited type reports the declared @extent, which bounds what a reader must be prepared to receive.
Definition¶
# Health of the air-to-ground telemetry link, published at 1 Hz by the
# radio modem node.
#
# LEAST SUPPORTED TRANSPORT: CAN FD.
uavcan.time.SynchronizedTimestamp.1.0 timestamp
# Moment the counters below were sampled, on the synchronised clock
# every node shares, so a ground station can align this sample with the
# vehicle state that produced it.
int8 rssi_dbm
# Received signal strength in dBm at the air end of the link.
int8 noise_floor_dbm
# Measured noise floor in dBm. The difference between this and rssi_dbm
# is the link margin, which is the number an operator actually watches.
uint8 link_quality_pct
# Percentage of expected packets successfully received over the last
# second, 0 to 100.
uint32 tx_packets
# Packets transmitted since power-on.
uint32 rx_packets
# Packets received since power-on.
uint32 dropped_packets
# Packets lost since power-on, as counted by sequence number gaps.
uint16 round_trip_ms
# Most recent measured round-trip time in milliseconds.
@assert _offset_.max <= 63 * 8
# Must remain a single CAN FD frame.
@sealed
Generated code¶
Declaration excerpts only -- the serialisation bodies are omitted for length. Build the showroom target for the complete output in every language and profile.
C¶
/* Health of the air-to-ground telemetry link, published at 1 Hz by the */
/* radio modem node. */
/* */
/* LEAST SUPPORTED TRANSPORT: CAN FD. */
typedef struct lanyard__link__TelemetryLinkStats_1_0 {
/* Moment the counters below were sampled, on the synchronised clock */
/* every node shares, so a ground station can align this sample with the */
/* vehicle state that produced it. */
struct uavcan__time__SynchronizedTimestamp_1_0 timestamp;
/* Received signal strength in dBm at the air end of the link. */
int8_t rssi_dbm;
/* Measured noise floor in dBm. The difference between this and rssi_dbm */
/* is the link margin, which is the number an operator actually watches. */
int8_t noise_floor_dbm;
/* Percentage of expected packets successfully received over the last */
/* second, 0 to 100. */
uint8_t link_quality_pct;
/* Packets transmitted since power-on. */
uint32_t tx_packets;
/* Packets received since power-on. */
uint32_t rx_packets;
/* Packets lost since power-on, as counted by sequence number gaps. */
uint32_t dropped_packets;
/* Most recent measured round-trip time in milliseconds. */
uint16_t round_trip_ms;
} lanyard__link__TelemetryLinkStats_1_0;
C++ (std)¶
// Health of the air-to-ground telemetry link, published at 1 Hz by the
// radio modem node.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
struct TelemetryLinkStats_1_0 {
// Moment the counters below were sampled, on the synchronised clock
// every node shares, so a ground station can align this sample with the
// vehicle state that produced it.
::uavcan::time::SynchronizedTimestamp_1_0 timestamp{};
// Received signal strength in dBm at the air end of the link.
std::int8_t rssi_dbm{};
// Measured noise floor in dBm. The difference between this and rssi_dbm
// is the link margin, which is the number an operator actually watches.
std::int8_t noise_floor_dbm{};
// Percentage of expected packets successfully received over the last
// second, 0 to 100.
std::uint8_t link_quality_pct{};
// Packets transmitted since power-on.
std::uint32_t tx_packets{};
// Packets received since power-on.
std::uint32_t rx_packets{};
// Packets lost since power-on, as counted by sequence number gaps.
std::uint32_t dropped_packets{};
// Most recent measured round-trip time in milliseconds.
std::uint16_t round_trip_ms{};
static constexpr const char* FULL_NAME = "lanyard.link.TelemetryLinkStats";
static constexpr bool IS_DEPRECATED = false;
static constexpr const char* FULL_NAME_AND_VERSION = "lanyard.link.TelemetryLinkStats.1.0";
static constexpr std::size_t EXTENT_BYTES = 24U;
static constexpr std::size_t SERIALIZATION_BUFFER_SIZE_BYTES = 24U;
static constexpr bool WIRE_FLAT = true;
static constexpr const char* WIRE_FLAT_REASON = "flat";
static constexpr bool HOST_IMAGE = false;
static constexpr const char* HOST_IMAGE_REASON = "nested-not-flat";
static constexpr bool HAS_FIXED_PORT_ID = true;
static constexpr std::uint16_t FIXED_PORT_ID = 6241U;
LLVMDSDL_NODISCARD inline std::int8_t serialize(std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) const {
return TelemetryLinkStats_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 TelemetryLinkStats_1_0_deserialize_(this, buffer, inout_buffer_size_bytes);
}
static const std::uint8_t* get_timestamp(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes, std::size_t* const out_size)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const bool v0 = (static_cast<void>(buffer_size_bytes), true);
const std::uint64_t v1 = (v0 ? 0ULL : buffer_size_bytes);
const std::uint64_t v2 = (buffer_size_bytes - v1);
*out_size = static_cast<std::size_t>(v2);
return &buf[static_cast<std::size_t>(v1)];
}
static std::int8_t get_rssi_dbm(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_i8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(56ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_2_deser(value);
return static_cast<std::int8_t>(value_2);
}
static std::int8_t set_rssi_dbm(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::int8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 64ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_2_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_ixx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(56ULL), static_cast<std::int64_t>(value_2), 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::int8_t get_noise_floor_dbm(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_i8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(64ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_3_deser(value);
return static_cast<std::int8_t>(value_2);
}
static std::int8_t set_noise_floor_dbm(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::int8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 72ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_3_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_ixx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(64ULL), static_cast<std::int64_t>(value_2), 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint8_t get_link_quality_pct(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(72ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_4_deser(value);
return static_cast<std::uint8_t>(value_2);
}
static std::int8_t set_link_quality_pct(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 80ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_4_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(72ULL), value_2, 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_tx_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(80ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_5_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_tx_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 112ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_5_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(80ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_rx_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(112ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_6_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_rx_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 144ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_6_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(112ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_dropped_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(144ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_7_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_dropped_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 176ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_7_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(144ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint16_t get_round_trip_ms(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u16(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(176ULL), 16U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_8_deser(value);
return static_cast<std::uint16_t>(value_2);
}
static std::int8_t set_round_trip_ms(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint16_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 192ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_8_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(176ULL), value_2, 16U);
err = err_2;
} else {
err = v3;
}
return err;
}
};
C++ (pmr)¶
Polymorphic-allocator profile: variable-length fields route through std::pmr.
// Health of the air-to-ground telemetry link, published at 1 Hz by the
// radio modem node.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
struct TelemetryLinkStats_1_0 {
// Moment the counters below were sampled, on the synchronised clock
// every node shares, so a ground station can align this sample with the
// vehicle state that produced it.
::uavcan::time::SynchronizedTimestamp_1_0 timestamp{};
// Received signal strength in dBm at the air end of the link.
std::int8_t rssi_dbm{};
// Measured noise floor in dBm. The difference between this and rssi_dbm
// is the link margin, which is the number an operator actually watches.
std::int8_t noise_floor_dbm{};
// Percentage of expected packets successfully received over the last
// second, 0 to 100.
std::uint8_t link_quality_pct{};
// Packets transmitted since power-on.
std::uint32_t tx_packets{};
// Packets received since power-on.
std::uint32_t rx_packets{};
// Packets lost since power-on, as counted by sequence number gaps.
std::uint32_t dropped_packets{};
// Most recent measured round-trip time in milliseconds.
std::uint16_t round_trip_ms{};
::llvmdsdl::cpp::MemoryResource* _memory_resource{::llvmdsdl::cpp::default_memory_resource()};
TelemetryLinkStats_1_0() = default;
explicit TelemetryLinkStats_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();
timestamp.set_memory_resource(_memory_resource);
}
static constexpr const char* FULL_NAME = "lanyard.link.TelemetryLinkStats";
static constexpr bool IS_DEPRECATED = false;
static constexpr const char* FULL_NAME_AND_VERSION = "lanyard.link.TelemetryLinkStats.1.0";
static constexpr std::size_t EXTENT_BYTES = 24U;
static constexpr std::size_t SERIALIZATION_BUFFER_SIZE_BYTES = 24U;
static constexpr bool WIRE_FLAT = true;
static constexpr const char* WIRE_FLAT_REASON = "flat";
static constexpr bool HOST_IMAGE = false;
static constexpr const char* HOST_IMAGE_REASON = "nested-not-flat";
static constexpr bool HAS_FIXED_PORT_ID = true;
static constexpr std::uint16_t FIXED_PORT_ID = 6241U;
LLVMDSDL_NODISCARD inline std::int8_t serialize(std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) const {
return TelemetryLinkStats_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 TelemetryLinkStats_1_0_deserialize_(this, buffer, inout_buffer_size_bytes, _memory_resource);
}
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 TelemetryLinkStats_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 TelemetryLinkStats_1_0_deserialize_(this, buffer, inout_buffer_size_bytes, memory_resource);
}
static const std::uint8_t* get_timestamp(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes, std::size_t* const out_size)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const bool v0 = (static_cast<void>(buffer_size_bytes), true);
const std::uint64_t v1 = (v0 ? 0ULL : buffer_size_bytes);
const std::uint64_t v2 = (buffer_size_bytes - v1);
*out_size = static_cast<std::size_t>(v2);
return &buf[static_cast<std::size_t>(v1)];
}
static std::int8_t get_rssi_dbm(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_i8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(56ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_2_deser(value);
return static_cast<std::int8_t>(value_2);
}
static std::int8_t set_rssi_dbm(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::int8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 64ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_2_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_ixx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(56ULL), static_cast<std::int64_t>(value_2), 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::int8_t get_noise_floor_dbm(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_i8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(64ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_3_deser(value);
return static_cast<std::int8_t>(value_2);
}
static std::int8_t set_noise_floor_dbm(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::int8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 72ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_3_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_ixx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(64ULL), static_cast<std::int64_t>(value_2), 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint8_t get_link_quality_pct(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(72ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_4_deser(value);
return static_cast<std::uint8_t>(value_2);
}
static std::int8_t set_link_quality_pct(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 80ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_4_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(72ULL), value_2, 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_tx_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(80ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_5_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_tx_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 112ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_5_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(80ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_rx_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(112ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_6_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_rx_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 144ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_6_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(112ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_dropped_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(144ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_7_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_dropped_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 176ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_7_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(144ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint16_t get_round_trip_ms(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u16(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(176ULL), 16U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_8_deser(value);
return static_cast<std::uint16_t>(value_2);
}
static std::int8_t set_round_trip_ms(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint16_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 192ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_8_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(176ULL), value_2, 16U);
err = err_2;
} else {
err = v3;
}
return err;
}
};
C++ (autosar)¶
AUTOSAR C++14 subset profile.
// Health of the air-to-ground telemetry link, published at 1 Hz by the
// radio modem node.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
struct TelemetryLinkStats_1_0 {
// Moment the counters below were sampled, on the synchronised clock
// every node shares, so a ground station can align this sample with the
// vehicle state that produced it.
::uavcan::time::SynchronizedTimestamp_1_0 timestamp{};
// Received signal strength in dBm at the air end of the link.
std::int8_t rssi_dbm{};
// Measured noise floor in dBm. The difference between this and rssi_dbm
// is the link margin, which is the number an operator actually watches.
std::int8_t noise_floor_dbm{};
// Percentage of expected packets successfully received over the last
// second, 0 to 100.
std::uint8_t link_quality_pct{};
// Packets transmitted since power-on.
std::uint32_t tx_packets{};
// Packets received since power-on.
std::uint32_t rx_packets{};
// Packets lost since power-on, as counted by sequence number gaps.
std::uint32_t dropped_packets{};
// Most recent measured round-trip time in milliseconds.
std::uint16_t round_trip_ms{};
static constexpr const char* FULL_NAME = "lanyard.link.TelemetryLinkStats";
static constexpr bool IS_DEPRECATED = false;
static constexpr const char* FULL_NAME_AND_VERSION = "lanyard.link.TelemetryLinkStats.1.0";
static constexpr std::size_t EXTENT_BYTES = 24U;
static constexpr std::size_t SERIALIZATION_BUFFER_SIZE_BYTES = 24U;
static constexpr bool WIRE_FLAT = true;
static constexpr const char* WIRE_FLAT_REASON = "flat";
static constexpr bool HOST_IMAGE = false;
static constexpr const char* HOST_IMAGE_REASON = "nested-not-flat";
static constexpr bool HAS_FIXED_PORT_ID = true;
static constexpr std::uint16_t FIXED_PORT_ID = 6241U;
LLVMDSDL_NODISCARD inline std::int8_t serialize(std::uint8_t* buffer, std::size_t* inout_buffer_size_bytes) const {
return TelemetryLinkStats_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 TelemetryLinkStats_1_0_deserialize_(this, buffer, inout_buffer_size_bytes);
}
static const std::uint8_t* get_timestamp(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes, std::size_t* const out_size)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const bool v0 = (static_cast<void>(buffer_size_bytes), true);
const std::uint64_t v1 = (v0 ? 0ULL : buffer_size_bytes);
const std::uint64_t v2 = (buffer_size_bytes - v1);
*out_size = static_cast<std::size_t>(v2);
return &buf[static_cast<std::size_t>(v1)];
}
static std::int8_t get_rssi_dbm(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_i8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(56ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_2_deser(value);
return static_cast<std::int8_t>(value_2);
}
static std::int8_t set_rssi_dbm(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::int8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 64ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_2_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_ixx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(56ULL), static_cast<std::int64_t>(value_2), 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::int8_t get_noise_floor_dbm(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_i8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(64ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_3_deser(value);
return static_cast<std::int8_t>(value_2);
}
static std::int8_t set_noise_floor_dbm(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::int8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 72ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_signed_lanyard_link_TelemetryLinkStats_1_0_3_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_ixx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(64ULL), static_cast<std::int64_t>(value_2), 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint8_t get_link_quality_pct(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u8(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(72ULL), 8U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_4_deser(value);
return static_cast<std::uint8_t>(value_2);
}
static std::int8_t set_link_quality_pct(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint8_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 80ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_4_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(72ULL), value_2, 8U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_tx_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(80ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_5_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_tx_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 112ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_5_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(80ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_rx_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(112ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_6_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_rx_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 144ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_6_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(112ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint32_t get_dropped_packets(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u32(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(144ULL), 32U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_7_deser(value);
return static_cast<std::uint32_t>(value_2);
}
static std::int8_t set_dropped_packets(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint32_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 176ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_7_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(144ULL), value_2, 32U);
err = err_2;
} else {
err = v3;
}
return err;
}
static std::uint16_t get_round_trip_ms(const std::uint8_t* const buffer, const std::size_t buffer_size_bytes)
{
const std::uint8_t* const buf = ((buffer != nullptr) ? buffer : reinterpret_cast<const std::uint8_t*>(""));
const std::uint64_t value = static_cast<std::uint64_t>(dsdl_runtime_get_u16(buf, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(176ULL), 16U));
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_8_deser(value);
return static_cast<std::uint16_t>(value_2);
}
static std::int8_t set_round_trip_ms(std::uint8_t* const buffer, const std::size_t buffer_size_bytes, const std::uint16_t member_value)
{
const std::uint64_t value = static_cast<std::uint64_t>(member_value);
const bool is_null = (buffer == nullptr);
const std::uint64_t v0 = (buffer_size_bytes * 8ULL);
const bool v1 = (v0 >= 192ULL);
const std::int8_t v2 = static_cast<std::int8_t>(v1 ? static_cast<std::int8_t>(0) : static_cast<std::int8_t>(-3));
const std::int8_t v3 = static_cast<std::int8_t>(is_null ? static_cast<std::int8_t>(-2) : v2);
const bool v4 = (v3 == static_cast<std::int8_t>(0));
std::int8_t err{};
if (v4) {
const std::uint64_t value_2 = mlir_llvmdsdl_plan_scalar_unsigned_lanyard_link_TelemetryLinkStats_1_0_8_ser(value);
const std::int8_t err_2 = dsdl_runtime_set_uxx(buffer, static_cast<std::size_t>(buffer_size_bytes), static_cast<std::size_t>(176ULL), value_2, 16U);
err = err_2;
} else {
err = v3;
}
return err;
}
};
Rust (std)¶
/// Health of the air-to-ground telemetry link, published at 1 Hz by the
/// radio modem node.
///
/// LEAST SUPPORTED TRANSPORT: CAN FD.
#[derive(Clone, Debug, PartialEq)]
pub struct lanyard_link_TelemetryLinkStats_1_0 {
/// Moment the counters below were sampled, on the synchronised clock
/// every node shares, so a ground station can align this sample with the
/// vehicle state that produced it.
pub timestamp: uavcan_time_SynchronizedTimestamp_1_0,
/// Received signal strength in dBm at the air end of the link.
pub rssi_dbm: i8,
/// Measured noise floor in dBm. The difference between this and rssi_dbm
/// is the link margin, which is the number an operator actually watches.
pub noise_floor_dbm: i8,
/// Percentage of expected packets successfully received over the last
/// second, 0 to 100.
pub link_quality_pct: u8,
/// Packets transmitted since power-on.
pub tx_packets: u32,
/// Packets received since power-on.
pub rx_packets: u32,
/// Packets lost since power-on, as counted by sequence number gaps.
pub dropped_packets: u32,
/// Most recent measured round-trip time in milliseconds.
pub round_trip_ms: u16,
}
Rust (no-std)¶
no_std + alloc profile, as a flight-controller firmware build would use.
/// Health of the air-to-ground telemetry link, published at 1 Hz by the
/// radio modem node.
///
/// LEAST SUPPORTED TRANSPORT: CAN FD.
#[derive(Clone, Debug, PartialEq)]
pub struct lanyard_link_TelemetryLinkStats_1_0 {
/// Moment the counters below were sampled, on the synchronised clock
/// every node shares, so a ground station can align this sample with the
/// vehicle state that produced it.
pub timestamp: uavcan_time_SynchronizedTimestamp_1_0,
/// Received signal strength in dBm at the air end of the link.
pub rssi_dbm: i8,
/// Measured noise floor in dBm. The difference between this and rssi_dbm
/// is the link margin, which is the number an operator actually watches.
pub noise_floor_dbm: i8,
/// Percentage of expected packets successfully received over the last
/// second, 0 to 100.
pub link_quality_pct: u8,
/// Packets transmitted since power-on.
pub tx_packets: u32,
/// Packets received since power-on.
pub rx_packets: u32,
/// Packets lost since power-on, as counted by sequence number gaps.
pub dropped_packets: u32,
/// Most recent measured round-trip time in milliseconds.
pub round_trip_ms: u16,
}
Go¶
// Health of the air-to-ground telemetry link, published at 1 Hz by the
// radio modem node.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
type TelemetryLinkStats_1_0 struct {
// Moment the counters below were sampled, on the synchronised clock
// every node shares, so a ground station can align this sample with the
// vehicle state that produced it.
Timestamp pkg_uavcan_time.SynchronizedTimestamp_1_0
// Received signal strength in dBm at the air end of the link.
RssiDbm int8
// Measured noise floor in dBm. The difference between this and rssi_dbm
// is the link margin, which is the number an operator actually watches.
NoiseFloorDbm int8
// Percentage of expected packets successfully received over the last
// second, 0 to 100.
LinkQualityPct uint8
// Packets transmitted since power-on.
TxPackets uint32
// Packets received since power-on.
RxPackets uint32
// Packets lost since power-on, as counted by sequence number gaps.
DroppedPackets uint32
// Most recent measured round-trip time in milliseconds.
RoundTripMs uint16
}
TypeScript¶
// Health of the air-to-ground telemetry link, published at 1 Hz by the
// radio modem node.
//
// LEAST SUPPORTED TRANSPORT: CAN FD.
export interface TelemetryLinkStats_1_0 {
// Moment the counters below were sampled, on the synchronised clock
// every node shares, so a ground station can align this sample with the
// vehicle state that produced it.
timestamp: SynchronizedTimestamp_1_0;
// Received signal strength in dBm at the air end of the link.
rssi_dbm: number;
// Measured noise floor in dBm. The difference between this and rssi_dbm
// is the link margin, which is the number an operator actually watches.
noise_floor_dbm: number;
// Percentage of expected packets successfully received over the last
// second, 0 to 100.
link_quality_pct: number;
// Packets transmitted since power-on.
tx_packets: number;
// Packets received since power-on.
rx_packets: number;
// Packets lost since power-on, as counted by sequence number gaps.
dropped_packets: number;
// Most recent measured round-trip time in milliseconds.
round_trip_ms: number;
}
Python¶
# Health of the air-to-ground telemetry link, published at 1 Hz by the
# radio modem node.
#
# LEAST SUPPORTED TRANSPORT: CAN FD.
@dataclass(slots=True)
class TelemetryLinkStats_1_0:
# Moment the counters below were sampled, on the synchronised clock
# every node shares, so a ground station can align this sample with the
# vehicle state that produced it.
timestamp: SynchronizedTimestamp_1_0 = field(default_factory=lambda: SynchronizedTimestamp_1_0())
# Received signal strength in dBm at the air end of the link.
rssi_dbm: int = 0
# Measured noise floor in dBm. The difference between this and rssi_dbm
# is the link margin, which is the number an operator actually watches.
noise_floor_dbm: int = 0
# Percentage of expected packets successfully received over the last
# second, 0 to 100.
link_quality_pct: int = 0
# Packets transmitted since power-on.
tx_packets: int = 0
# Packets received since power-on.
rx_packets: int = 0
# Packets lost since power-on, as counted by sequence number gaps.
dropped_packets: int = 0
# Most recent measured round-trip time in milliseconds.
round_trip_ms: int = 0
Every build recipe compiles this definition along with the rest of the namespace.