Add CH32 EXTI wait smoke and split Embassy runtime metadata - #70
Merged
Conversation
Add the PA7/USB CDC EXTI wait smoke project, regenerate the CH32 Embassy output for async wait support, and document the new validation artifact. The smoke build is currently parked because CH32 USB-based smoke images overflow the 32 KB flash budget after the HAL growth. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Alan Jowett <alan.jowett@microsoft.com> # Conflicts: # README.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
Alan-Jowett
force-pushed
the
alanjo/exti-wait-smoke-park
branch
from
July 16, 2026 15:59
63f8e87 to
94d0649
Compare
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR extends the HAIR Embassy generator/contracts to support CH32 EXTI-backed async GPIO waits (via embedded_hal_async::digital::Wait), adds a CH32 hardware smoke harness for EXTI waits, and reworks generated Embassy HAL crates to (1) gate peripheral families behind opt-in Cargo features and (2) split “runtime constructor inputs” from richer metadata inspection surfaces to keep metadata out of firmware hot paths.
Changes:
- Add an explicit
gpioExtiWaitBindingsprofile/schema contract (plusembedded-hal-async-waitcapability tag) to authorize EXTI-backed edge waits only when fully bound. - Update generated Embassy HAL crates to use opt-in features per family/capability and split
*RuntimeResourcesvs*MetadataResources. - Add
embassy-exti-wait-smokepackaging + validation documentation for CH32V203G6U6 EXTI wait hardware smoke.
Reviewed changes
Copilot reviewed 7 out of 101 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| specs/validation.md | Documents new validation expectations (feature gating, runtime/metadata split, EXTI wait contract) and adds EXTI wait smoke packaging step. |
| specs/requirements.md | Adds normative requirements for explicit EXTI wait bindings and feature/metadata size boundaries. |
| specs/design.md | Expands design rationale for EXTI wait lowering and size-oriented feature/API partitioning. |
| schema/profiles/embassy-hal.json | Adds gpioExtiWaitBindings / gpioExtiWaitLineBinding schema definitions and hooks them into the Embassy HAL profile. |
| README.md | Updates CH32 device row to reflect presence of multiple hardware smoke harnesses including EXTI wait packaging. |
| docs/embassy-hal-profile.md | Updates the Embassy profile contract to include EXTI wait and runtime/metadata API-shape partitioning expectations. |
| docs/cli.md | Updates CLI contract to include opt-in features and explicit EXTI wait lowering requirements. |
| evidence/wch/ch32v203g6u6/generated/embassy/Cargo.toml | Adds opt-in [features] surface and makes deps optional so families/capabilities can be compiled out. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/lib.rs | Gates peripheral modules behind corresponding Cargo features. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/metadata.rs | Adds embedded_hal::digital::Error impl for metadata Error when relevant features are enabled. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/adc.rs | Splits *Resources into *RuntimeResources + *MetadataResources and updates constructors/metadata access. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/dma.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/flash.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/gpio.rs | Adds/gates async-wait lowering and updates resources API shape (also contains the new wait poll logic). |
| evidence/wch/ch32v203g6u6/generated/embassy/src/i2c.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/interrupt.rs | Same runtime/metadata resource split as above; exposes interrupt routes via metadata accessor. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/pwm.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/rcc.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/rtc.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/spi.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/time.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/timer.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/uart.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/usb.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy/src/watchdog.rs | Same runtime/metadata resource split as above. |
| evidence/wch/ch32v203g6u6/generated/embassy-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES. |
| evidence/wch/ch32v203g6u6/generated/embassy-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-usb-cdc-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES. |
| evidence/wch/ch32v203g6u6/generated/embassy-usb-cdc-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-usb-cdc-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-watchdog-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES. |
| evidence/wch/ch32v203g6u6/generated/embassy-watchdog-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-watchdog-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-rtc-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES. |
| evidence/wch/ch32v203g6u6/generated/embassy-rtc-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-rtc-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-pwm-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES. |
| evidence/wch/ch32v203g6u6/generated/embassy-pwm-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-pwm-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-neopixel-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES. |
| evidence/wch/ch32v203g6u6/generated/embassy-neopixel-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-neopixel-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-flash-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES. |
| evidence/wch/ch32v203g6u6/generated/embassy-flash-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-flash-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-adc-dma-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES (removes local fake resource consts). |
| evidence/wch/ch32v203g6u6/generated/embassy-adc-dma-smoke/Cargo.toml | Enables only required HAL features for this smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-adc-dma-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/wch/ch32v203g6u6/generated/embassy-exti-wait-smoke/src/main.rs | New CH32 EXTI wait hardware smoke harness using GPIO waits over USB CDC + timeouts. |
| evidence/wch/ch32v203g6u6/generated/embassy-exti-wait-smoke/Cargo.toml | New smoke crate manifest enabling required HAL features (gpio + gpio-async-wait + usb + etc). |
| evidence/wch/ch32v203g6u6/generated/embassy-exti-wait-smoke/memory.x | Memory layout for the new flashable EXTI wait smoke. |
| evidence/wch/ch32v203g6u6/generated/embassy-exti-wait-smoke/build.rs | Links link.x and wires memory.x via link search path. |
| evidence/wch/ch32v203g6u6/generated/embassy-exti-wait-smoke/.cargo/config.toml | Targets riscv32imc-unknown-none-elf and supplies linker arg for memory.x. |
| evidence/wch/ch32v203g6u6/generated/embassy-exti-wait-smoke/build-smoke-bin.ps1 | New packaging script to build and emit a .bin for flashing. |
| evidence/texas-instruments/lm3s6965/generated/embassy/Cargo.toml | Adds opt-in features and optional deps for size-oriented gating. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/lib.rs | Gates peripheral modules behind features. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/rcc.rs | Splits runtime vs metadata resources. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/interrupt.rs | Splits runtime vs metadata resources; route list moved to metadata accessor. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/i2c.rs | Splits runtime vs metadata resources. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/spi.rs | Splits runtime vs metadata resources. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/time.rs | Splits runtime vs metadata resources; route list moved to metadata accessor. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/timer.rs | Splits runtime vs metadata resources. |
| evidence/texas-instruments/lm3s6965/generated/embassy/src/uart.rs | Splits runtime vs metadata resources. |
| evidence/texas-instruments/lm3s6965/generated/embassy-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES and static interrupt route accessors. |
| evidence/texas-instruments/lm3s6965/generated/embassy-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/st/stm32f405rgt6/generated/embassy/Cargo.toml | Adds opt-in features and optional deps for size-oriented gating. |
| evidence/st/stm32f405rgt6/generated/embassy/src/lib.rs | Gates peripheral modules behind features. |
| evidence/st/stm32f405rgt6/generated/embassy/src/interrupt.rs | Splits runtime vs metadata resources; route list moved to metadata accessor. |
| evidence/st/stm32f405rgt6/generated/embassy/src/i2c.rs | Splits runtime vs metadata resources. |
| evidence/st/stm32f405rgt6/generated/embassy/src/spi.rs | Splits runtime vs metadata resources. |
| evidence/st/stm32f405rgt6/generated/embassy/src/time.rs | Splits runtime vs metadata resources; route list moved to metadata accessor. |
| evidence/st/stm32f405rgt6/generated/embassy/src/uart.rs | Splits runtime vs metadata resources. |
| evidence/st/stm32f405rgt6/generated/embassy/src/usart.rs | Splits runtime vs metadata resources. |
| evidence/st/stm32f405rgt6/generated/embassy-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES and static interrupt route accessors. |
| evidence/st/stm32f405rgt6/generated/embassy-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
| evidence/espressif/esp32-c3fn4/generated/embassy/Cargo.toml | Adds opt-in features and optional deps for size-oriented gating. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/lib.rs | Gates peripheral modules behind features. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/adc.rs | Splits runtime vs metadata resources. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/gpio.rs | Splits runtime vs metadata resources and removes per-pin metadata retention from runtime pin types. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/i2c.rs | Splits runtime vs metadata resources. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/interrupt.rs | Splits runtime vs metadata resources; route list moved to metadata accessor. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/rcc.rs | Splits runtime vs metadata resources. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/spi.rs | Splits runtime vs metadata resources. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/time.rs | Splits runtime vs metadata resources. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/uart.rs | Splits runtime vs metadata resources. |
| evidence/espressif/esp32-c3fn4/generated/embassy/src/usb.rs | Splits runtime vs metadata resources. |
| evidence/espressif/esp32-c3fn4/generated/embassy-smoke/src/main.rs | Updates smoke to use *_RUNTIME_RESOURCES and static interrupt route accessors. |
| evidence/espressif/esp32-c3fn4/generated/embassy-usb-smoke/src/main.rs | Updates USB smoke to use *_RUNTIME_RESOURCES. |
| evidence/espressif/esp32-c3fn4/generated/embassy-smoke/Cargo.lock | Lockfile updates reflecting optional-dep feature selection. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Validation
Fixes #59