flowrs-engine/crates/flowrs-hal/Cargo.toml
flowRS fd958c0547 flowRS engine, cut from flowRS 3451b065
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 19:04:39 -05:00

67 lines
2.9 KiB
TOML

[package]
name = "flowrs-hal"
version.workspace = true
edition.workspace = true
publish.workspace = true
rust-version.workspace = true
authors.workspace = true
license = "MIT OR Apache-2.0"
description = "Hardware abstraction traits for FlowRS: no_std-capable GPIO / PWM / ADC / DAC / timer / serial / SPI / I2C / CAN for MCU targets and simulation, with the CAN wire forms (SocketCAN layouts, SLCAN, gs_usb)."
[lib]
crate-type = ["rlib"]
[features]
default = ["std"]
# Enable the standard library (adds `std::error::Error` for `HalError`).
std = []
# The typed link (`link`): flowrs-transport's link over this crate's UARTs, postcard
# payloads, and the stand-in interface digest from postcard-schema. `no_std`; firmware a
# graph compiles to turns it on when the graph crosses a link.
link = ["dep:flowrs-transport", "dep:postcard", "dep:postcard-schema", "dep:serde"]
[dependencies]
embedded-hal = { workspace = true }
# The Classical CAN frame trait every MCU HAL's CAN driver takes (MIT OR Apache-2.0); flowRS's
# `CcFrame` implements it.
embedded-can = "0.4.1"
# The non-blocking result embedded-can's `nb::Can` returns (MIT OR Apache-2.0; already in the
# lock under embedded-can).
nb = "1.1.0"
embedded-io = { workspace = true }
embedded-io-async = { workspace = true }
# The link protocol, without its `std` half: the module a microcontroller links.
flowrs-transport = { path = "../flowrs-transport", default-features = false, optional = true }
# Payloads (MIT OR Apache-2.0). No default features: no heapless, no std.
postcard = { version = "1.1.3", default-features = false, optional = true }
# The stand-in interface digest is a walk of a type's postcard-schema (MIT OR Apache-2.0).
postcard-schema = { version = "0.2.5", optional = true }
# Not the workspace's serde: that one turns on `rc`, which needs an allocator.
serde = { version = "1.0.228", default-features = false, optional = true }
# `cfg(kani)` is set by `cargo kani` (the CAN codecs' proofs, src/can/proofs.rs), never by
# cargo itself.
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(kani)'] }
[dev-dependencies]
# Symposium (`cargo agents`): an agent working on a project that depends on this crate gets
# the flowRS skill (crates/flowrs-mcp/symposium/flowrs, rendered by flowrs-mcp's
# skills::symposium_plugin) and the flowRS MCP server under the read-only plan profile. Never
# the full profile: a dependency is not a trust root, and Symposium registers servers at user
# level. Symposium 0.5.1 parses a crate's MCP entry but does not dispatch it yet; a registry
# carrying symposium/flowrs/SYMPOSIUM.toml registers the same entry today.
[package.metadata.symposium]
[package.metadata.symposium.defaults]
skills = false
[[package.metadata.symposium.skills]]
source.path = "../flowrs-mcp/symposium/flowrs/skills/core"
[[package.metadata.symposium.mcp_servers]]
name = "flowrs"
command = "flowrs-mcp"
args = ["--profile", "plan"]
env = []