From 290b0496b445912df32466f0419ede8c7c74bd7a Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Fri, 16 May 2025 12:05:00 +0800 Subject: [PATCH 1/5] mctp-estack: Don't depend on unused embassy-futures Signed-off-by: Matt Johnston --- Cargo.lock | 7 ------- mctp-estack/Cargo.toml | 1 - 2 files changed, 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 126871b..b0ac4be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -465,12 +465,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "embassy-futures" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f878075b9794c1e4ac788c95b728f26aa6366d32eeb10c7051389f898f7d067" - [[package]] name = "embassy-sync" version = "0.6.2" @@ -827,7 +821,6 @@ version = "0.1.0" dependencies = [ "crc", "defmt", - "embassy-futures", "embassy-sync", "embedded-io-adapters", "embedded-io-async", diff --git a/mctp-estack/Cargo.toml b/mctp-estack/Cargo.toml index 2fa4f23..83c9f83 100644 --- a/mctp-estack/Cargo.toml +++ b/mctp-estack/Cargo.toml @@ -17,7 +17,6 @@ crc = "3" embedded-io-async = { workspace = true } defmt = { workspace = true, optional = true } embassy-sync = "0.6" -embassy-futures = "0.1" smbus-pec = { version = "1.0", features = ["lookup-table"] } uuid = { version = "1.16.0", default-features = false } From 7abd218a63d287a2a5447ec12b40b129abd26064 Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Wed, 4 Jun 2025 12:51:31 +0800 Subject: [PATCH 2/5] mctp-estack: Don't export get_build_var() Was accidentally exported previously. Signed-off-by: Matt Johnston --- mctp-estack/src/lib.rs | 3 +-- mctp-estack/src/util.rs | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/mctp-estack/src/lib.rs b/mctp-estack/src/lib.rs index 6709dbe..29ca280 100644 --- a/mctp-estack/src/lib.rs +++ b/mctp-estack/src/lib.rs @@ -45,6 +45,7 @@ mod reassemble; pub mod router; pub mod serial; pub mod usb; +#[macro_use] mod util; pub use fragment::{Fragmenter, SendOutput}; @@ -80,8 +81,6 @@ pub(crate) const HEADER_LEN: usize = 4; /// during the build. Those variables can be set in the `[env]` /// section of `.cargo/config.toml`. pub mod config { - use crate::get_build_var; - /// Maximum size of a MCTP message payload in bytes, default 1032 /// /// This does not include the MCTP type byte. diff --git a/mctp-estack/src/util.rs b/mctp-estack/src/util.rs index 9d707b1..3b1fdb3 100644 --- a/mctp-estack/src/util.rs +++ b/mctp-estack/src/util.rs @@ -1,7 +1,6 @@ /// Takes a `usize` from a build-time environment variable. /// /// If unset, the default is used. Can be used in a const context. -#[macro_export] macro_rules! get_build_var { ($name:literal, $default:expr) => {{ match option_env!($name) { From 0ddc3f2ea4b663d529c06066621d4d5fe3877cc5 Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Wed, 4 Jun 2025 13:05:15 +0800 Subject: [PATCH 3/5] Make mctp_estack::fragment public That makes Fragmenter no longer a top level struct, since it isn't commonly used. Signed-off-by: Matt Johnston --- mctp-estack/src/lib.rs | 4 ++-- standalone/src/serial.rs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mctp-estack/src/lib.rs b/mctp-estack/src/lib.rs index 29ca280..d6fc189 100644 --- a/mctp-estack/src/lib.rs +++ b/mctp-estack/src/lib.rs @@ -39,7 +39,7 @@ use heapless::FnvIndexMap; use mctp::{Eid, Error, MsgType, Result, Tag, TagValue}; pub mod control; -mod fragment; +pub mod fragment; pub mod i2c; mod reassemble; pub mod router; @@ -48,7 +48,7 @@ pub mod usb; #[macro_use] mod util; -pub use fragment::{Fragmenter, SendOutput}; +use fragment::{Fragmenter, SendOutput}; use reassemble::Reassembler; pub use router::Router; diff --git a/standalone/src/serial.rs b/standalone/src/serial.rs index d0076d1..6256942 100644 --- a/standalone/src/serial.rs +++ b/standalone/src/serial.rs @@ -16,7 +16,8 @@ use smol::Timer; use mctp::{Eid, Error, MsgType, Result, Tag, TagValue}; use mctp_estack::{ - serial::MctpSerialHandler, MctpMessage, ReceiveHandle, SendOutput, Stack, + fragment::SendOutput, serial::MctpSerialHandler, MctpMessage, + ReceiveHandle, Stack, }; struct Inner { From edc1b46aa6e7158211c0d4cacdf79c21d6eb4cf6 Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Wed, 4 Jun 2025 13:16:42 +0800 Subject: [PATCH 4/5] mctp-estack: Update embassy-sync to 0.7 This provides a Sync+Send bound for zerocopy_channel::Channel used by Router. Otherwise Router can't be used with non-local executors. Signed-off-by: Matt Johnston --- Cargo.lock | 4 ++-- mctp-estack/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0ac4be..c14201d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -467,9 +467,9 @@ dependencies = [ [[package]] name = "embassy-sync" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049" +checksum = "cef1a8a1ea892f9b656de0295532ac5d8067e9830d49ec75076291fd6066b136" dependencies = [ "cfg-if", "critical-section", diff --git a/mctp-estack/Cargo.toml b/mctp-estack/Cargo.toml index 83c9f83..caabca8 100644 --- a/mctp-estack/Cargo.toml +++ b/mctp-estack/Cargo.toml @@ -16,7 +16,7 @@ log = { version = "0.4", optional = true } crc = "3" embedded-io-async = { workspace = true } defmt = { workspace = true, optional = true } -embassy-sync = "0.6" +embassy-sync = "0.7" smbus-pec = { version = "1.0", features = ["lookup-table"] } uuid = { version = "1.16.0", default-features = false } From bf302d0f90213e340adeda200b7981a75f978af1 Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Wed, 4 Jun 2025 13:52:40 +0800 Subject: [PATCH 5/5] Documentation improvements Signed-off-by: Matt Johnston --- mctp-estack/src/lib.rs | 15 +++++++++++---- mctp/src/lib.rs | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/mctp-estack/src/lib.rs b/mctp-estack/src/lib.rs index d6fc189..f621613 100644 --- a/mctp-estack/src/lib.rs +++ b/mctp-estack/src/lib.rs @@ -3,14 +3,13 @@ * Copyright (c) 2024-2025 Code Construct */ -//! MCTP Stack +//! # MCTP Stack //! //! This crate provides a MCTP stack that can be embedded in other programs -//! or devices. A [`Stack`] handles MCTP message formatting and parsing, independent -//! of any particular MCTP transport binding. +//! or devices. //! //! A [`Router`] object lets programs use a [`Stack`] with -//! MCTP transport binding links. Each "port" handles transmitting and receiving +//! MCTP transport binding links. Each *Port* handles transmitting and receiving //! packets independently. Messages destined for the stack's own EID will //! be passed to applications. //! @@ -18,6 +17,9 @@ //! instances to communicate over MCTP. Those implement the standard [`mctp` crate](mctp) //! async traits. //! +//! The IO-less [`Stack`] handles MCTP message formatting and parsing, independent +//! of any particular MCTP transport binding. +//! //! ## Configuration //! //! `mctp-estack` uses fixed sizes to be suitable on no-alloc platforms. @@ -30,6 +32,8 @@ /// Re-exported so that callers can use the same `heapless` version. /// +/// `heapless::Vec` is currently an argument of `send_fill()` in transports. +/// /// TODO: will be replaced with something else, maybe `heapless::VecView` once /// released. pub use heapless::Vec; @@ -141,6 +145,9 @@ type Header = libmctp::base_packet::MCTPTransportHeader<[u8; HEADER_LEN]>; #[derive(Debug)] pub struct ReceiveHandle(usize); +/// Low level MCTP stack. +/// +/// This is an IO-less MCTP stack, independent of any particular transport. #[derive(Debug)] pub struct Stack { own_eid: Eid, diff --git a/mctp/src/lib.rs b/mctp/src/lib.rs index defa638..90fb229 100644 --- a/mctp/src/lib.rs +++ b/mctp/src/lib.rs @@ -10,7 +10,7 @@ #![forbid(unsafe_code)] #![warn(missing_docs)] -//! Management Component Transport Protocol (MCTP) +//! # Management Component Transport Protocol (MCTP) //! //! This crate provides common types and traits for MCTP. //! Transport implementations can implement [`ReqChannel`] and [`Listener`] to