Add LICENSE-MIT and LICENSE-APACHE at workspace root and in each member package so the dual MIT OR Apache-2.0 license ships in the published .crate. Fill in publish metadata (authors, repository, homepage, readme, keywords, categories) across the workspace and both members. Add CHANGELOG.md with a 0.1.0 initial release entry. Fix clippy lints: unused enumerate index, collapsible if, Default impls for TimerTable, SimRadio, and Ctx, use RangeInclusive::contains. Exclude examples/microwave_tui.rs from the published package. The file stays in-tree but has known unawaited async log futures that need a dedicated pass before it ships. Apply cargo fmt across the workspace.
44 lines
1.8 KiB
Markdown
44 lines
1.8 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this workspace are documented here. The format
|
|
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
|
|
this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
|
## 0.1.0 — 2026-04-22
|
|
|
|
Initial release.
|
|
|
|
### Added
|
|
|
|
- `statechart!` proc macro: declarative Harel-style hierarchical state
|
|
machines with nested states, `entry:` / `exit:` actions, LCA-aware
|
|
transitions, default-child descent, and `terminate` semantics.
|
|
- Typed event payload bindings:
|
|
`on(PacketRx { rssi: i16 }) => handler;` expands into a typed handler
|
|
signature, verified at compile time.
|
|
- Timer triggers: `on(after Duration::from_secs(5)) => Next;` and
|
|
`on(every Duration::from_millis(100)) => tick;`, tracked in a
|
|
fixed-capacity `TimerTable`.
|
|
- `during:` activities (v0.2 semantics): async functions that run
|
|
while a state is on the active path and produce events. Multiple
|
|
concurrent durings on a single state borrow disjoint `&mut` slices of
|
|
the context, enforced by Rust's native split-borrow.
|
|
- Runtime: `machine.run().await` races active durings, the external
|
|
event channel, and timer deadlines — one future, cooperative on
|
|
embassy, multi-threaded on tokio.
|
|
- Feature gates: `tokio` (std + tokio runtime), `embassy` (no_std +
|
|
embassy-time / embassy-sync). The two features are mutually
|
|
exclusive and enforced via `compile_error!`.
|
|
- `no_std` by default; `std` pulled in only via the `tokio` feature.
|
|
- `STATE_CHART` const and `dispatch()` helper for introspection.
|
|
- Workspace: `hsmc` (library) and `hsmc-macros` (proc-macro front-end)
|
|
both at `0.1.0`.
|
|
|
|
### Docs
|
|
|
|
- 320-line `README.md` with quickstart, semantics, and examples.
|
|
- Runnable examples: `microwave` and `during_radio` under tokio,
|
|
`embassy_full` under embassy.
|
|
- Behavior, hierarchy, during, timer, and payload-binding test suites
|
|
(13 integration tests).
|