From 79362a6d1bdc407af40e27abecf576ebddbb3fa1 Mon Sep 17 00:00:00 2001 From: Lachezar Lechev Date: Mon, 10 Mar 2025 10:46:42 +0200 Subject: [PATCH] feat: postcard & postcard-experimental features Signed-off-by: Lachezar Lechev --- Cargo.toml | 3 +++ src/accel.rs | 3 +++ src/gravity.rs | 1 + src/gyro.rs | 15 +++++++++++++++ src/quaternion.rs | 1 + 5 files changed, 23 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 6dc9561..1ad2754 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,8 @@ default = [] defmt-03 = ["dep:defmt"] serde = ["dep:serde"] async = ["dep:embedded-hal-async"] +postcard = ["dep:postcard"] +postcard-experimental = ["postcard", "postcard/experimental-derive"] [dependencies] embedded-hal = { version = "1" } @@ -26,3 +28,4 @@ libm = "0.2" serde = { version = "1", features = ["derive"], default-features = false, optional = true } defmt = { version = "0.3", optional = true } +postcard = { version = "1", optional = true } diff --git a/src/accel.rs b/src/accel.rs index 616e036..ae6f53e 100644 --- a/src/accel.rs +++ b/src/accel.rs @@ -18,6 +18,7 @@ #[derive(Copy, Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub struct Accel { pub(crate) x: i16, pub(crate) y: i16, @@ -95,6 +96,7 @@ impl Accel { #[derive(Copy, Clone, Debug)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub enum AccelFullScale { /// ±2g range (16384 LSB/g) G2 = 0, @@ -134,6 +136,7 @@ impl AccelFullScale { #[derive(Debug, Clone, Copy)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub struct AccelF32 { /// X-axis acceleration in g-force x: f32, diff --git a/src/gravity.rs b/src/gravity.rs index 49e6ce7..943c74b 100644 --- a/src/gravity.rs +++ b/src/gravity.rs @@ -24,6 +24,7 @@ use crate::quaternion::Quaternion; #[derive(Debug, Copy, Clone)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub struct Gravity { /// Forward/backward tilt component pub x: f32, diff --git a/src/gyro.rs b/src/gyro.rs index 2ae2819..749b6a5 100644 --- a/src/gyro.rs +++ b/src/gyro.rs @@ -11,6 +11,7 @@ #[derive(Copy, Clone, Debug, PartialEq, Eq)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub struct Gyro { pub(crate) x: i16, pub(crate) y: i16, @@ -61,6 +62,12 @@ impl Gyro { } } +impl From for [i16; 3] { + fn from(value: Gyro) -> Self { + [value.x, value.y, value.z] + } +} + /// Full-scale range settings for the gyroscope. /// /// Each setting defines the maximum measurable rotation rate: @@ -71,6 +78,7 @@ impl Gyro { #[derive(Copy, Clone, Debug)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub enum GyroFullScale { /// ±250°/s range (131 LSB/°/s) Deg250 = 0, @@ -105,6 +113,7 @@ impl GyroFullScale { #[derive(Copy, Clone, Debug)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub struct GyroF32 { /// Roll rate (°/s) x: f32, @@ -131,3 +140,9 @@ impl GyroF32 { self.z } } + +impl From for [f32; 3] { + fn from(value: GyroF32) -> Self { + [value.x, value.y, value.z] + } +} \ No newline at end of file diff --git a/src/quaternion.rs b/src/quaternion.rs index 67e21d3..b3328ef 100644 --- a/src/quaternion.rs +++ b/src/quaternion.rs @@ -16,6 +16,7 @@ #[derive(Debug, Copy, Clone)] #[cfg_attr(feature = "defmt-03", derive(defmt::Format))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr(feature = "postcard-experimental", derive(postcard::experimental::max_size::MaxSize))] pub struct Quaternion { /// Scalar (real) component pub w: f32,