Depends on #34
What
Implement and upstream a safe, idiomatic async Rust wrapper over the raw Rust bindings to the async uart interrupt-driven API AND the async uart DMA-driven API.
Additionally, implement the embedded-io-async trait as this is a common interface in the Rust community.
Why
The uart-service needs proper uart async support to not block the entire executor when waiting for data over UART. Fortunately Zephyr provides two non-blocking APIs which should be relatively easy to wrap async around. Both interrupt-driven and DMA-driven interfaces should be supported to maximize hardware availability (since some drivers may only implement one or the other).
Depends on #34
What
Implement and upstream a safe, idiomatic async Rust wrapper over the raw Rust bindings to the async uart interrupt-driven API AND the async uart DMA-driven API.
Additionally, implement the
embedded-io-asynctrait as this is a common interface in the Rust community.Why
The uart-service needs proper uart async support to not block the entire executor when waiting for data over UART. Fortunately Zephyr provides two non-blocking APIs which should be relatively easy to wrap async around. Both interrupt-driven and DMA-driven interfaces should be supported to maximize hardware availability (since some drivers may only implement one or the other).