[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 = []