diff --git a/CHANGELOG.md b/CHANGELOG.md index 98f1212..03fe451 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/). +## [Unreleased] + +### Changed + +- Migrated to embassy-executor 0.10 and embassy-rp 0.10 +- ESP crates (esp-hal, esp-rtos, esp-backtrace, esp-println) patched from + esp-rs/esp-hal main branch until esp-rtos publishes with 0.10 support +- Adapted to embassy-executor 0.10 SpawnToken API (task functions now return + `Result`, `Spawner::spawn` no longer returns Result) +- Adapted to esp-hal main branch API changes: `efuse::base_mac_address()`, + `esp_rtos::start` now requires `SoftwareInterrupt`, embassy-rp SPI + constructor now requires DMA interrupt bindings +- `just check` now runs clippy with `-D warnings` instead of plain `cargo check` +- Rust toolchain bumped to 1.94 in mise.toml + +### Fixed + +- UART boards (heltec_v3_uart) display stuck on splash screen after boot. + Host task sent `DisplayCommand::Reset` (which sets disconnected=true) instead + of `DisplayCommand::On`. UART has no DTR, so nothing ever cleared it. + ## [0.3.0] - 2026-04-10 ### Added diff --git a/Cargo.lock b/Cargo.lock index f421601..44724f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -145,12 +145,33 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "cc" +version = "1.2.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" +dependencies = [ + "find-msvc-tools", + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "defmt 1.0.1", + "num-traits", + "pure-rust-locales", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -161,6 +182,16 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "cordyceps" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" +dependencies = [ + "loom", + "tracing", +] + [[package]] name = "cortex-m" version = "0.7.7" @@ -455,7 +486,7 @@ dependencies = [ [[package]] name = "donglora" -version = "0.2.1" +version = "0.3.0" dependencies = [ "cfg-if", "cortex-m", @@ -464,7 +495,7 @@ dependencies = [ "defmt 1.0.1", "defmt-rtt", "display-interface", - "embassy-embedded-hal 0.6.0", + "embassy-embedded-hal", "embassy-executor", "embassy-futures", "embassy-nrf", @@ -498,23 +529,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "embassy-embedded-hal" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8" -dependencies = [ - "embassy-futures", - "embassy-hal-internal 0.3.0", - "embassy-sync 0.7.2", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-storage", - "embedded-storage-async", - "nb 1.1.0", -] - [[package]] name = "embassy-embedded-hal" version = "0.6.0" @@ -536,10 +550,11 @@ dependencies = [ [[package]] name = "embassy-executor" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06070468370195e0e86f241c8e5004356d696590a678d47d6676795b2e439c6b" +checksum = "5d0d3b15c9d7dc4fec1d8cb77112472fb008b3b28c51ad23838d83587a6d2f1e" dependencies = [ + "cordyceps", "cortex-m", "critical-section", "document-features", @@ -549,9 +564,9 @@ dependencies = [ [[package]] name = "embassy-executor-macros" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfdddc3a04226828316bf31393b6903ee162238576b1584ee2669af215d55472" +checksum = "d11a246f53de5f97a387f40ac24726817cd0b6f833e7603baac784f29d6ff276" dependencies = [ "darling 0.20.11", "proc-macro2", @@ -571,18 +586,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" -[[package]] -name = "embassy-hal-internal" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" -dependencies = [ - "cortex-m", - "critical-section", - "defmt 1.0.1", - "num-traits", -] - [[package]] name = "embassy-hal-internal" version = "0.4.0" @@ -634,7 +637,7 @@ dependencies = [ "critical-section", "defmt 1.0.1", "document-features", - "embassy-embedded-hal 0.6.0", + "embassy-embedded-hal", "embassy-futures", "embassy-hal-internal 0.5.0", "embassy-sync 0.8.0", @@ -656,20 +659,21 @@ dependencies = [ [[package]] name = "embassy-rp" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8d5ac11a8bc209d359ad98bb10a10f786471dd474790f3a4f991c77ae94f6f" +checksum = "5d98f472894c1ecffac5596c657af5305c57282d29e8746d7fec033951931bc8" dependencies = [ "cfg-if", + "chrono", "cortex-m", "cortex-m-rt", "critical-section", "defmt 1.0.1", "document-features", - "embassy-embedded-hal 0.5.0", + "embassy-embedded-hal", "embassy-futures", - "embassy-hal-internal 0.3.0", - "embassy-sync 0.7.2", + "embassy-hal-internal 0.5.0", + "embassy-sync 0.8.0", "embassy-time", "embassy-time-driver", "embassy-time-queue-utils", @@ -678,8 +682,8 @@ dependencies = [ "embedded-hal 1.0.0", "embedded-hal-async", "embedded-hal-nb", - "embedded-io 0.6.1", - "embedded-io-async 0.6.1", + "embedded-io 0.7.1", + "embedded-io-async 0.7.0", "embedded-storage", "embedded-storage-async", "fixed", @@ -968,8 +972,7 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "esp-backtrace" version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3318413fb566c7227387f67736cf70cd74d80a11f2bb31c7b95a9eb48d079669" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "cfg-if", "defmt 1.0.1", @@ -986,8 +989,7 @@ dependencies = [ [[package]] name = "esp-config" version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102871054f8dd98202177b9890cb4b71d0c6fe1f1413b7a379a8e0841fc2473c" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "document-features", "esp-metadata-generated", @@ -999,8 +1001,7 @@ dependencies = [ [[package]] name = "esp-hal" version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54786287c0a61ca0f78cb0c338a39427551d1be229103b4444591796c579e093" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "bitfield 0.19.4", "bitflags 2.11.0", @@ -1010,9 +1011,9 @@ dependencies = [ "delegate", "digest", "document-features", - "embassy-embedded-hal 0.5.0", + "embassy-embedded-hal", "embassy-futures", - "embassy-sync 0.7.2", + "embassy-sync 0.8.0", "embassy-usb-driver", "embassy-usb-synopsys-otg", "embedded-can", @@ -1042,6 +1043,7 @@ dependencies = [ "nb 1.1.0", "paste", "portable-atomic", + "rand_core 0.10.0", "rand_core 0.6.4", "rand_core 0.9.5", "riscv", @@ -1054,8 +1056,7 @@ dependencies = [ [[package]] name = "esp-hal-procmacros" version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e025a7a7a0affdb4ff913b5c4494aef96ee03d085bf83c27453ae3a71d50da6" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "document-features", "object", @@ -1069,14 +1070,12 @@ dependencies = [ [[package]] name = "esp-metadata-generated" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a93e39c8ad8d390d248dc7b9f4b59a873f313bf535218b8e2351356972399e3" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" [[package]] name = "esp-println" version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a30e6c9fbcc01c348d46706fef8131c7775ab84c254a3cd65d0cd3f6414d592" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "defmt 1.0.1", "document-features", @@ -1089,8 +1088,7 @@ dependencies = [ [[package]] name = "esp-riscv-rt" version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502744a5b1e7268d27fd2a4e56ad45efe42ead517d6c517a6961540de949b0ee" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "document-features", "riscv", @@ -1100,44 +1098,46 @@ dependencies = [ [[package]] name = "esp-rom-sys" version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd66cccc6dd2d13e9f33668a57717ab14a6d217180ec112e6be533de93e7ecbf" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "cfg-if", "document-features", "esp-metadata-generated", + "esp32s3", ] [[package]] name = "esp-rtos" version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ec711c8d06e79c67b75d01595539e86b0aac209643af98ca87a12250428b3" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "cfg-if", "document-features", "embassy-executor", - "embassy-sync 0.7.2", + "embassy-sync 0.8.0", "embassy-time-driver", "embassy-time-queue-utils", "esp-config", "esp-hal", "esp-hal-procmacros", "esp-metadata-generated", + "esp-rom-sys", "esp-sync", "portable-atomic", + "riscv", + "xtensa-lx", ] [[package]] name = "esp-sync" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44974639b4e88914f83fe60d2832c00276657d7d857628fdfc966cc7302e8a8" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "cfg-if", "document-features", "embassy-sync 0.6.2", "embassy-sync 0.7.2", + "embassy-sync 0.8.0", "esp-metadata-generated", "riscv", "xtensa-lx", @@ -1159,8 +1159,7 @@ dependencies = [ [[package]] name = "esp32" version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b76170a463d18f888a1ad258031901036fd827a9ef126733053ba5f8739fb0c8" +source = "git+https://github.com/esp-rs/esp-pacs?rev=fc3e6d4#fc3e6d4b34cfc885f750641d27e6fe3e63bad5d2" dependencies = [ "critical-section", "vcell", @@ -1169,8 +1168,7 @@ dependencies = [ [[package]] name = "esp32c2" version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e62cf8932966b8d445b6f1832977b468178f0a84effb2e9fda89f60c24d45aa3" +source = "git+https://github.com/esp-rs/esp-pacs?rev=fc3e6d4#fc3e6d4b34cfc885f750641d27e6fe3e63bad5d2" dependencies = [ "critical-section", "vcell", @@ -1179,8 +1177,7 @@ dependencies = [ [[package]] name = "esp32c3" version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356af3771d0d6536c735bf71136594f4d1cbb506abf6e0c51a6639e9bf4e7988" +source = "git+https://github.com/esp-rs/esp-pacs?rev=fc3e6d4#fc3e6d4b34cfc885f750641d27e6fe3e63bad5d2" dependencies = [ "critical-section", "vcell", @@ -1189,8 +1186,7 @@ dependencies = [ [[package]] name = "esp32c6" version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5e511df672d79cd63365c92045135e01ba952b6bddd25b660baff5e1110f6b" +source = "git+https://github.com/esp-rs/esp-pacs?rev=fc3e6d4#fc3e6d4b34cfc885f750641d27e6fe3e63bad5d2" dependencies = [ "critical-section", "vcell", @@ -1199,8 +1195,7 @@ dependencies = [ [[package]] name = "esp32h2" version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4a50bbd1380931e095e0973b9b12f782a9c481f2edf1f7c42e7eb4ff736d6d" +source = "git+https://github.com/esp-rs/esp-pacs?rev=fc3e6d4#fc3e6d4b34cfc885f750641d27e6fe3e63bad5d2" dependencies = [ "critical-section", "vcell", @@ -1209,8 +1204,7 @@ dependencies = [ [[package]] name = "esp32s2" version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98574d4c577fbe888fe3e6df7fc80d25a05624d9998f7d7de1500ae21fcca78f" +source = "git+https://github.com/esp-rs/esp-pacs?rev=fc3e6d4#fc3e6d4b34cfc885f750641d27e6fe3e63bad5d2" dependencies = [ "critical-section", "vcell", @@ -1219,13 +1213,18 @@ dependencies = [ [[package]] name = "esp32s3" version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1810d8ee4845ef87542af981e38eb80ab531d0ef1061e1486014ab7af74c337a" +source = "git+https://github.com/esp-rs/esp-pacs?rev=fc3e6d4#fc3e6d4b34cfc885f750641d27e6fe3e63bad5d2" dependencies = [ "critical-section", "vcell", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "fixed" version = "1.29.0" @@ -1303,6 +1302,21 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +[[package]] +name = "generator" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows-link", + "windows-result", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1468,6 +1482,12 @@ dependencies = [ "rustversion", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" version = "0.2.184" @@ -1495,6 +1515,19 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lora-modulation" version = "0.1.5" @@ -1514,6 +1547,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + [[package]] name = "maybe-async-cfg" version = "0.2.4" @@ -1586,6 +1628,15 @@ dependencies = [ "cortex-m-rt", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1845,6 +1896,15 @@ dependencies = [ "unicase", ] +[[package]] +name = "pure-rust-locales" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "869675ad2d7541aea90c6d88c81f46a7f4ea9af8cd0395d38f11a95126998a0d" +dependencies = [ + "defmt 1.0.1", +] + [[package]] name = "quote" version = "1.0.45" @@ -1872,6 +1932,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +[[package]] +name = "rand_core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" + [[package]] name = "redox_syscall" version = "0.5.18" @@ -2024,6 +2090,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -2110,6 +2182,21 @@ dependencies = [ "keccak", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "siphasher" version = "1.0.2" @@ -2294,6 +2381,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + [[package]] name = "toml_datetime" version = "1.1.1+spec-1.1.0" @@ -2324,6 +2420,67 @@ dependencies = [ "winnow", ] +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + [[package]] name = "typenum" version = "1.19.0" @@ -2417,6 +2574,12 @@ dependencies = [ "usbd-hid-descriptors", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vcell" version = "0.1.3" @@ -2469,6 +2632,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -2490,8 +2662,7 @@ dependencies = [ [[package]] name = "xtensa-lx" version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e012d667b0aa6d2592ace8ef145a98bff3e76cca7a644f4181ecd7a916ed289b" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "critical-section", ] @@ -2499,8 +2670,7 @@ dependencies = [ [[package]] name = "xtensa-lx-rt" version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8709f037fb123fe7ff146d2bce86f9dc0dfc53045c016bfd9d703317b6502845" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "document-features", "xtensa-lx", @@ -2510,8 +2680,7 @@ dependencies = [ [[package]] name = "xtensa-lx-rt-proc-macros" version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fb42cd29c42f8744c74276e9f5bee7b06685bbe5b88df891516d72cb320450" +source = "git+https://github.com/esp-rs/esp-hal.git?branch=main#70930f20d9f681a30ff20aced39d0bd5363126d5" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 3a9c772..65b3a31 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,10 +13,8 @@ repository = "https://github.com/swaits/donglora" keywords = ["lora", "radio", "embedded", "usb", "firmware"] categories = ["embedded", "hardware-support", "no-std"] -# UPGRADE BLOCKED: embassy-executor 0.10 and ucobs 0.3 need Rust >= 1.93 -# stable. The ESP Xtensa toolchain (espup) is a nightly fork that may not -# support the required language features or pass MSRV gating. Revisit when -# espup catches up. Check: rustup run esp rustc --version +# NOTE: esp-rtos patched from GitHub main (see [patch.crates-io] below). +# Remove patches once esp-rtos publishes with embassy-executor 0.10 support. [dependencies] cfg-if = "1.0" critical-section = "1.2" @@ -24,7 +22,7 @@ defmt = "1.0" embedded-hal = "1.0" embedded-hal-async = "1.0" embassy-embedded-hal = "0.6" -embassy-executor = "0.9" +embassy-executor = "0.10" embassy-sync = "0.8" embassy-time = "0.5" embassy-usb = { version = "0.6", features = ["defmt"] } @@ -78,7 +76,7 @@ embassy-nrf = { version = "0.10", optional = true, features = [ panic-probe = { version = "1.0", optional = true, features = ["print-defmt"] } # RP2040 (Waveshare RP2040-LoRa) -embassy-rp = { version = "0.9", optional = true, features = [ +embassy-rp = { version = "0.10", optional = true, features = [ "rp2040", "time-driver", "defmt", @@ -114,7 +112,7 @@ rak_wisblock_4631 = [ "dep:defmt-rtt", "dep:embassy-nrf", "dep:panic-probe", - "embassy-executor/arch-cortex-m", + "embassy-executor/platform-cortex-m", "embassy-executor/executor-thread", ] wio_tracker_l1 = [ @@ -124,7 +122,7 @@ wio_tracker_l1 = [ "dep:defmt-rtt", "dep:embassy-nrf", "dep:panic-probe", - "embassy-executor/arch-cortex-m", + "embassy-executor/platform-cortex-m", "embassy-executor/executor-thread", ] waveshare_rp2040_lora = [ @@ -134,10 +132,20 @@ waveshare_rp2040_lora = [ "dep:embassy-rp", "dep:panic-probe", "dep:portable-atomic", - "embassy-executor/arch-cortex-m", + "embassy-executor/platform-cortex-m", "embassy-executor/executor-thread", ] +# REVISIT: esp-rtos 0.2.0 on crates.io pins embassy-executor ^0.9. The +# esp-rs/esp-hal main branch already supports 0.10. Remove these patches once +# esp-rtos publishes a release with embassy-executor 0.10 support. Track: +# https://github.com/esp-rs/esp-hal/tree/main/esp-rtos +[patch.crates-io] +esp-hal = { git = "https://github.com/esp-rs/esp-hal.git", branch = "main" } +esp-rtos = { git = "https://github.com/esp-rs/esp-hal.git", branch = "main" } +esp-backtrace = { git = "https://github.com/esp-rs/esp-hal.git", branch = "main" } +esp-println = { git = "https://github.com/esp-rs/esp-hal.git", branch = "main" } + [lints.clippy] undocumented_unsafe_blocks = "deny" diff --git a/justfile b/justfile index 539c229..c12dea9 100644 --- a/justfile +++ b/justfile @@ -57,12 +57,8 @@ check-all: fi; \ done -# Check a single board compiles +# Check a single board compiles (clippy with warnings as errors) check board: - @just _cargo {{board}} "check --release" - -# Run clippy on a single board -clippy board: @just _cargo {{board}} "clippy --release" "-- -D warnings" # Build release firmware and copy to builds/ with a readable name @@ -105,10 +101,7 @@ test: # Check for outdated dependencies outdated: - @# embassy-executor 0.10 renamed arch-* → platform-* features. - @# esp-rtos 0.2 still pins embassy-executor ^0.9, blocking the upgrade. - @# cargo-outdated crashes trying to resolve 0.10 with the old feature name. - cargo outdated --exclude embassy-executor + cargo outdated # ── Private helpers ─────────────────────────────────────────────────── diff --git a/mise.toml b/mise.toml index 2e61d34..642e1ec 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -rust = "1.93" +rust = "1.94" just = "latest" "cargo:cargo-binutils" = "latest" # `cargo size`, `cargo objdump`, etc. diff --git a/src/board/heltec_v3.rs b/src/board/heltec_v3.rs index cec9e69..25f0ee2 100644 --- a/src/board/heltec_v3.rs +++ b/src/board/heltec_v3.rs @@ -51,7 +51,7 @@ impl LoRaBoard for Board { fn into_parts(self) -> BoardParts { let p = self.p; - mcu::start_timer(p.TIMG0); + mcu::start_timer(p.TIMG0, p.SW_INTERRUPT); // Vext power: GPIO36, active LOW to enable peripherals let vext = Output::new(p.GPIO36, Level::Low, OutputConfig::default()); diff --git a/src/board/heltec_v3_uart.rs b/src/board/heltec_v3_uart.rs index 80c1b49..5060416 100644 --- a/src/board/heltec_v3_uart.rs +++ b/src/board/heltec_v3_uart.rs @@ -50,7 +50,7 @@ impl LoRaBoard for Board { fn into_parts(self) -> BoardParts { let p = self.p; - mcu::start_timer(p.TIMG0); + mcu::start_timer(p.TIMG0, p.SW_INTERRUPT); // Vext power: GPIO36, active LOW to enable peripherals let vext = Output::new(p.GPIO36, Level::Low, OutputConfig::default()); diff --git a/src/board/heltec_v4.rs b/src/board/heltec_v4.rs index 3aa77c5..b9bcb6e 100644 --- a/src/board/heltec_v4.rs +++ b/src/board/heltec_v4.rs @@ -44,7 +44,7 @@ impl LoRaBoard for Board { fn into_parts(self) -> BoardParts { let p = self.p; - mcu::start_timer(p.TIMG0); + mcu::start_timer(p.TIMG0, p.SW_INTERRUPT); // Vext power: GPIO36, active LOW to enable peripherals let vext = Output::new(p.GPIO36, Level::Low, OutputConfig::default()); diff --git a/src/board/waveshare_rp2040_lora.rs b/src/board/waveshare_rp2040_lora.rs index b6cc454..7632d5a 100644 --- a/src/board/waveshare_rp2040_lora.rs +++ b/src/board/waveshare_rp2040_lora.rs @@ -92,7 +92,7 @@ impl LoRaBoard for Board { let mut spi_cfg = spi::Config::default(); spi_cfg.frequency = 1_000_000; let spi = spi::Spi::new( - p.SPI1, p.PIN_14, p.PIN_15, p.PIN_24, p.DMA_CH0, p.DMA_CH1, spi_cfg, + p.SPI1, p.PIN_14, p.PIN_15, p.PIN_24, p.DMA_CH0, p.DMA_CH1, mcu::Irqs, spi_cfg, ); let spi_bus = mcu::share_spi_bus(spi); diff --git a/src/channel.rs b/src/channel.rs index e431aaa..fee419f 100644 --- a/src/channel.rs +++ b/src/channel.rs @@ -17,6 +17,7 @@ use crate::protocol::{Command, RadioConfig, Response}; pub enum DisplayCommand { On, Off, + #[allow(dead_code)] // only used by USB host task, not UART Reset, } diff --git a/src/hal/esp32s3.rs b/src/hal/esp32s3.rs index db5f9b5..36ba83f 100644 --- a/src/hal/esp32s3.rs +++ b/src/hal/esp32s3.rs @@ -21,9 +21,13 @@ pub type I2cBus = I2c<'static, esp_hal::Async>; // ── Timer ─────────────────────────────────────────────────────────── /// Start the ESP-RTOS scheduler and Embassy time driver. -pub fn start_timer(timg0: esp_hal::peripherals::TIMG0<'static>) { +pub fn start_timer( + timg0: esp_hal::peripherals::TIMG0<'static>, + sw_int: esp_hal::peripherals::SW_INTERRUPT<'static>, +) { let timg0 = TimerGroup::new(timg0); - esp_rtos::start(timg0.timer0); + let sw_ints = esp_hal::interrupt::software::SoftwareInterruptControl::new(sw_int); + esp_rtos::start(timg0.timer0, sw_ints.software_interrupt0); } // ── SPI bus ───────────────────────────────────────────────────────── @@ -78,5 +82,8 @@ pub fn init_i2c( /// Read the factory-programmed MAC address from eFuse. pub fn mac_address() -> [u8; 6] { - esp_hal::efuse::Efuse::mac_address() + esp_hal::efuse::base_mac_address() + .as_bytes() + .try_into() + .expect("MAC is 6 bytes") } diff --git a/src/hal/rp2040.rs b/src/hal/rp2040.rs index 18593a9..689e5ca 100644 --- a/src/hal/rp2040.rs +++ b/src/hal/rp2040.rs @@ -11,6 +11,8 @@ use static_cell::StaticCell; bind_interrupts!(pub struct Irqs { USBCTRL_IRQ => embassy_rp::usb::InterruptHandler; + DMA_IRQ_0 => embassy_rp::dma::InterruptHandler, + embassy_rp::dma::InterruptHandler; }); // ── MCU-level types ──────────────────────────────────────────────── diff --git a/src/host/uart.rs b/src/host/uart.rs index a5a8fa1..1fecced 100644 --- a/src/host/uart.rs +++ b/src/host/uart.rs @@ -20,9 +20,9 @@ pub async fn host_task( ) { let (mut rx, mut tx) = parts.driver.split(); - // UART has no DTR — signal the display that a host is present at boot. + // UART has no DTR — assume a host is always present. if has_display { - display_commands.send(DisplayCommand::Reset).await; + display_commands.send(DisplayCommand::On).await; } let mut read_buf = [0u8; 64]; diff --git a/src/main.rs b/src/main.rs index 03ceb11..f41e83d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -79,24 +79,28 @@ async fn run(spawner: Spawner) { let board = ::init(); let parts = board.into_parts(); - spawner - .spawn(radio::radio_task(parts.radio, &COMMANDS, &RESPONSES, &STATUS)) - .expect("spawn radio_task"); + spawner.spawn( + radio::radio_task(parts.radio, &COMMANDS, &RESPONSES, &STATUS) + .expect("spawn radio_task"), + ); - spawner - .spawn(host::host_task( + spawner.spawn( + host::host_task( parts.host, &COMMANDS, &RESPONSES, &DISPLAY_COMMANDS, parts.display.is_some(), parts.mac, - )) - .expect("spawn host_task"); + ) + .expect("spawn host_task"), + ); if let Some(dp) = parts.display { - spawner - .spawn(display::display_task(dp, parts.led, &STATUS, &DISPLAY_COMMANDS)) - .expect("spawn display_task"); + #[allow(clippy::unit_arg)] // LedDriver is () for boards without LEDs + spawner.spawn( + display::display_task(dp, parts.led, &STATUS, &DISPLAY_COMMANDS) + .expect("spawn display_task"), + ); } }