diff --git a/Cargo.lock b/Cargo.lock index ccb6c6498ea..6666ee3ca4e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -637,14 +637,14 @@ dependencies = [ [[package]] name = "auto_enums" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e4487600931c9a89f8db7ffbdf3fbdd45bb7bd85e26861f659a463cd0dff966" +checksum = "3091d68264354f211516b91dce6f71046e444fab1867716035f736667243affb" dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -712,15 +712,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - [[package]] name = "beef" version = "0.5.2" @@ -1029,9 +1020,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.2.4" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2d30e4173c4026932d51d31d6b0613b1fd3014bf3f9f8943d4ba139c437ba0" +checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" dependencies = [ "serde_core", ] @@ -1086,9 +1077,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" dependencies = [ "find-msvc-tools", "jobserver", @@ -1652,9 +1643,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e30e509674ef0ec91e21a7735766db37d163d46151b6a361d8b83dd79116bd" +checksum = "e9bb72bb94fdc1bd619f4c18cc91ecf6302aeb333d31b3c6ec0bb841cd920209" [[package]] name = "cursor-icon" @@ -1795,13 +1786,13 @@ dependencies = [ [[package]] name = "derive_utils" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" +checksum = "dc05a5d33db20c784f873e84934ad94bb209a090987ac5f62fede2c178234f23" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1976,9 +1967,15 @@ checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" [[package]] name = "either" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" + +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" [[package]] name = "embedded-io" @@ -2072,58 +2069,44 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "esp-backtrace" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f270a29a3c4e492399b13e157b10151a7616cba69c4d554076ea93ed1bd2916" +checksum = "37950e24b2dfd98f1581102d1798281d4d9547af881e6bffc2c2b534c026ec8f" dependencies = [ "cfg-if", + "document-features", "esp-config", + "esp-metadata-generated", "esp-println", - "heapless 0.8.0", + "heapless 0.9.3", + "riscv", + "xtensa-lx", ] [[package]] name = "esp-config" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd4a8db4b72794637a25944bc8d361c3cc271d4f03987ce8741312b6b61529c" +checksum = "4d9b92fd9cfb0b4f8f1b6219b9763269a335571e307b014903b8201619374b80" dependencies = [ "document-features", "esp-metadata-generated", - "evalexpr", "serde", "serde_yaml", -] - -[[package]] -name = "esp-metadata" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6fbc1d166be84c0750f121e95c8989ddebd7e7bdd86af3594a6cfb34f039650" -dependencies = [ - "anyhow", - "basic-toml", - "indexmap", - "proc-macro2", - "quote", - "serde", - "strum 0.27.2", + "somni-expr", ] [[package]] name = "esp-metadata-generated" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189d36b8c8a752bdebec67fd02a15ebb1432feea345553749bca7ce2393cc795" -dependencies = [ - "esp-metadata", -] +checksum = "42c2ee95b945a4780796e4359e72c033aed3b45073880e8029458f538532db8a" [[package]] name = "esp-println" -version = "0.15.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e7e3ab41e96093d7fd307e93bfc88bd646a8ff23036ebf809e116b18869f719" +checksum = "42dee1e9ac7c3539bf6464db1707b0edd7557168f98278cf3c84fe70e63c6ce6" dependencies = [ "document-features", "esp-metadata-generated", @@ -2140,19 +2123,12 @@ dependencies = [ "num-traits", ] -[[package]] -name = "evalexpr" -version = "12.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae893d2d5e908b78f151ed89de3bfc272cdf6d368c7ed866942f98e24dea208a" - [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -3065,9 +3041,9 @@ dependencies = [ [[package]] name = "heapless" -version = "0.8.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" dependencies = [ "hash32 0.3.1", "stable_deref_trait", @@ -3387,7 +3363,7 @@ dependencies = [ "scopeguard", "slint", "softbuffer", - "strum 0.28.0", + "strum", "vtable", "wasm-bindgen", "web-sys", @@ -3448,7 +3424,7 @@ dependencies = [ "skrifa 0.43.2", "smol_str 0.3.2", "spin_on", - "strum 0.28.0", + "strum", "swash", "typed-index-collections", "unicode-segmentation", @@ -3504,7 +3480,7 @@ dependencies = [ "slab", "slint", "static_assertions", - "strum 0.28.0", + "strum", "swash", "sys-locale", "taffy", @@ -4662,9 +4638,9 @@ dependencies = [ [[package]] name = "mdns-sd" -version = "0.20.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f18d8ec9d1869796fb2910d95f4d957072df0b6a22e247a1d760d8b4c805e17a" +checksum = "86dbb9f00c8c367f75ed3a775d3eb31d0375a72f58275ef64a1bc53c255a2ce2" dependencies = [ "fastrand", "flume", @@ -4921,12 +4897,12 @@ dependencies = [ [[package]] name = "napi" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de33522036981030a75c231829566bc63414e08101a6f5ff4ac6cef19c8e0941" +checksum = "6f71d6bc097c4a6eb853c3f24991ab8c9f50f57d1f719e305175541482217e36" dependencies = [ "bitflags 2.13.1", - "ctor 1.0.10", + "ctor 1.0.11", "futures", "napi-build", "napi-sys", @@ -4936,18 +4912,18 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "5282704fbe8d49b0cf8b08e3f33233416a528658f205c7e5ace63b582de0b11c" [[package]] name = "napi-derive" -version = "3.6.0" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a49c513341a61a16a10af6efcce46b30d0822ba2d4fb197d24d33dfc199c78d5" +checksum = "4d5c9c02556ea6dc99dffd36c1ce60141411657438501a125b675776d011ce92" dependencies = [ "convert_case 0.11.0", - "ctor 1.0.10", + "ctor 1.0.11", "napi-derive-backend", "proc-macro2", "quote", @@ -4956,9 +4932,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "6.0.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4747005fa3e2c9989ac45a723a514c5db2411238b72981a3cda4c701a9dfea17" +checksum = "6a9d8365cf97f54d9b6d6dbf83a25ca227ad7d6e920717426c599225aca6740b" dependencies = [ "convert_case 0.11.0", "proc-macro2", @@ -6688,6 +6664,36 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "riscv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05cfa3f7b30c84536a9025150d44d26b8e1cc20ddf436448d74cd9591eefb25" +dependencies = [ + "critical-section", + "embedded-hal", + "paste", + "riscv-macros", + "riscv-pac", +] + +[[package]] +name = "riscv-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d323d13972c1b104aa036bc692cd08b822c8bbf23d79a27c526095856499799" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "riscv-pac" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8188909339ccc0c68cfb5a04648313f09621e8b87dc03095454f1a11f6c5d436" + [[package]] name = "rkyv" version = "0.8.17" @@ -7687,9 +7693,9 @@ dependencies = [ [[package]] name = "socket-pktinfo" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e8e43b4bdce7cff8a4d3f8025ee38fce5ca138fab868ebbf9529c81328fbf9d" +checksum = "612942246d0cc239cfd83af1dfd39be47f649208a3524e5e9da651910128e0ac" dependencies = [ "libc", "socket2", @@ -7738,6 +7744,21 @@ dependencies = [ "x11rb", ] +[[package]] +name = "somni-expr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed9b7648d5e8b2df6c5e49940c54bcdd2b4dd71eafc6e8f1c714eb4581b0f53" +dependencies = [ + "somni-parser", +] + +[[package]] +name = "somni-parser" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0f368519fc6c85fc1afdb769fb5a51123f6158013e143656e25a3485a0d401c" + [[package]] name = "spdx" version = "0.10.9" @@ -7816,34 +7837,13 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros 0.27.2", -] - [[package]] name = "strum" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ - "strum_macros 0.28.0", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.119", + "strum_macros", ] [[package]] @@ -8395,9 +8395,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow 1.0.4", ] @@ -10331,6 +10331,15 @@ dependencies = [ "xshell", ] +[[package]] +name = "xtensa-lx" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e012d667b0aa6d2592ace8ef145a98bff3e76cca7a644f4181ecd7a916ed289b" +dependencies = [ + "critical-section", +] + [[package]] name = "y4m" version = "0.8.0" diff --git a/api/cpp/Cargo.toml b/api/cpp/Cargo.toml index 53bf1c42ff5..81e478c4e8d 100644 --- a/api/cpp/Cargo.toml +++ b/api/cpp/Cargo.toml @@ -77,8 +77,8 @@ slint-interpreter = { workspace = true, features = ["ffi", "compat-1-2"], option i-slint-live-preview = { workspace = true, optional = true, features = ["ffi"] } raw-window-handle = { version = "0.6", optional = true } -esp-backtrace = { version = "0.17.0", features = ["panic-handler", "println"], optional = true } -esp-println = { version = "0.15.0", default-features = false, features = ["auto", "log-04"], optional = true } +esp-backtrace = { version = "0.19.0", features = ["panic-handler", "println"], optional = true } +esp-println = { version = "0.17.0", default-features = false, features = ["auto", "log-04"], optional = true } unicode-segmentation = { workspace = true } [target.'cfg(target_os = "android")'.dependencies] diff --git a/examples/Cargo.lock b/examples/Cargo.lock index efec41dab16..5e7973ef278 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -309,12 +309,6 @@ dependencies = [ "serde", ] -[[package]] -name = "allocator-api2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c583acf993cf4245c4acb0a2cc2ab1f9cc097de73411bb6d3647ff6af2b1013d" - [[package]] name = "alsa" version = "0.9.1" @@ -366,7 +360,7 @@ dependencies = [ "ndk 0.8.0", "ndk-context", "ndk-sys 0.5.0+25.2.9519653", - "num_enum 0.7.6", + "num_enum", "thiserror 1.0.69", ] @@ -385,7 +379,7 @@ dependencies = [ "ndk 0.9.0", "ndk-context", "ndk-sys 0.6.0+11769913", - "num_enum 0.7.6", + "num_enum", "thiserror 2.0.19", ] @@ -438,7 +432,7 @@ checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" dependencies = [ "anstyle", "memchr", - "unicode-width 0.2.2", + "unicode-width", ] [[package]] @@ -593,15 +587,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "ascii-canvas" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891" -dependencies = [ - "term", -] - [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -834,15 +819,6 @@ dependencies = [ "webpki-roots", ] -[[package]] -name = "atomic-polyfill" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" -dependencies = [ - "critical-section", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -934,7 +910,7 @@ dependencies = [ "arg_enum_proc_macro", "arrayvec", "log", - "num-rational 0.4.2", + "num-rational", "num-traits", "pastey 0.1.1", "rayon", @@ -953,7 +929,7 @@ dependencies = [ "arrayvec", "log", "nom 8.0.0", - "num-rational 0.4.2", + "num-rational", "v_frame", ] @@ -989,12 +965,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "az" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" - [[package]] name = "backtrace" version = "0.3.76" @@ -1005,38 +975,17 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object 0.37.3", + "object", "rustc-demangle", "windows-link 0.2.1", ] -[[package]] -name = "bare-metal" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" -dependencies = [ - "rustc_version 0.2.3", -] - -[[package]] -name = "bare-metal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603" - [[package]] name = "base16ct" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.22.1" @@ -1049,15 +998,6 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" -[[package]] -name = "basic-toml" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" -dependencies = [ - "serde", -] - [[package]] name = "bevy" version = "0.19.0" @@ -1146,7 +1086,7 @@ dependencies = [ "derive_more", "downcast-rs 2.0.2", "either", - "petgraph 0.8.3", + "petgraph", "ron", "serde", "smallvec", @@ -1610,7 +1550,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84e21ad83b7dc8d456491ea3d50057685d8c4cca8bc52a1b4a7161c86c369842" dependencies = [ "async-lock", - "base64 0.22.1", + "base64", "bevy_animation", "bevy_app", "bevy_asset", @@ -2044,7 +1984,7 @@ dependencies = [ "glam", "indexmap", "inventory", - "petgraph 0.8.3", + "petgraph", "serde", "smallvec", "smol_str 0.2.2", @@ -2288,7 +2228,7 @@ dependencies = [ "crossbeam-queue", "derive_more", "futures-lite", - "heapless 0.9.3", + "heapless", "web-task", ] @@ -2574,22 +2514,13 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec 0.8.0", -] - [[package]] name = "bit-set" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" dependencies = [ - "bit-vec 0.9.1", + "bit-vec", ] [[package]] @@ -2598,15 +2529,9 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" dependencies = [ - "bit-vec 0.9.1", + "bit-vec", ] -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bit-vec" version = "0.9.1" @@ -2619,38 +2544,6 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" -[[package]] -name = "bitfield" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" - -[[package]] -name = "bitfield" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac" - -[[package]] -name = "bitfield" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ba6517c6b0f2bf08be60e187ab64b038438f22dd755614d8fe4d4098c46419" -dependencies = [ - "bitfield-macros", -] - -[[package]] -name = "bitfield-macros" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f48d6ace212fdf1b45fd6b566bb40808415344642b76c3224c07c8df9da81e97" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -2724,15 +2617,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "block-device-driver" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c051592f59fe68053524b4c4935249b806f72c1f544cfb7abe4f57c3be258e" -dependencies = [ - "aligned", -] - [[package]] name = "block-padding" version = "0.4.2" @@ -2941,12 +2825,6 @@ dependencies = [ "slint-build", ] -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - [[package]] name = "cbc" version = "0.2.1" @@ -3130,16 +3008,6 @@ dependencies = [ "thiserror 2.0.19", ] -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width 0.1.14", -] - [[package]] name = "codespan-reporting" version = "0.12.0" @@ -3148,7 +3016,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ "serde", "termcolor", - "unicode-width 0.2.2", + "unicode-width", ] [[package]] @@ -3159,7 +3027,7 @@ checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" dependencies = [ "serde", "termcolor", - "unicode-width 0.2.2", + "unicode-width", ] [[package]] @@ -3233,12 +3101,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "const-default" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" - [[package]] name = "const-field-offset" version = "0.2.1" @@ -3304,7 +3166,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6813ceff986382cd86f67722f308177253e8fab1954a2d51c5e386ffdb3e2d03" dependencies = [ - "base64 0.22.1", + "base64", "bitflags 2.13.1", "once_cell", "percent-encoding", @@ -3448,39 +3310,6 @@ dependencies = [ "bindgen", ] -[[package]] -name = "cortex-m" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" -dependencies = [ - "bare-metal 0.2.5", - "bitfield 0.13.2", - "critical-section", - "embedded-hal 0.2.7", - "volatile-register", -] - -[[package]] -name = "cortex-m-rt" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "801d4dec46b34c299ccf6b036717ae0fce602faa4f4fe816d9013b9a7c9f5ba6" -dependencies = [ - "cortex-m-rt-macros", -] - -[[package]] -name = "cortex-m-rt-macros" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "countme" version = "3.0.1" @@ -3564,15 +3393,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc-any" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46db9f663dfb869b80fcf59e32d7a80fc6c464a4f6328f3f06a00f5e36d05f8c" -dependencies = [ - "debug-helper", -] - [[package]] name = "crc32fast" version = "1.5.0" @@ -3692,7 +3512,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6250a2d96a09edbe8e75ed29c87d05512ee2cbb24c7e8c684657f7930ffd3c6" dependencies = [ "digest 0.11.3", - "keccak 0.2.0", + "keccak", "sponge-cursor", ] @@ -3776,7 +3596,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.11.3", "fiat-crypto", - "rustc_version 0.4.1", + "rustc_version", "subtle", "zeroize", ] @@ -3798,28 +3618,8 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", -] - -[[package]] -name = "darling" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" -dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", + "darling_core", + "darling_macro", ] [[package]] @@ -3832,33 +3632,6 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", - "syn 2.0.119", -] - -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "darling_core" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" -dependencies = [ - "ident_case", - "proc-macro2", - "quote", - "strsim", "syn 2.0.119", ] @@ -3868,29 +3641,7 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core 0.21.3", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "darling_macro" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" -dependencies = [ - "darling_core 0.23.0", + "darling_core", "quote", "syn 2.0.119", ] @@ -3922,21 +3673,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "debug-helper" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80a4af69c60438a1a82af89d362f4729fd38db7b73f305a237636fad31ceb2bf" - -[[package]] -name = "defmt" -version = "0.3.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" -dependencies = [ - "defmt 1.1.1", -] - [[package]] name = "defmt" version = "1.1.1" @@ -3968,38 +3704,6 @@ dependencies = [ "thiserror 2.0.19", ] -[[package]] -name = "defmt-rtt" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6eca0aae8aa2cf8333200ecbd236274697bc0a394765c858b3d9372eb1abcfa" -dependencies = [ - "critical-section", - "defmt 0.3.100", -] - -[[package]] -name = "defmt-serial" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff74c9db22f47c2e2b0ed68ff5ba253ec2b40151e2f7170532daad5d806f76" -dependencies = [ - "critical-section", - "defmt 0.3.100", - "embedded-io 0.7.1", -] - -[[package]] -name = "delegate" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "der" version = "0.8.1" @@ -4038,7 +3742,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.1", + "rustc_version", "syn 2.0.119", "unicode-xid", ] @@ -4188,7 +3892,7 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ - "litrs 1.0.0", + "litrs", ] [[package]] @@ -4346,16 +4050,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "eeprom24x" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7a31bca283ff29097bb5e7c0dbdb39fbe165dda33b825e19f8ac04f15a8eef" -dependencies = [ - "embedded-hal 1.0.0", - "embedded-storage", -] - [[package]] name = "either" version = "1.16.0" @@ -4385,498 +4079,60 @@ dependencies = [ ] [[package]] -name = "embassy-embedded-hal" -version = "0.3.2" +name = "embedded-io" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c62a3bf127e03832fb97d8b01a058775e617653bc89e2a12c256485a7fb54c1" -dependencies = [ - "defmt 0.3.100", - "embassy-embedded-hal 0.4.0", - "embassy-futures", - "embassy-sync 0.6.2", - "embassy-time", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-storage", - "embedded-storage-async", - "nb 1.1.0", -] +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" [[package]] -name = "embassy-embedded-hal" -version = "0.4.0" +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "encase" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1611b7a7ab5d1fbed84c338df26d56fd9bded58006ebb029075112ed2c5e039" +checksum = "6e3e0ff2ee0b7aa97428308dd9e1e42369cb22f5fb8dc1c55546637443a60f1e" 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", + "const_panic", + "encase_derive", + "thiserror 2.0.19", ] [[package]] -name = "embassy-executor" -version = "0.7.0" +name = "encase_derive" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90327bcc66333a507f89ecc4e2d911b265c45f5c9bc241f98eee076752d35ac6" +checksum = "a4d90c5d7d527c6cb8a3b114efd26a6304d9ab772656e73d8f4e32b1f3d601a2" dependencies = [ - "cortex-m", - "critical-section", - "document-features", - "embassy-executor-macros", + "encase_derive_impl", ] [[package]] -name = "embassy-executor-macros" -version = "0.6.2" +name = "encase_derive_impl" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3577b1e9446f61381179a330fc5324b01d511624c55f25e3c66c9e3c626dbecf" +checksum = "c8bad72d8308f7a382de2391ec978ddd736e0103846b965d7e2a63a75768af30" dependencies = [ - "darling 0.20.11", "proc-macro2", "quote", "syn 2.0.119", ] [[package]] -name = "embassy-futures" -version = "0.1.2" +name = "encoding_c" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" +checksum = "9af727805f3b0d79956bde5b35732669fb5c5d45a94893798e7b7e70cfbf9cc1" +dependencies = [ + "encoding_rs", +] [[package]] -name = "embassy-hal-internal" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef3bac31ec146321248a169e9c7b5799f1e0b3829c7a9b324cb4600a7438f59" -dependencies = [ - "cortex-m", - "critical-section", - "defmt 0.3.100", - "num-traits", -] - -[[package]] -name = "embassy-hal-internal" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" -dependencies = [ - "num-traits", -] - -[[package]] -name = "embassy-net-driver" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" -dependencies = [ - "defmt 0.3.100", -] - -[[package]] -name = "embassy-rp" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1a063d8baccdc5c7752840f4c7931f17bcd7de1ffe1efa2109e68113fe42612" -dependencies = [ - "atomic-polyfill", - "cfg-if", - "cortex-m", - "cortex-m-rt", - "critical-section", - "defmt 0.3.100", - "document-features", - "embassy-embedded-hal 0.3.2", - "embassy-futures", - "embassy-hal-internal 0.2.0", - "embassy-sync 0.6.2", - "embassy-time", - "embassy-time-driver", - "embassy-time-queue-utils", - "embassy-usb-driver", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-hal-nb", - "embedded-io 0.6.1", - "embedded-io-async", - "embedded-storage", - "embedded-storage-async", - "fixed", - "nb 1.1.0", - "pio 0.3.0", - "rand_core 0.6.4", - "rp-binary-info", - "rp-pac", - "rp2040-boot2", - "sha2-const-stable", - "smart-leds", -] - -[[package]] -name = "embassy-stm32" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e0bb733acdddbc7097765a47ce80bde2385647cf1d8427331931e06cff9a87" -dependencies = [ - "aligned", - "bit_field", - "bitflags 2.13.1", - "block-device-driver", - "cfg-if", - "chrono", - "cortex-m", - "cortex-m-rt", - "critical-section", - "defmt 0.3.100", - "document-features", - "embassy-embedded-hal 0.3.2", - "embassy-futures", - "embassy-hal-internal 0.2.0", - "embassy-net-driver", - "embassy-sync 0.6.2", - "embassy-time", - "embassy-time-driver", - "embassy-time-queue-utils", - "embassy-usb-driver", - "embassy-usb-synopsys-otg", - "embedded-can", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-hal-nb", - "embedded-io 0.6.1", - "embedded-io-async", - "embedded-storage", - "embedded-storage-async", - "futures-util", - "nb 1.1.0", - "proc-macro2", - "quote", - "rand_core 0.6.4", - "sdio-host", - "static_assertions", - "stm32-fmc", - "stm32-metapac", - "vcell", - "volatile-register", -] - -[[package]] -name = "embassy-sync" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049" -dependencies = [ - "cfg-if", - "critical-section", - "defmt 0.3.100", - "embedded-io-async", - "futures-sink", - "futures-util", - "heapless 0.8.0", -] - -[[package]] -name = "embassy-sync" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" -dependencies = [ - "cfg-if", - "critical-section", - "embedded-io-async", - "futures-core", - "futures-sink", - "heapless 0.8.0", -] - -[[package]] -name = "embassy-time" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" -dependencies = [ - "cfg-if", - "critical-section", - "defmt 0.3.100", - "document-features", - "embassy-time-driver", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "futures-util", -] - -[[package]] -name = "embassy-time-driver" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9" -dependencies = [ - "document-features", -] - -[[package]] -name = "embassy-time-queue-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc55c748d16908a65b166d09ce976575fb8852cf60ccd06174092b41064d8f83" -dependencies = [ - "embassy-executor", - "heapless 0.8.0", -] - -[[package]] -name = "embassy-usb-driver" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340c5ce591ef58c6449e43f51d2c53efe1bf0bb6a40cbf80afa0d259c7d52c76" -dependencies = [ - "defmt 1.1.1", - "embedded-io-async", -] - -[[package]] -name = "embassy-usb-synopsys-otg" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e753b23799329780c7ac434264026d0422044d6649ed70a73441b14a6436d7" -dependencies = [ - "critical-section", - "defmt 0.3.100", - "embassy-sync 0.6.2", - "embassy-usb-driver", -] - -[[package]] -name = "embedded-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f2de9133f68db0d4627ad69db767726c99ff8585272716708227008d3f1bddd" -dependencies = [ - "const-default", - "critical-section", - "linked_list_allocator", - "rlsf", -] - -[[package]] -name = "embedded-can" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d2e857f87ac832df68fa498d18ddc679175cf3d2e4aa893988e5601baf9438" -dependencies = [ - "nb 1.1.0", -] - -[[package]] -name = "embedded-display-controller" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abdb518d44a2eda3b8a5dfc27b60a4bbbf2bb87eee436796d54c290ee6cc6545" - -[[package]] -name = "embedded-dma" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" -dependencies = [ - "stable_deref_trait", -] - -[[package]] -name = "embedded-graphics" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e8da660bb0c829b34a56a965490597f82a55e767b91f9543be80ce8ccb416fe" -dependencies = [ - "az", - "byteorder", - "embedded-graphics-core", - "float-cmp", - "micromath", -] - -[[package]] -name = "embedded-graphics-core" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95743bef3ff70fcba3930246c4e6872882bbea0dcc6da2ca860112e0cd4bd09f" -dependencies = [ - "az", - "byteorder", -] - -[[package]] -name = "embedded-graphics-framebuf" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22354420f68727fa24d1e2741dae1e9a041065e80fb63b35a8d19c647a85be76" -dependencies = [ - "embedded-dma", - "embedded-graphics", -] - -[[package]] -name = "embedded-hal" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" -dependencies = [ - "nb 0.1.3", - "void", -] - -[[package]] -name = "embedded-hal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" - -[[package]] -name = "embedded-hal-async" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" -dependencies = [ - "embedded-hal 1.0.0", -] - -[[package]] -name = "embedded-hal-bus" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513e0b3a8fb7d3013a8ae17a834283f170deaf7d0eeab0a7c1a36ad4dd356d22" -dependencies = [ - "critical-section", - "embedded-hal 1.0.0", -] - -[[package]] -name = "embedded-hal-nb" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605" -dependencies = [ - "embedded-hal 1.0.0", - "nb 1.1.0", -] - -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - -[[package]] -name = "embedded-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" -dependencies = [ - "defmt 0.3.100", -] - -[[package]] -name = "embedded-io" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7" - -[[package]] -name = "embedded-io-async" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f" -dependencies = [ - "defmt 0.3.100", - "embedded-io 0.6.1", -] - -[[package]] -name = "embedded-storage" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032" - -[[package]] -name = "embedded-storage-async" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1763775e2323b7d5f0aa6090657f5e21cfa02ede71f5dc40eead06d64dcd15cc" -dependencies = [ - "embedded-storage", -] - -[[package]] -name = "embedded-time" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4b4d10ac48d08bfe3db7688c402baadb244721f30a77ce360bd24c3dffe58" -dependencies = [ - "num", -] - -[[package]] -name = "ena" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" -dependencies = [ - "log", -] - -[[package]] -name = "encase" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3e0ff2ee0b7aa97428308dd9e1e42369cb22f5fb8dc1c55546637443a60f1e" -dependencies = [ - "const_panic", - "encase_derive", - "thiserror 2.0.19", -] - -[[package]] -name = "encase_derive" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d90c5d7d527c6cb8a3b114efd26a6304d9ab772656e73d8f4e32b1f3d601a2" -dependencies = [ - "encase_derive_impl", -] - -[[package]] -name = "encase_derive_impl" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8bad72d8308f7a382de2391ec978ddd736e0103846b965d7e2a63a75768af30" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "encoding_c" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9af727805f3b0d79956bde5b35732669fb5c5d45a94893798e7b7e70cfbf9cc1" -dependencies = [ - "encoding_rs", -] - -[[package]] -name = "encoding_c_mem" -version = "0.2.6" +name = "encoding_c_mem" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a80a16821fe8c7cab96e0c67b57cd7090e021e9615e6ce6ab0cf866c44ed1f0" dependencies = [ @@ -4931,27 +4187,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "enumset" -version = "1.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc5801fd11762e24d1e420d01d2ac518f2a2ca4329d4fbb6639f2412b6204e0" -dependencies = [ - "enumset_derive", -] - -[[package]] -name = "enumset_derive" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd536557b58c682b217b8fb199afdff47cd3eff260623f19e77074eb073d63a" -dependencies = [ - "darling 0.21.3", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "env_filter" version = "0.1.4" @@ -4964,382 +4199,79 @@ dependencies = [ [[package]] name = "env_filter" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" -dependencies = [ - "anstream", - "anstyle", - "env_filter 2.0.0", - "jiff", - "log", -] - -[[package]] -name = "equator" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" -dependencies = [ - "equator-macro", -] - -[[package]] -name = "equator-macro" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "erased-serde" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" -dependencies = [ - "serde", - "serde_core", - "typeid", -] - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "error-code" -version = "3.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" - -[[package]] -name = "esp-alloc" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e95f1de57ce5a6600368f3d3c931b0dfe00501661e96f5ab83bc5cdee031784" -dependencies = [ - "allocator-api2 0.3.1", - "cfg-if", - "critical-section", - "document-features", - "enumset", - "linked_list_allocator", -] - -[[package]] -name = "esp-backtrace" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f270a29a3c4e492399b13e157b10151a7616cba69c4d554076ea93ed1bd2916" -dependencies = [ - "cfg-if", - "esp-config", - "esp-println", - "heapless 0.8.0", - "semihosting", -] - -[[package]] -name = "esp-bootloader-esp-idf" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a093dbdc64b0288baacc214c2e8c2f3f13ecbf979c36ee2f63797ecf22538f1" -dependencies = [ - "cfg-if", - "document-features", - "embedded-storage", - "esp-config", - "esp-rom-sys", - "jiff", - "strum 0.27.2", -] - -[[package]] -name = "esp-config" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd4a8db4b72794637a25944bc8d361c3cc271d4f03987ce8741312b6b61529c" -dependencies = [ - "document-features", - "esp-metadata-generated 0.1.0", - "evalexpr", - "serde", - "serde_yaml", -] - -[[package]] -name = "esp-hal" -version = "1.0.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3887eda2917deef3d99e7a5c324f9190714e99055361ad36890dffd0a995b49" -dependencies = [ - "bitfield 0.19.4", - "bitflags 2.13.1", - "bytemuck", - "cfg-if", - "critical-section", - "delegate", - "digest 0.10.7", - "document-features", - "embassy-embedded-hal 0.3.2", - "embassy-futures", - "embassy-sync 0.6.2", - "embassy-usb-driver", - "embassy-usb-synopsys-otg", - "embedded-can", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-io 0.6.1", - "embedded-io-async", - "enumset", - "esp-config", - "esp-hal-procmacros", - "esp-metadata-generated 0.1.0", - "esp-riscv-rt", - "esp-rom-sys", - "esp-synopsys-usb-otg", - "esp32", - "esp32c2", - "esp32c3", - "esp32c6", - "esp32h2", - "esp32s2", - "esp32s3 0.33.0", - "fugit", - "instability", - "nb 1.1.0", - "paste", - "portable-atomic", - "rand_core 0.6.4", - "rand_core 0.9.5", - "riscv 0.12.1", - "serde", - "strum 0.27.2", - "ufmt-write", - "xtensa-lx", - "xtensa-lx-rt", -] - -[[package]] -name = "esp-hal-embassy" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be6d5d08adc5d26d8071450c76e62027906dce2795afaed76e9809e596f8e33" -dependencies = [ - "cfg-if", - "critical-section", - "document-features", - "embassy-executor", - "embassy-sync 0.6.2", - "embassy-time", - "embassy-time-driver", - "embassy-time-queue-utils", - "esp-config", - "esp-hal", - "esp-hal-procmacros", - "esp-metadata-generated 0.1.0", - "portable-atomic", - "static_cell", -] - -[[package]] -name = "esp-hal-procmacros" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbece384edaf0d1eabfa45afa96d910634d4158638ef983b2d419a8dec832246" -dependencies = [ - "document-features", - "litrs 0.4.2", - "object 0.36.7", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.119", - "termcolor", -] - -[[package]] -name = "esp-metadata" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6fbc1d166be84c0750f121e95c8989ddebd7e7bdd86af3594a6cfb34f039650" -dependencies = [ - "anyhow", - "basic-toml", - "indexmap", - "proc-macro2", - "quote", - "serde", - "strum 0.27.2", -] - -[[package]] -name = "esp-metadata-generated" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189d36b8c8a752bdebec67fd02a15ebb1432feea345553749bca7ce2393cc795" -dependencies = [ - "esp-metadata", -] - -[[package]] -name = "esp-metadata-generated" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42c2ee95b945a4780796e4359e72c033aed3b45073880e8029458f538532db8a" - -[[package]] -name = "esp-println" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e7e3ab41e96093d7fd307e93bfc88bd646a8ff23036ebf809e116b18869f719" -dependencies = [ - "document-features", - "esp-metadata-generated 0.1.0", - "log", - "portable-atomic", -] - -[[package]] -name = "esp-riscv-rt" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a00370dfcb0ccc01c6b2540076379c6efd6890a27f584de217c38e3239e19d5" -dependencies = [ - "document-features", - "riscv 0.12.1", - "riscv-rt-macros 0.4.0", -] - -[[package]] -name = "esp-rom-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae852ccb08971155023d1371c96d5490cbc26860f06aee2d629ef73f1a890c3" -dependencies = [ - "cfg-if", - "document-features", - "esp-metadata-generated 0.4.0", - "esp32s3 0.35.2", -] - -[[package]] -name = "esp-synopsys-usb-otg" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8938451cb19032f13365328ea66ab38c8d16deecdf322067442297110eb74468" -dependencies = [ - "critical-section", - "embedded-hal 0.2.7", - "ral-registers", - "usb-device", - "vcell", -] - -[[package]] -name = "esp32" -version = "0.38.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7680f79e3a4770e59c2dc25b17dcd852921ee57ffae9a4c4806c9ca5001d54d" +checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" dependencies = [ - "critical-section", - "vcell", + "log", + "regex", ] [[package]] -name = "esp32c2" -version = "0.27.0" +name = "env_logger" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1bcf86fca83543e0e95561cba27bbcc6b6e7adc5428f49187f5868bc0c3ed2" +checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" dependencies = [ - "critical-section", - "vcell", + "anstream", + "anstyle", + "env_filter 2.0.0", + "jiff", + "log", ] [[package]] -name = "esp32c3" -version = "0.30.0" +name = "equator" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2c5a33d4377f974cbe8cadf8307f04f2c39755704cb09e81852c63ee4ac7b8" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" dependencies = [ - "critical-section", - "vcell", + "equator-macro", ] [[package]] -name = "esp32c6" -version = "0.21.0" +name = "equator-macro" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ca8fc81b7164df58b5e04aaac9e987459312e51903cca807317990293973a6e" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ - "critical-section", - "vcell", + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] -name = "esp32h2" -version = "0.17.0" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80171d08c17d8c63b53334c60ca654786a7593481531d19b639c4e5c76d276de" -dependencies = [ - "critical-section", - "vcell", -] +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] -name = "esp32s2" -version = "0.29.0" +name = "erased-serde" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c90d347480fca91f4be3e94b576af9c6c7987795c58dc3c5a7c108b6b3966dc" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" dependencies = [ - "critical-section", - "vcell", + "serde", + "serde_core", + "typeid", ] [[package]] -name = "esp32s3" -version = "0.33.0" +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3769c56222c4548833f236c7009f1f8b3f2387af26366f6bd1cea456666a49d" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "critical-section", - "vcell", + "libc", + "windows-sys 0.61.2", ] [[package]] -name = "esp32s3" -version = "0.35.2" +name = "error-code" +version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b4b8c4e4d9f187553ecdb7173edec7b2deb2beea106eedefecdb1654b8ee25a" -dependencies = [ - "vcell", -] +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "etagere" @@ -5362,12 +4294,6 @@ dependencies = [ "serde", ] -[[package]] -name = "evalexpr" -version = "12.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae893d2d5e908b78f151ed89de3bfc272cdf6d368c7ed866942f98e24dea208a" - [[package]] name = "event-listener" version = "5.4.1" @@ -5399,7 +4325,7 @@ dependencies = [ "half", "lebe", "miniz_oxide", - "num-complex 0.4.6", + "num-complex", "pulp", "rayon-core", "smallvec", @@ -5530,7 +4456,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ "memoffset", - "rustc_version 0.4.1", + "rustc_version", ] [[package]] @@ -5549,18 +4475,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" -[[package]] -name = "fixed" -version = "1.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707070ccf8c4173548210893a0186e29c266901b71ed20cd9e2ca0193dfe95c3" -dependencies = [ - "az", - "bytemuck", - "half", - "typenum", -] - [[package]] name = "fixed_decimal" version = "0.5.6" @@ -5604,9 +4518,6 @@ name = "float-cmp" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] [[package]] name = "float-ord" @@ -5814,51 +4725,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "frunk" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28aef0f9aa070bce60767c12ba9cb41efeaf1a2bc6427f87b7d83f11239a16d7" -dependencies = [ - "frunk_core 0.4.4", - "frunk_derives", -] - -[[package]] -name = "frunk_core" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "476eeaa382e3462b84da5d6ba3da97b5786823c2d0d3a0d04ef088d073da225c" - -[[package]] -name = "frunk_core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd3c9ba2e323e8b19e77f15873f60974a7d82f89b80e50c53be44b8b92927c1" - -[[package]] -name = "frunk_derives" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b4095fc99e1d858e5b8c7125d2638372ec85aa0fe6c807105cf10b0265ca6c" -dependencies = [ - "frunk_proc_macro_helpers", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "frunk_proc_macro_helpers" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b70229a1347a20d4af9c06116cc452acef34f798668c6b69e97dd5c8a88052bd" -dependencies = [ - "frunk_core 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "fs_extra" version = "1.3.0" @@ -5871,34 +4737,6 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" -[[package]] -name = "ft3x68-rs" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0bac594f5ab9765057e989fc04f816583a24fac44381c73c7da7821414a4551" -dependencies = [ - "embedded-hal 1.0.0", - "heapless 0.8.0", -] - -[[package]] -name = "ft5336" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "432cd93aa1378ad78d4e1048e9dba7622cfde09f04eb9b261ca6dcf0d358a3d4" -dependencies = [ - "embedded-hal 0.2.7", -] - -[[package]] -name = "fugit" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e639847d312d9a82d2e75b0edcc1e934efcc64e6cb7aa94f0b1fbec0bc231d6" -dependencies = [ - "gcd", -] - [[package]] name = "futures" version = "0.3.33" @@ -6040,12 +4878,6 @@ dependencies = [ "libc", ] -[[package]] -name = "gcd" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" - [[package]] name = "generic-array" version = "0.14.7" @@ -6072,7 +4904,7 @@ version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" dependencies = [ - "unicode-width 0.2.2", + "unicode-width", ] [[package]] @@ -6528,7 +5360,7 @@ dependencies = [ "libc", "muldiv", "num-integer", - "num-rational 0.4.2", + "num-rational", "once_cell", "option-operations", "paste", @@ -6737,18 +5569,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "gt911" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65a60a0e3e4a85a5a309b6c012a491730d51e0210f56b70acfc7d912a163b060" -dependencies = [ - "defmt 0.3.100", - "embedded-hal 1.0.0", - "embedded-hal-async", - "heapless 0.8.0", -] - [[package]] name = "guillotiere" version = "0.6.2" @@ -6870,7 +5690,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ - "allocator-api2 0.2.21", + "allocator-api2", "equivalent", "foldhash 0.2.0", "serde", @@ -6901,7 +5721,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "headers-core", "http 1.4.2", @@ -6919,17 +5739,6 @@ dependencies = [ "http 1.4.2", ] -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "defmt 0.3.100", - "hash32", - "stable_deref_trait", -] - [[package]] name = "heapless" version = "0.9.3" @@ -7134,7 +5943,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-util", @@ -7255,7 +6064,7 @@ dependencies = [ "scoped-tls-hkt", "scopeguard", "softbuffer", - "strum 0.28.0", + "strum", "vtable", "wasm-bindgen", "web-sys", @@ -7295,7 +6104,7 @@ dependencies = [ "linked_hash_set", "lyon_extra", "lyon_path", - "num_enum 0.7.6", + "num_enum", "proc-macro2", "quote", "rayon", @@ -7304,7 +6113,7 @@ dependencies = [ "rspolib", "skrifa 0.43.2", "smol_str 0.3.6", - "strum 0.28.0", + "strum", "swash", "typed-index-collections", "unicode-segmentation", @@ -7351,7 +6160,7 @@ dependencies = [ "serde", "skrifa 0.43.2", "slab", - "strum 0.28.0", + "strum", "swash", "sys-locale", "taffy 0.10.1", @@ -7699,7 +6508,7 @@ dependencies = [ "icu_provider 1.5.0", "litemap 0.7.5", "num-bigint", - "num-rational 0.4.2", + "num-rational", "num-traits", "smallvec", "tinystr 0.7.6", @@ -8164,15 +6973,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "indoc" -version = "2.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" -dependencies = [ - "rustversion", -] - [[package]] name = "inflections" version = "1.1.1" @@ -8239,19 +7039,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36eee07d8e02bd95bf52b2e642cf13d33701b94c6e4b04fbf1d1fb07e9cb19e7" -[[package]] -name = "instability" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb2d60ef19920a3a9193c3e371f726ec1dafc045dac788d0fb3704272458971" -dependencies = [ - "darling 0.23.0", - "indoc", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "integer-sqrt" version = "0.1.5" @@ -8323,15 +7110,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -8371,7 +7149,7 @@ version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e184d09547b80eb7e20d141ba2fb1fbac843ca53f4cf1b31210adc4c1adc6e16" dependencies = [ - "defmt 1.1.1", + "defmt", "jiff-core", "jiff-static", "log", @@ -8386,7 +7164,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" dependencies = [ - "defmt 1.1.1", + "defmt", ] [[package]] @@ -8442,7 +7220,7 @@ checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" dependencies = [ "proc-macro2", "quote", - "rustc_version 0.4.1", + "rustc_version", "simd_cesu8", "syn 2.0.119", ] @@ -8503,19 +7281,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38a8cc72399dffa4a445bc5f5a84d4af4d441c76604231bc52e9c529c1d47693" dependencies = [ "digest 0.11.3", - "keccak 0.2.0", + "keccak", "sponge-cursor", ] -[[package]] -name = "keccak" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" -dependencies = [ - "cpufeatures 0.2.17", -] - [[package]] name = "keccak" version = "0.2.0" @@ -8616,38 +7385,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "lalrpop" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501" -dependencies = [ - "ascii-canvas", - "bit-set 0.8.0", - "ena", - "itertools 0.14.0", - "lalrpop-util", - "petgraph 0.7.1", - "pico-args", - "regex", - "regex-syntax", - "sha3 0.10.9", - "string_cache 0.8.9", - "term", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733" -dependencies = [ - "regex-automata 0.4.16", - "rustversion", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -8769,12 +7506,6 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "linked_list_allocator" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b23ac50abb8261cb38c6e2a7192d3302e0836dac1628f6a93b82b4fad185897" - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -8805,15 +7536,6 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" -[[package]] -name = "litrs" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" -dependencies = [ - "proc-macro2", -] - [[package]] name = "litrs" version = "1.0.0" @@ -8994,58 +7716,14 @@ name = "mcu-board-support" version = "1.18.0" dependencies = [ "cfg-if", - "cortex-m", - "cortex-m-rt", - "defmt 1.1.1", - "defmt-rtt", - "defmt-serial", "derive_more", - "eeprom24x", - "embassy-executor", - "embassy-futures", - "embassy-rp", - "embassy-stm32", - "embassy-sync 0.7.2", - "embassy-time", - "embedded-alloc", - "embedded-display-controller", - "embedded-dma", - "embedded-graphics", - "embedded-graphics-core", - "embedded-graphics-framebuf", - "embedded-hal 1.0.0", - "embedded-hal-bus", - "embedded-hal-nb", - "embedded-time", - "esp-alloc", - "esp-backtrace", - "esp-bootloader-esp-idf", - "esp-hal", - "esp-hal-embassy", - "esp-println", - "euclid", - "ft3x68-rs", - "ft5336", - "fugit", - "getrandom 0.2.17", - "gt911", "i-slint-core", "i-slint-core-macros", - "i-slint-renderer-software", "log", - "mipidsi", "once_cell", - "panic-probe", "pin-weak", - "rand_core 0.6.4", "rgb", - "rp-pico", - "rp235x-hal", - "sh8601-rs", - "sitronix-touch", "slint", - "static_cell", - "stm32h7xx-hal", ] [[package]] @@ -9081,12 +7759,6 @@ dependencies = [ "slint-build", ] -[[package]] -name = "micromath" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815" - [[package]] name = "mime" version = "0.3.17" @@ -9130,18 +7802,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "mipidsi" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba34dcbf61182ffa6992b5a4d9b566d5a99df127fd93f6d314213347329e92f" -dependencies = [ - "embedded-graphics-core", - "embedded-hal 1.0.0", - "heapless 0.8.0", - "nb 1.1.0", -] - [[package]] name = "ml-dsa" version = "0.1.1" @@ -9365,21 +8025,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c" -[[package]] -name = "nb" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" -dependencies = [ - "nb 1.1.0", -] - -[[package]] -name = "nb" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" - [[package]] name = "ndk" version = "0.8.0" @@ -9390,7 +8035,7 @@ dependencies = [ "jni-sys 0.3.1", "log", "ndk-sys 0.5.0+25.2.9519653", - "num_enum 0.7.6", + "num_enum", "thiserror 1.0.69", ] @@ -9404,7 +8049,7 @@ dependencies = [ "jni-sys 0.3.1", "log", "ndk-sys 0.6.0+11769913", - "num_enum 0.7.6", + "num_enum", "raw-window-handle", "thiserror 1.0.69", ] @@ -9530,19 +8175,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f" -dependencies = [ - "num-complex 0.3.1", - "num-integer", - "num-iter", - "num-rational 0.3.2", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.4.8" @@ -9553,15 +8185,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" -dependencies = [ - "num-traits", -] - [[package]] name = "num-complex" version = "0.4.6" @@ -9598,27 +8221,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" version = "0.4.2" @@ -9644,19 +8246,10 @@ dependencies = [ name = "num_cpus" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi 0.5.2", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "num_enum_derive 0.5.11", + "hermit-abi 0.5.2", + "libc", ] [[package]] @@ -9665,21 +8258,10 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ - "num_enum_derive 0.7.6", + "num_enum_derive", "rustversion", ] -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "num_enum_derive" version = "0.7.6" @@ -10138,15 +8720,6 @@ dependencies = [ "objc", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "object" version = "0.37.3" @@ -10389,16 +8962,6 @@ dependencies = [ "sha2 0.11.0", ] -[[package]] -name = "panic-probe" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4047d9235d1423d66cc97da7d07eddb54d4f154d6c13805c6d0793956f4f25b0" -dependencies = [ - "cortex-m", - "defmt 0.3.100", -] - [[package]] name = "parking" version = "2.2.1" @@ -10532,7 +9095,7 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4500030c302e4af1d423f36f3b958d1aecb6c04184356ed5a833bf6b60435777" dependencies = [ - "rustc_version 0.4.1", + "rustc_version", ] [[package]] @@ -10585,16 +9148,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "petgraph" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" -dependencies = [ - "fixedbitset", - "indexmap", -] - [[package]] name = "petgraph" version = "0.8.3" @@ -10626,7 +9179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ "phf_macros", - "phf_shared 0.13.1", + "phf_shared", "serde", ] @@ -10637,7 +9190,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" dependencies = [ "phf_generator", - "phf_shared 0.13.1", + "phf_shared", ] [[package]] @@ -10647,7 +9200,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared 0.13.1", + "phf_shared", ] [[package]] @@ -10657,21 +9210,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ "phf_generator", - "phf_shared 0.13.1", + "phf_shared", "proc-macro2", "quote", "syn 2.0.119", ] -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - [[package]] name = "phf_shared" version = "0.13.1" @@ -10725,65 +9269,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b330c9d1b92dfe68442ca20b009c717d5f0b1e3cf4965e62f704c3c6e95a1305" -[[package]] -name = "pio" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e09694b50f89f302ed531c1f2a7569f0be5867aee4ab4f8f729bbeec0078e3" -dependencies = [ - "arrayvec", - "num_enum 0.5.11", - "paste", -] - -[[package]] -name = "pio" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ba4153cee9585abc451271aa437d9e8defdea8b468d48ba6b8f098cbe03d7f" -dependencies = [ - "pio-core", - "pio-proc", -] - -[[package]] -name = "pio-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61d90fddc3d67f21bbf93683bc461b05d6a29c708caf3ffb79947d7ff7095406" -dependencies = [ - "arrayvec", - "num_enum 0.7.6", - "paste", -] - -[[package]] -name = "pio-parser" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825266c1eaddf54f636d06eefa4bf3c99d774c14ec46a4a6c6e5128a0f10d205" -dependencies = [ - "lalrpop", - "lalrpop-util", - "pio-core", -] - -[[package]] -name = "pio-proc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4a76571f5fe51af43cc80ac870fe0c79cc0cdd686b9002a6c4c84bfdd0176b" -dependencies = [ - "codespan-reporting 0.11.1", - "lalrpop-util", - "pio-core", - "pio-parser", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "piper" version = "0.2.5" @@ -11058,28 +9543,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "proc-macro2" version = "1.0.107" @@ -11136,7 +9599,7 @@ dependencies = [ "bytemuck", "cfg-if", "libm", - "num-complex 0.4.6", + "num-complex", "paste", "pulp-wasm-simd-flag", "raw-cpuid", @@ -11269,24 +9732,12 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "r0" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7a31eed1591dcbc95d92ad7161908e72f4677f8fabf2a32ca49b4237cbf211" - [[package]] name = "radsort" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" -[[package]] -name = "ral-registers" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46b71a9d9206e8b46714c74255adcaea8b11e0350c1d8456165073c3f75fc81a" - [[package]] name = "rand" version = "0.9.5" @@ -11318,12 +9769,6 @@ dependencies = [ "rand_core 0.9.5", ] -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - [[package]] name = "rand_core" version = "0.9.5" @@ -11489,7 +9934,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "core_maths", "font-types 0.12.1", "once_cell", ] @@ -11594,7 +10038,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", @@ -11690,91 +10134,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "riscv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5c1b8bf41ea746266cdee443d1d1e9125c86ce1447e1a2615abd34330d33a9" -dependencies = [ - "critical-section", - "embedded-hal 1.0.0", -] - -[[package]] -name = "riscv" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea8ff73d3720bdd0a97925f0bf79ad2744b6da8ff36be3840c48ac81191d7a7" -dependencies = [ - "critical-section", - "embedded-hal 1.0.0", - "paste", - "riscv-macros", - "riscv-pac", -] - -[[package]] -name = "riscv-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f265be5d634272320a7de94cea15c22a3bfdd4eb42eb43edc528415f066a1f25" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "riscv-pac" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8188909339ccc0c68cfb5a04648313f09621e8b87dc03095454f1a11f6c5d436" - -[[package]] -name = "riscv-rt" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0d35e32cf1383183e8885d8a9aa4402a087fd094dc34c2cb6df6687d0229dfe" -dependencies = [ - "riscv 0.11.1", - "riscv-rt-macros 0.2.2", -] - -[[package]] -name = "riscv-rt-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30f19a85fe107b65031e0ba8ec60c34c2494069fe910d6c297f5e7cb5a6f76d0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "riscv-rt-macros" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc71814687c45ba4cd1e47a54e03a2dbc62ca3667098fbae9cc6b423956758fa" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "rlsf" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1646a59a9734b8b7a0ac51689388a60fe1625d4b956348e9de07591a1478457a" -dependencies = [ - "cfg-if", - "const-default", - "libc", - "rustversion", - "svgbobdoc", -] - [[package]] name = "rodio" version = "0.22.2" @@ -11784,210 +10143,50 @@ dependencies = [ "cpal 0.17.1", "dasp_sample", "lewton", - "num-rational 0.4.2", + "num-rational", "thiserror 2.0.19", - "tracing", -] - -[[package]] -name = "ron" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" -dependencies = [ - "bitflags 2.13.1", - "once_cell", - "serde", - "serde_derive", - "typeid", - "unicode-ident", -] - -[[package]] -name = "rowan" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21" -dependencies = [ - "countme", - "hashbrown 0.14.5", - "rustc-hash 1.1.0", - "text-size", -] - -[[package]] -name = "roxmltree" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" - -[[package]] -name = "roxmltree" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" -dependencies = [ - "memchr", -] - -[[package]] -name = "rp-binary-info" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f582261945fa215d40e2988b4df595d11c0908c0fff97a0fe23df766d117b790" - -[[package]] -name = "rp-hal-common" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288358786b1458fb2caac8c4b40fb529ef4200d6c46467e2695b7a8ba573ae8" -dependencies = [ - "fugit", -] - -[[package]] -name = "rp-pac" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af65855c40b2c35079514c5489abffc0429347fef25d8467ff98ad84b4322d3" -dependencies = [ - "cortex-m", - "cortex-m-rt", -] - -[[package]] -name = "rp-pico" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9342d3ac7011ac688300979e9b52a81f0add1d05feb02868cf94bfee0705b28" -dependencies = [ - "cortex-m-rt", - "fugit", - "rp2040-boot2", - "rp2040-hal", - "usb-device", -] - -[[package]] -name = "rp2040-boot2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c92f344f63f950ee36cf4080050e4dce850839b9175da38f9d2ffb69b4dbb21" -dependencies = [ - "crc-any", -] - -[[package]] -name = "rp2040-hal" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d11e711940087f2cdff8aeae9f4b902e2014c06a00b39a1092686b81ec973d6f" -dependencies = [ - "bitfield 0.14.0", - "cortex-m", - "critical-section", - "embedded-dma", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-hal-nb", - "embedded-io 0.6.1", - "frunk", - "fugit", - "itertools 0.10.5", - "nb 1.1.0", - "paste", - "pio 0.2.1", - "rand_core 0.6.4", - "rp2040-hal-macros", - "rp2040-pac", - "usb-device", - "vcell", - "void", -] - -[[package]] -name = "rp2040-hal-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86479063e497efe1ae81995ef9071f54fd1c7427e04d6c5b84cde545ff672a5e" -dependencies = [ - "cortex-m-rt", - "proc-macro2", - "quote", - "syn 1.0.109", + "tracing", ] [[package]] -name = "rp2040-pac" -version = "0.6.0" +name = "ron" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cbcd3f7a0ca7bbe61dc4eb7e202842bee4e27b769a7bf3a4a72fa399d6e404" +checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" dependencies = [ - "cortex-m", - "cortex-m-rt", - "critical-section", - "vcell", + "bitflags 2.13.1", + "once_cell", + "serde", + "serde_derive", + "typeid", + "unicode-ident", ] [[package]] -name = "rp235x-hal" -version = "0.3.0" +name = "rowan" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2939c82776b0b4ae110168b4298b5adf831e6cff249b057bf2a2187453b959c" +checksum = "417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21" dependencies = [ - "bitfield 0.14.0", - "cortex-m", - "cortex-m-rt", - "critical-section", - "defmt 0.3.100", - "embedded-dma", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "embedded-hal-nb", - "embedded-io 0.6.1", - "frunk", - "fugit", - "gcd", - "itertools 0.13.0", - "nb 1.1.0", - "paste", - "pio 0.2.1", - "rand_core 0.6.4", - "riscv 0.11.1", - "riscv-rt", - "rp-binary-info", - "rp-hal-common", - "rp235x-hal-macros", - "rp235x-pac", - "sha2-const-stable", - "usb-device", - "vcell", - "void", + "countme", + "hashbrown 0.14.5", + "rustc-hash 1.1.0", + "text-size", ] [[package]] -name = "rp235x-hal-macros" -version = "0.1.0" +name = "roxmltree" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74edd7a5979e9763bbb98e9746e711bac7464ee3397af7288e6c288ff0d3c764" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] -name = "rp235x-pac" -version = "0.1.0" +name = "roxmltree" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffcb6931deee4242886b5a1df62db5e2555b0eb6ae1e8be101f3ea3e58e65c6" +checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" dependencies = [ - "cortex-m", - "cortex-m-rt", - "critical-section", - "vcell", + "memchr", ] [[package]] @@ -12018,7 +10217,7 @@ dependencies = [ "natord", "snafu", "unicode-linebreak", - "unicode-width 0.2.2", + "unicode-width", ] [[package]] @@ -12061,22 +10260,13 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.28", + "semver", ] [[package]] @@ -12214,12 +10404,6 @@ dependencies = [ "twox-hash", ] -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - [[package]] name = "same-file" version = "1.0.6" @@ -12269,12 +10453,6 @@ dependencies = [ "tiny-skia 0.11.4", ] -[[package]] -name = "sdio-host" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93c025f9cfe4c388c328ece47d11a54a823da3b5ad0370b22d95ad47137f85a" - [[package]] name = "sea-query" version = "1.0.0-rc.31" @@ -12291,7 +10469,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0b0f466921cdd3cf4b89d5c3ac2173dba89a873ab395b123a645de181ec7537" dependencies = [ - "darling 0.20.11", + "darling", "heck 0.4.1", "proc-macro2", "quote", @@ -12367,33 +10545,12 @@ dependencies = [ "to_shmem_derive", ] -[[package]] -name = "semihosting" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e4abf97879f4e80db69a9fba7bd64998e9bdad25f58ef045a778e191172fd4" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "send_wrapper" version = "0.6.0" @@ -12480,19 +10637,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "serdect" version = "0.4.3" @@ -12676,7 +10820,7 @@ dependencies = [ "servo-malloc-size-of", "servo-pixels", "servo-webxr-api", - "strum 0.28.0", + "strum", "stylo", "webrender_api", ] @@ -12687,11 +10831,11 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f9dd233e8e1329d3d27ad0dcc63c329658afe2a4142ff4a5502df940efd614" dependencies = [ - "num_enum 0.7.6", + "num_enum", "serde", "serde_json", "servo-config-macro", - "strum 0.28.0", + "strum", "stylo_static_prefs", ] @@ -12715,7 +10859,7 @@ checksum = "5cb7fd3cecac6725072cd28ea3c26eb4725d0dd73742685103d6980c0a391905" dependencies = [ "accesskit", "backtrace", - "base64 0.22.1", + "base64", "content-security-policy", "crossbeam-channel", "euclid", @@ -12758,7 +10902,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a99fb37a6026432587ad417ffa44a424e74e4e624e9d1a4058812b805b2ac9b" dependencies = [ - "base64 0.22.1", + "base64", "content-security-policy", "encoding_rs", "euclid", @@ -12782,7 +10926,7 @@ dependencies = [ "servo-profile-traits", "servo-storage-traits", "servo-url", - "strum 0.28.0", + "strum", "uuid", "webrender_api", "zeroize", @@ -12815,7 +10959,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3811f7c0b27d726aa9df45052c1a104ed5327038ed67829b1ba41fbbd2441b4" dependencies = [ "atomic_refcell", - "base64 0.22.1", + "base64", "chrono", "crossbeam-channel", "headers", @@ -12895,7 +11039,7 @@ dependencies = [ "servo-malloc-size-of", "servo-pixels", "servo-url", - "strum 0.28.0", + "strum", "stylo", "stylo_traits", "url", @@ -13104,7 +11248,7 @@ dependencies = [ "servo-url", "servo_arc", "smallvec", - "strum 0.28.0", + "strum", "stylo", "stylo_atoms", "stylo_traits", @@ -13177,7 +11321,7 @@ dependencies = [ "servo-allocator", "servo_arc", "smallvec", - "string_cache 0.9.0", + "string_cache", "stylo", "stylo_dom", "stylo_malloc_size_of", @@ -13219,9 +11363,9 @@ dependencies = [ "euclid", "log", "malloc_size_of_derive", - "num-complex 0.4.6", + "num-complex", "num-traits", - "petgraph 0.8.3", + "petgraph", "serde", "servo-base", "servo-malloc-size-of", @@ -13374,7 +11518,7 @@ dependencies = [ "async-compression", "async-recursion", "async-tungstenite", - "base64 0.22.1", + "base64", "bytes", "chrono", "content-security-policy", @@ -13544,7 +11688,7 @@ dependencies = [ "servo-tracing", "servo-url", "smallvec", - "strum 0.28.0", + "strum", "stylo", "stylo_traits", "surfman", @@ -13618,7 +11762,7 @@ dependencies = [ "atomic_refcell", "aws-lc-rs", "backtrace", - "base64 0.22.1", + "base64", "base64ct", "bitflags 2.13.1", "brotli", @@ -13718,7 +11862,7 @@ dependencies = [ "sha2 0.11.0", "sha3 0.12.0", "smallvec", - "strum 0.28.0", + "strum", "stylo", "stylo_atoms", "stylo_dom", @@ -13762,7 +11906,7 @@ dependencies = [ "parking_lot", "phf", "phf_codegen", - "phf_shared 0.13.1", + "phf_shared", "regex", "serde_json", "servo-base", @@ -13811,7 +11955,7 @@ dependencies = [ "servo-storage-traits", "servo-url", "servo-webxr-api", - "strum 0.28.0", + "strum", "stylo_atoms", "stylo_traits", "webrender_api", @@ -13969,24 +12113,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "sh8601-rs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b4bc72c23fb2c5195839625b93d8bdd2e4ddc0ce1749ff844797340f136f2b" -dependencies = [ - "critical-section", - "document-features", - "embedded-graphics", - "embedded-graphics-core", - "embedded-hal 1.0.0", - "esp-alloc", - "esp-backtrace", - "esp-bootloader-esp-idf", - "esp-hal", - "esp-println", -] - [[package]] name = "sha1" version = "0.10.7" @@ -14037,22 +12163,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "sha2-const-stable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" - -[[package]] -name = "sha3" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" -dependencies = [ - "digest 0.10.7", - "keccak 0.1.6", -] - [[package]] name = "sha3" version = "0.11.0" @@ -14060,7 +12170,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" dependencies = [ "digest 0.11.3", - "keccak 0.2.0", + "keccak", ] [[package]] @@ -14070,7 +12180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" dependencies = [ "digest 0.11.3", - "keccak 0.2.0", + "keccak", "sponge-cursor", ] @@ -14081,7 +12191,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" dependencies = [ "digest 0.11.3", - "keccak 0.2.0", + "keccak", "sponge-cursor", ] @@ -14138,7 +12248,7 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ - "rustc_version 0.4.1", + "rustc_version", "simdutf8", ] @@ -14172,16 +12282,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" -[[package]] -name = "sitronix-touch" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734f03e1bf16f62e1c951ad3ee5e03d913b1fc977214aa0bc72dab9eda702f0b" -dependencies = [ - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", -] - [[package]] name = "skia-bindings" version = "0.99.0" @@ -14237,7 +12337,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" dependencies = [ "bytemuck", - "core_maths", "read-fonts 0.41.0", ] @@ -14325,24 +12424,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smart-leds" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66df34e571fa9993fa6f99131a374d58ca3d694b75f9baac93458fe0d6057bf0" -dependencies = [ - "smart-leds-trait", -] - -[[package]] -name = "smart-leds-trait" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f4441a131924d58da6b83a7ad765c460e64630cce504376c3a87a2558c487f" -dependencies = [ - "rgb", -] - [[package]] name = "smithay-client-toolkit" version = "0.19.2" @@ -14548,66 +12629,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "static_cell" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "stm32-fmc" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f0639399e2307c2446c54d91d4f1596343a1e1d5cab605b9cce11d0ab3858c" -dependencies = [ - "embedded-hal 0.2.7", -] - -[[package]] -name = "stm32-metapac" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc520f60f6653a32479a95b9180b33908f0cbbdf106609465ee7dea98f4f5b37" -dependencies = [ - "cortex-m", - "cortex-m-rt", -] - -[[package]] -name = "stm32h7" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "362f288cd8341e9209587b889c385f323e82fc237b60c272868965bb879bb9b1" -dependencies = [ - "bare-metal 1.0.0", - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "stm32h7xx-hal" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd869329be25440b24e2b3583a1c016151b4a54bc36d96d82af7fcd9d010b98" -dependencies = [ - "bare-metal 1.0.0", - "cast", - "cortex-m", - "embedded-display-controller", - "embedded-dma", - "embedded-hal 0.2.7", - "embedded-storage", - "fugit", - "nb 1.1.0", - "paste", - "stm32h7", - "void", -] - [[package]] name = "strck" version = "0.1.2" @@ -14633,18 +12654,6 @@ dependencies = [ "float-cmp", ] -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", -] - [[package]] name = "string_cache" version = "0.9.0" @@ -14653,7 +12662,7 @@ checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" dependencies = [ "new_debug_unreachable", "parking_lot", - "phf_shared 0.13.1", + "phf_shared", "precomputed-hash", "serde", ] @@ -14665,45 +12674,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" dependencies = [ "phf_generator", - "phf_shared 0.13.1", + "phf_shared", "proc-macro2", "quote", ] -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros 0.27.2", -] - [[package]] name = "strum" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ - "strum_macros 0.28.0", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.119", + "strum_macros", ] [[package]] @@ -14756,9 +12738,9 @@ dependencies = [ "smallbitvec", "smallvec", "static_assertions", - "string_cache 0.9.0", - "strum 0.28.0", - "strum_macros 0.28.0", + "string_cache", + "strum", + "strum_macros", "stylo_atoms", "stylo_derive", "stylo_dom", @@ -14781,7 +12763,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55651489a0c27f66d08e7c9cf8ee449328c0de291e37227fc1bbcffb2d7e681e" dependencies = [ - "string_cache 0.9.0", + "string_cache", "string_cache_codegen", ] @@ -14791,7 +12773,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e39f4962458b9e9efc91684666509a1811bc690f90188508108583187d19e83c" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", "syn 2.0.119", @@ -14821,7 +12803,7 @@ dependencies = [ "servo_arc", "smallbitvec", "smallvec", - "string_cache 0.9.0", + "string_cache", "thin-vec", "void", ] @@ -14899,19 +12881,6 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" -[[package]] -name = "svgbobdoc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50" -dependencies = [ - "base64 0.13.1", - "proc-macro2", - "quote", - "syn 1.0.109", - "unicode-width 0.1.14", -] - [[package]] name = "svgtypes" version = "0.16.1" @@ -14934,23 +12903,11 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c2499c2d826531388872b2268718aed907a39bd785ab0dcfe57fab26283f92e" dependencies = [ - "core_maths", "skrifa 0.44.0", "yazi", "zeno", ] -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.119" @@ -15139,15 +13096,6 @@ dependencies = [ "new_debug_unreachable", ] -[[package]] -name = "term" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "termcolor" version = "1.4.1" @@ -15400,7 +13348,7 @@ dependencies = [ "servo_arc", "smallbitvec", "smallvec", - "string_cache 0.9.0", + "string_cache", "thin-vec", ] @@ -15410,7 +13358,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ba1f5563024b63bb6acb4558452d9ba737518c1d11fcc1861febe98d1e31cf4" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", "syn 2.0.119", @@ -15708,7 +13656,7 @@ checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" dependencies = [ "memchr", "nom 8.0.0", - "petgraph 0.8.3", + "petgraph", ] [[package]] @@ -15757,7 +13705,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f892c6904b0bd5a9241eac848347abcbbbd2b9f3892bad23ac3e6efab8d6f06a" dependencies = [ "digest 0.11.3", - "keccak 0.2.0", + "keccak", "sponge-cursor", ] @@ -15818,12 +13766,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "ufmt-write" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" - [[package]] name = "uluru" version = "3.1.0" @@ -15934,12 +13876,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - [[package]] name = "unicode-width" version = "0.2.2" @@ -15968,12 +13904,6 @@ dependencies = [ "ctutils", ] -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.9.0" @@ -16011,23 +13941,13 @@ dependencies = [ "url", ] -[[package]] -name = "usb-device" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6" -dependencies = [ - "heapless 0.8.0", - "portable-atomic", -] - [[package]] name = "usvg" version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d46cf96c5f498d36b7a9693bc6a7075c0bb9303189d61b2249b0dc3d309c07de" dependencies = [ - "base64 0.22.1", + "base64", "data-url", "flate2", "fontdb", @@ -16108,12 +14028,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "vcell" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" - [[package]] name = "vcpkg" version = "0.2.15" @@ -16182,15 +14096,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -[[package]] -name = "volatile-register" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" -dependencies = [ - "vcell", -] - [[package]] name = "vtable" version = "0.5.0" @@ -16467,7 +14372,7 @@ checksum = "075474b12bcb3d2e3d4546580e9de478eeeead668a1761e2a8860c836b7ef297" dependencies = [ "phf", "phf_codegen", - "string_cache 0.9.0", + "string_cache", "string_cache_codegen", ] @@ -16493,7 +14398,7 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91d53921e1bef27512fa358179c9a22428d55778d2c2ae3c5c37a52b82ce6e92" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "cookie 0.16.2", "http 0.2.12", @@ -16531,7 +14436,7 @@ version = "0.69.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384e260b5f94dd5459e58e37a4a336141ce1b91da3c3c403d579688922515731" dependencies = [ - "allocator-api2 0.2.21", + "allocator-api2", "bincode 1.3.3", "bitflags 2.13.1", "build-parallel", @@ -16664,7 +14569,7 @@ checksum = "2f519832254e56965a9940c4af57dcb75f702b6f6fa4a0b172f685395843a4d7" dependencies = [ "arrayvec", "bit-set 0.9.1", - "bit-vec 0.9.1", + "bit-vec", "bitflags 2.13.1", "bytemuck", "cfg_aliases", @@ -16697,7 +14602,7 @@ checksum = "08763620e76fc980bca7bf84de82568614487a53172dd968d89187282eb87fa2" dependencies = [ "arrayvec", "bit-set 0.10.0", - "bit-vec 0.9.1", + "bit-vec", "bitflags 2.13.1", "bytemuck", "cfg_aliases", @@ -17808,38 +15713,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" -[[package]] -name = "xtensa-lx" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a564fffeb3cd773a524e8d8a5c66ca5e9739ea7450e36a3e6a54dd31f1e652f" -dependencies = [ - "critical-section", -] - -[[package]] -name = "xtensa-lx-rt" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520a8fb0121eb6868f4f5ff383e262dc863f9042496724e01673a98a9b7e6c2b" -dependencies = [ - "document-features", - "r0", - "xtensa-lx", - "xtensa-lx-rt-proc-macros", -] - -[[package]] -name = "xtensa-lx-rt-proc-macros" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a56a616147f5947ceb673790dd618d77b30e26e677f4a896df049d73059438" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "y4m" version = "0.8.0" @@ -18034,9 +15907,6 @@ name = "zeno" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" -dependencies = [ - "libm", -] [[package]] name = "zerocopy" diff --git a/examples/Cargo.toml b/examples/Cargo.toml index a8ed9fcd318..a3771738106 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -20,7 +20,6 @@ members = [ 'gstreamer-player', 'imagefilter/rust', 'maps', - 'mcu-board-support', 'memory', 'native-gestures', 'opengl_texture', @@ -40,16 +39,9 @@ members = [ 'servo', ] -# safe-ui keeps its own workspace because of its custom MCU `[profile]` -# (opt-level = "s"), which can only be set at a workspace root. -# -# mcu-embassy and uefi-demo keep their own workspaces because they cannot build -# for the host: mcu-embassy defaults to its `mcu` feature (cortex-m / embassy, -# ARM-only) and uefi-demo's dependencies are all `cfg(target_os = "uefi")`. -# Keeping them out of this workspace lets a plain `cargo build` (and rust-analyzer) -# work here without their embedded-only toolchains. They are built separately in -# CI against their respective targets. -exclude = ['safe-ui', 'mcu-embassy', 'uefi-demo'] +# These keep their own workspace (custom MCU profile, no host build, or +# conflicting board-HAL riscv-rt versions) and are built separately in CI. +exclude = ['safe-ui', 'mcu-board-support', 'mcu-embassy', 'uefi-demo'] resolver = "3" diff --git a/examples/mcu-board-support/Cargo.toml b/examples/mcu-board-support/Cargo.toml index 00f863b13df..ca1e57e133f 100644 --- a/examples/mcu-board-support/Cargo.toml +++ b/examples/mcu-board-support/Cargo.toml @@ -2,6 +2,24 @@ # SPDX-License-Identifier: MIT # cSpell: ignore framebuf sitronix xspi + +# Own workspace: the board HALs pulled in by the different board features +# (esp-hal, rp235x-hal, ...) require mutually incompatible versions of the +# `riscv-rt` link crate, so they cannot all be resolved together in the shared +# examples lock file. Building one board at a time (via the demos workspace) +# keeps only a single board's dependencies in the graph. It shares the +# repository `target/` directory via the root `.cargo/config.toml`. +[workspace] +resolver = "3" + +[workspace.package] +edition = "2024" + +[workspace.dependencies] +i-slint-core = { version = "=1.18.0", path = "../../internal/core", default-features = false } +i-slint-renderer-software = { version = "=1.18.0", path = "../../internal/renderers/software", default-features = false } +derive_more = { version = "2.0.0", default-features = false, features = ["deref", "deref_mut", "into", "from", "add", "add_assign", "mul", "not", "display"] } + [package] name = "mcu-board-support" version = "1.18.0" @@ -59,7 +77,7 @@ pico2-st7789 = [ pico2-touch-lcd-2-8 = [ "slint/unsafe-single-threaded", "dep:embassy-executor", - "embassy-executor/arch-cortex-m", + "embassy-executor/platform-cortex-m", "embassy-executor/executor-thread", "dep:embassy-time", "embassy-time/tick-hz-1_000_000", @@ -99,7 +117,6 @@ esp32-s3-box-3 = [ "slint/unsafe-single-threaded", "esp-hal/esp32s3", "esp-hal/unstable", # required for PSRAM support - "esp-hal/psram", "dep:static_cell", "embedded-hal", "embedded-hal-bus", @@ -116,7 +133,6 @@ esp32-s3-lcd-ev-board = [ "slint/unsafe-single-threaded", "esp-hal/esp32s3", "esp-hal/unstable", # required for PSRAM support - "esp-hal/psram", "embedded-hal", "embedded-hal-bus", "esp-alloc", @@ -131,7 +147,6 @@ esope-sld-c-w-s3 = [ "slint/unsafe-single-threaded", "esp-hal/esp32s3", "esp-hal/unstable", # required for PSRAM support - "esp-hal/psram", "embedded-hal", "embedded-hal-bus", "esp-alloc", @@ -144,7 +159,7 @@ esope-sld-c-w-s3 = [ "dep:embassy-executor", "dep:embassy-sync", "dep:embassy-time", - "dep:esp-hal-embassy", + "dep:esp-rtos", "dep:static_cell", "dep:embedded-graphics-framebuf", "dep:sitronix-touch", @@ -154,7 +169,6 @@ waveshare-esp32-s3-touch-amoled-1-8 = [ "slint/unsafe-single-threaded", "esp-hal/esp32s3", "esp-hal/unstable", # required for PSRAM support - "esp-hal/psram", "embedded-hal", "embedded-hal-bus", "esp-alloc", @@ -173,7 +187,6 @@ m5stack-cores3 = [ "slint/unsafe-single-threaded", "esp-hal/esp32s3", "esp-hal/unstable", # required for PSRAM support - "esp-hal/psram", "embedded-hal", "embedded-hal-bus", "esp-alloc", @@ -197,9 +210,8 @@ stm32u5g9j-dk2 = [ "embassy-stm32/chrono", "embassy-stm32/time", "embassy-stm32/defmt", - "embassy-executor/arch-cortex-m", + "embassy-executor/platform-cortex-m", "embassy-executor/executor-interrupt", - "embassy-executor/task-arena-size-32768", "embassy-executor/executor-thread", "slint/libm", "slint/unsafe-single-threaded", @@ -244,7 +256,7 @@ embedded-hal-nb = { version = "1.0.0", optional = true } embedded-hal-bus = { version = "0.3.0", optional = true } embedded-dma = { version = "0.2.0", optional = true } rp-pico = { version = "0.9.0", optional = true } -rp235x-hal = { version = "0.3.0", default-features = false, optional = true } +rp235x-hal = { version = "0.4.0", default-features = false, optional = true } fugit = { version = "0.3.6", optional = true } euclid = { version = "0.22", default-features = false, optional = true } @@ -254,15 +266,14 @@ embedded-time = { version = "0.12.0", optional = true } embedded-display-controller = { version = "0.2.0", optional = true } ft5336 = { version = "0.2", optional = true } -# Updated ESP dependencies to match working Embassy project versions -esp-hal = { version = "=1.0.0-rc.0", optional = true } -esp-alloc = { version = "0.8.0", optional = true } -esp-println = { version = "0.15.0", default-features = false, features = ["auto", "log-04"], optional = true } -esp-backtrace = { version = "0.17.0", optional = true, features = ["esp32s3", "exception-handler", "println"] } -static_cell = { version = "2.1.0", optional = true } -esp-bootloader-esp-idf = { version = "0.2.0", optional = true } +esp-hal = { version = "1.1.1", optional = true } +esp-alloc = { version = "0.10.0", optional = true } +esp-println = { version = "0.17.0", default-features = false, features = ["auto", "log-04"], optional = true } +esp-backtrace = { version = "0.19.0", optional = true, features = ["esp32s3", "println"] } +static_cell = { version = "2.1.1", optional = true } +esp-bootloader-esp-idf = { version = "0.5.0", optional = true } -mipidsi = { version = "0.9.0", optional = true } +mipidsi = { version = "0.10.0", optional = true } embedded-graphics-core = { version = "0.4", optional = true } embedded-graphics-framebuf = { version = "0.5.0", optional = true } eeprom24x = { version = "0.7.2", optional = true } @@ -272,13 +283,13 @@ defmt = { version = "1.0.0", optional = true } defmt-serial = { version = "0.11.0", optional = true } panic-probe = { version = "0.3.0", optional = true, features = ["print-defmt"] } -embassy-stm32 = { version = "0.2.0", optional = true } -embassy-rp = { version = "0.4.0", optional = true, features = ["rp235xa", "time-driver", "critical-section-impl", "binary-info", "defmt", "unstable-pac"] } -embassy-executor = { version = "0.7.0", optional = true, default-features = false } -embassy-time = { version = "0.4.0", optional = true } -embassy-futures = { version = "0.1.1", optional = true } -embassy-sync = { version = "0.7.0", optional = true } -esp-hal-embassy = { version = "0.9.0", optional = true, features = ["esp32s3"] } +embassy-stm32 = { version = "0.6.0", optional = true } +embassy-rp = { version = "0.10.0", optional = true, features = ["rp235xa", "time-driver", "critical-section-impl", "binary-info", "defmt", "unstable-pac"] } +embassy-executor = { version = "0.10.0", optional = true, default-features = false } +embassy-time = { version = "0.5.1", optional = true } +embassy-futures = { version = "0.1.2", optional = true } +embassy-sync = { version = "0.8.0", optional = true } +esp-rtos = { version = "0.3.0", optional = true, features = ["esp32s3", "embassy"] } gt911 = { version = "0.3.0", optional = true } sitronix-touch = { version = "0.0.1", optional = true } sh8601-rs = { version = "0.1.6", features = ["waveshare_18_amoled"], optional = true } diff --git a/examples/mcu-board-support/embassy.rs b/examples/mcu-board-support/embassy.rs index a5769abbb4b..339c1f0ce7b 100644 --- a/examples/mcu-board-support/embassy.rs +++ b/examples/mcu-board-support/embassy.rs @@ -69,7 +69,9 @@ impl slint::platform::Platform &'static EmbassyBackend, >(self) }; - spawner.must_spawn(main_loop_task(Box::pin(this.run_loop()))); + spawner.spawn( + main_loop_task(Box::pin(this.run_loop())).expect("Failed to spawn main loop task"), + ); }); } diff --git a/examples/mcu-board-support/esope_sld_c_w_s3/cargo-config.toml b/examples/mcu-board-support/esope_sld_c_w_s3/cargo-config.toml index ea94df3f551..22ee89a6e9f 100644 --- a/examples/mcu-board-support/esope_sld_c_w_s3/cargo-config.toml +++ b/examples/mcu-board-support/esope_sld_c_w_s3/cargo-config.toml @@ -5,7 +5,6 @@ [env] ESP_LOG = "INFO" -ESP_HAL_CONFIG_PSRAM_MODE = "octal" [target.xtensa-esp32s3-none-elf] runner = "espflash flash --monitor" diff --git a/examples/mcu-board-support/esope_sld_c_w_s3/esope_sld_c_w_s3.rs b/examples/mcu-board-support/esope_sld_c_w_s3/esope_sld_c_w_s3.rs index e0dfc1511f2..341dc843abd 100644 --- a/examples/mcu-board-support/esope_sld_c_w_s3/esope_sld_c_w_s3.rs +++ b/examples/mcu-board-support/esope_sld_c_w_s3/esope_sld_c_w_s3.rs @@ -37,17 +37,18 @@ use esp_hal::lcd_cam::{ type I2cDevice = RefCellDevice<'static, esp_hal::i2c::master::I2c<'static, esp_hal::Blocking>>; type TouchController = sitronix_touch::TouchIC; use esp_hal::Config as HalConfig; -use esp_hal::peripherals::Peripherals; -use esp_hal::system::{CpuControl, Stack}; +use esp_hal::interrupt::software::SoftwareInterruptControl; +use esp_hal::peripherals::{CPU_CTRL, TIMG0}; +use esp_hal::system::Stack; use esp_hal::time::{Instant, Rate}; -use esp_hal::timer::{AnyTimer, timg::TimerGroup}; +use esp_hal::timer::timg::TimerGroup; use esp_println::logger::init_logger_from_env; use log::{debug, error, info}; use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embassy_sync::signal::Signal; use embassy_time::{Duration, Ticker, Timer}; -use esp_hal_embassy::Executor; +use esp_rtos::embassy::Executor; use static_cell::StaticCell; // Static storage for I2C bus @@ -87,58 +88,198 @@ fn panic(info: &core::panic::PanicInfo) -> ! { loop {} } +/// Board hardware constructed in [`init`] and consumed by the event loop, which +/// starts the esp-rtos scheduler and hands the drivers to the embassy tasks. +struct BoardState { + dpi: Dpi<'static, esp_hal::Blocking>, + dma_tx: DmaTxBuf, + touch_controller: TouchController, + timer_group: TimerGroup<'static, TIMG0<'static>>, + sw_ints: SoftwareInterruptControl<'static>, + cpu_ctrl: CPU_CTRL<'static>, + // Kept alive for the lifetime of the event loop. + _panel_enable: Output<'static>, + _backlight: Output<'static>, + _touch_reset: Output<'static>, +} + struct EspBackend { window: RefCell>>, - peripherals: RefCell>, + state: RefCell>, } impl Default for EspBackend { fn default() -> Self { - EspBackend { window: RefCell::new(None), peripherals: RefCell::new(None) } + EspBackend { window: RefCell::new(None), state: RefCell::new(None) } } } -/// Initialize the heap and set the Slint platform. +/// Initialize the heap, the board peripherals and set the Slint platform. pub fn init() { - // Initialize peripherals first. let config = HalConfig::default().with_cpu_clock(CpuClock::max()); let peripherals = esp_hal::init(config); init_logger_from_env(); info!("=== ESP32-S3 ESoPe Board Initialization Starting ==="); - info!("Peripherals initialized"); - - // Log memory status before PSRAM init - let heap_start = esp_alloc::HEAP.used(); - info!("Heap usage before PSRAM init: {} bytes", heap_start); - // Initialize the PSRAM allocator. - esp_alloc::psram_allocator!(peripherals.PSRAM, esp_hal::psram); + // Register the PSRAM heap before anything allocates. PSRAM is consumed here; + // every other peripheral is used field by field below, so the whole + // `Peripherals` struct is never stored and no `steal` is needed. + esp_alloc::psram_allocator!( + peripherals.PSRAM, + esp_hal::psram, + esp_hal::psram::PsramConfig { + mode: esp_hal::psram::PsramMode::OctalSpi, + ..Default::default() + } + ); info!("PSRAM allocator initialized"); - // Log memory status after PSRAM init - let heap_after_psram = esp_alloc::HEAP.used(); - info!( - "Heap usage after PSRAM init: {} bytes (delta: +{})", - heap_after_psram, - heap_after_psram.saturating_sub(heap_start) - ); + // Read and set up the display configuration from EEPROM + let i2c = I2c::new(peripherals.I2C0, esp_hal::i2c::master::Config::default()) + .unwrap() + .with_sda(peripherals.GPIO1) + .with_scl(peripherals.GPIO41); + let i2c_bus = I2C_BUS.init(RefCell::new(i2c)); + let mut eeid = [0u8; 0x1c]; + let mut eeprom = Eeprom24x::new_24x01(RefCellDevice::new(i2c_bus), SlaveAddr::default()); + eeprom.read_data(0x00, &mut eeid).unwrap(); + let display_width = u16::from_be_bytes([eeid[8], eeid[9]]); + let display_height = u16::from_be_bytes([eeid[10], eeid[11]]); + info!("Display size from EEPROM: {}x{}", display_width, display_height); + + // Initialize touch controller using shared I2C bus + info!("Initializing touch controller..."); + let touch_device = RefCellDevice::new(i2c_bus); + let mut touch_controller = sitronix_touch::TouchIC::new_default(touch_device); + match touch_controller.init() { + Ok(_) => info!("Touch controller initialized successfully"), + Err(e) => { + error!("Failed to initialize touch controller: {:?}", e); + // Continue without touch support + } + } - // Create and install the Slint backend that owns the peripherals. - info!("Creating Slint platform backend..."); - let heap_before_backend = esp_alloc::HEAP.used(); + // Enable panel / backlight + let mut panel_enable = Output::new(peripherals.GPIO42, Level::Low, OutputConfig::default()); + panel_enable.set_high(); + + let mut backlight = Output::new(peripherals.GPIO39, Level::Low, OutputConfig::default()); + backlight.set_high(); + + let touch_reset = Output::new(peripherals.GPIO2, Level::High, OutputConfig::default()); + + // Allocate framebuffer in PSRAM with 64-byte alignment for DMA + const FRAME_BYTES: usize = LCD_BUFFER_SIZE * 2; + let layout = + Layout::from_size_align(FRAME_BYTES, 64).expect("Failed to create layout for framebuffer"); + let fb_ptr = unsafe { alloc(layout) }; + if fb_ptr.is_null() { + handle_alloc_error(layout); + } + + // Initialize the buffer with green color + let fb_slice = unsafe { core::slice::from_raw_parts_mut(fb_ptr, FRAME_BYTES) }; + let rgb565_slice = + unsafe { core::slice::from_raw_parts_mut(fb_ptr as *mut Rgb565, LCD_BUFFER_SIZE) }; + for pixel in rgb565_slice.iter_mut() { + *pixel = Rgb565::new(0, 31, 0); + } + + let psram_buf: &'static mut [u8] = fb_slice; + let buf_ptr = psram_buf.as_ptr() as usize; + assert!(buf_ptr % 64 == 0, "PSRAM buffer must be 64-byte aligned for DMA"); + + // Publish PSRAM buffer pointer and len for app core + unsafe { + PSRAM_BUF_PTR = psram_buf.as_mut_ptr(); + PSRAM_BUF_LEN = psram_buf.len(); + } + + // Configure DMA buffer with proper burst configuration + let dma_tx: DmaTxBuf = unsafe { + DmaTxBuf::new_with_config( + &mut *core::ptr::addr_of_mut!(TX_DESCRIPTORS), + psram_buf, + ExternalBurstConfig::Size64, + ) + .unwrap() + }; + + // Initialize LCD DPI interface + let lcd_cam = LcdCam::new(peripherals.LCD_CAM); + + // Read configuration from EEPROM + let pclk_hz = ((eeid[12] as u32) * 1_000_000 + (eeid[13] as u32) * 100_000).min(13_600_000); + let flags = eeid[25]; + let hsync_idle_low = (flags & 0x01) != 0; + let vsync_idle_low = (flags & 0x02) != 0; + let de_idle_high = (flags & 0x04) != 0; + let pclk_active_neg = (flags & 0x20) != 0; + + let dpi_config = DpiConfig::default() + .with_clock_mode(ClockMode { + polarity: if pclk_active_neg { Polarity::IdleHigh } else { Polarity::IdleLow }, + phase: if pclk_active_neg { Phase::ShiftHigh } else { Phase::ShiftLow }, + }) + .with_frequency(Rate::from_hz(pclk_hz)) + .with_format(Format { enable_2byte_mode: true, ..Default::default() }) + .with_timing(FrameTiming { + horizontal_active_width: 320, + horizontal_total_width: 320 + 4 + 43 + 79 + 8, + horizontal_blank_front_porch: 79 + 8, + vertical_active_height: 240, + vertical_total_height: 240 + 4 + 12 + 16, + vertical_blank_front_porch: 16, + hsync_width: 4, + vsync_width: 4, + hsync_position: 43 + 4, + }) + .with_vsync_idle_level(if vsync_idle_low { Level::Low } else { Level::High }) + .with_hsync_idle_level(if hsync_idle_low { Level::Low } else { Level::High }) + .with_de_idle_level(if de_idle_high { Level::High } else { Level::Low }) + .with_disable_black_region(false); + + let dpi = Dpi::new(lcd_cam.lcd, peripherals.DMA_CH2, dpi_config) + .unwrap() + .with_vsync(peripherals.GPIO6) + .with_hsync(peripherals.GPIO15) + .with_de(peripherals.GPIO5) + .with_pclk(peripherals.GPIO4) + // Blue bus + .with_data0(peripherals.GPIO9) + .with_data1(peripherals.GPIO17) + .with_data2(peripherals.GPIO46) + .with_data3(peripherals.GPIO16) + .with_data4(peripherals.GPIO7) + // Green bus + .with_data5(peripherals.GPIO8) + .with_data6(peripherals.GPIO21) + .with_data7(peripherals.GPIO3) + .with_data8(peripherals.GPIO11) + .with_data9(peripherals.GPIO18) + .with_data10(peripherals.GPIO10) + // Red bus + .with_data11(peripherals.GPIO14) + .with_data12(peripherals.GPIO20) + .with_data13(peripherals.GPIO13) + .with_data14(peripherals.GPIO19) + .with_data15(peripherals.GPIO12); slint::platform::set_platform(Box::new(EspBackend { window: RefCell::new(None), - peripherals: RefCell::new(Some(peripherals)), + state: RefCell::new(Some(BoardState { + dpi, + dma_tx, + touch_controller, + timer_group: TimerGroup::new(peripherals.TIMG0), + sw_ints: SoftwareInterruptControl::new(peripherals.SW_INTERRUPT), + cpu_ctrl: peripherals.CPU_CTRL, + _panel_enable: panel_enable, + _backlight: backlight, + _touch_reset: touch_reset, + })), })) .expect("Slint platform already initialized"); - - let heap_after_backend = esp_alloc::HEAP.used(); - info!( - "Slint backend created. Heap usage: {} bytes (delta: +{})", - heap_after_backend, - heap_after_backend.saturating_sub(heap_before_backend) - ); info!("=== Initialization Complete ==="); } @@ -183,198 +324,36 @@ impl slint::platform::Platform for EspBackend { fn run_event_loop(&self) -> Result<(), slint::PlatformError> { info!("=== Starting Main Event Loop ==="); - let heap_at_start = esp_alloc::HEAP.used(); - info!("Heap usage at event loop start: {} bytes", heap_at_start); - - let peripherals = self.peripherals.borrow_mut().take().expect("Peripherals already taken"); - - // Read and set up the display configuration from EEPROM - let i2c = I2c::new(peripherals.I2C0, esp_hal::i2c::master::Config::default()) - .unwrap() - .with_sda(peripherals.GPIO1) - .with_scl(peripherals.GPIO41); - let i2c_bus = I2C_BUS.init(RefCell::new(i2c)); - let mut eeid = [0u8; 0x1c]; - let mut eeprom = Eeprom24x::new_24x01(RefCellDevice::new(i2c_bus), SlaveAddr::default()); - eeprom.read_data(0x00, &mut eeid).unwrap(); - let display_width = u16::from_be_bytes([eeid[8], eeid[9]]); - let display_height = u16::from_be_bytes([eeid[10], eeid[11]]); - info!("Display size from EEPROM: {}x{}", display_width, display_height); - - // Initialize touch controller using shared I2C bus - info!("Initializing touch controller..."); - let touch_device = RefCellDevice::new(i2c_bus); - let mut touch_controller = sitronix_touch::TouchIC::new_default(touch_device); - match touch_controller.init() { - Ok(_) => info!("Touch controller initialized successfully"), - Err(e) => { - error!("Failed to initialize touch controller: {:?}", e); - // Continue without touch support - } - } - - // Enable panel / backlight - let mut panel_enable = Output::new(peripherals.GPIO42, Level::Low, OutputConfig::default()); - panel_enable.set_high(); - - let mut backlight = Output::new(peripherals.GPIO39, Level::Low, OutputConfig::default()); - backlight.set_high(); - - let mut _touch_reset = Output::new(peripherals.GPIO2, Level::High, OutputConfig::default()); - - info!("Display initialized, entering main loop..."); - - // Allocate framebuffer in PSRAM with 64-byte alignment for DMA - const FRAME_BYTES: usize = LCD_BUFFER_SIZE * 2; - - // Use aligned allocation for DMA requirements - let layout = Layout::from_size_align(FRAME_BYTES, 64) - .expect("Failed to create layout for framebuffer"); - let fb_ptr = unsafe { alloc(layout) }; - - if fb_ptr.is_null() { - handle_alloc_error(layout); - } - - // Initialize the buffer with green color - let fb_slice = unsafe { core::slice::from_raw_parts_mut(fb_ptr, FRAME_BYTES) }; - let rgb565_slice = - unsafe { core::slice::from_raw_parts_mut(fb_ptr as *mut Rgb565, LCD_BUFFER_SIZE) }; - - // Fill with green color (0, 31, 0) - for pixel in rgb565_slice.iter_mut() { - *pixel = Rgb565::new(0, 31, 0); - } - - let psram_buf: &'static mut [u8] = fb_slice; - - // Verify PSRAM buffer allocation and alignment - let buf_ptr = psram_buf.as_ptr() as usize; - info!("PSRAM buffer allocated at address: 0x{:08X}", buf_ptr); - info!("PSRAM buffer length: {}", psram_buf.len()); - info!("PSRAM buffer alignment modulo 64: {}", buf_ptr % 64); - assert!(buf_ptr % 64 == 0, "PSRAM buffer must be 64-byte aligned for DMA"); - // Publish PSRAM buffer pointer and len for app core - unsafe { - PSRAM_BUF_PTR = psram_buf.as_mut_ptr(); - PSRAM_BUF_LEN = psram_buf.len(); - } - - // Configure DMA buffer with proper burst configuration - info!("=== DMA Buffer Configuration ==="); - let heap_before_dma = esp_alloc::HEAP.used(); - info!("Heap usage before DMA buffer creation: {} bytes", heap_before_dma); - - let dma_tx: DmaTxBuf = unsafe { - DmaTxBuf::new_with_config( - &mut *core::ptr::addr_of_mut!(TX_DESCRIPTORS), - psram_buf, - ExternalBurstConfig::Size64, - ) - .unwrap() - }; - - let heap_after_dma = esp_alloc::HEAP.used(); - info!( - "Heap usage after DMA buffer creation: {} bytes (delta: +{})", - heap_after_dma, - heap_after_dma.saturating_sub(heap_before_dma) - ); - - // Initialize LCD DPI interface - let lcd_cam = LcdCam::new(peripherals.LCD_CAM); - - // Read configuration from EEPROM - let pclk_hz = ((eeid[12] as u32) * 1_000_000 + (eeid[13] as u32) * 100_000).min(13_600_000); - let flags = eeid[25]; - let hsync_idle_low = (flags & 0x01) != 0; - let vsync_idle_low = (flags & 0x02) != 0; - let de_idle_high = (flags & 0x04) != 0; - let pclk_active_neg = (flags & 0x20) != 0; - - // Log display configuration to match Conway's working values - info!("Display configuration:"); - info!(" Resolution: {}x{}", display_width, display_height); - info!(" PCLK: {} Hz", pclk_hz); - info!(" Flags: 0x{:02X}", flags); - info!(" HSYNC idle low: {}", hsync_idle_low); - info!(" VSYNC idle low: {}", vsync_idle_low); - info!(" DE idle high: {}", de_idle_high); - info!(" PCLK active neg: {}", pclk_active_neg); - - let dpi_config = DpiConfig::default() - .with_clock_mode(ClockMode { - polarity: if pclk_active_neg { Polarity::IdleHigh } else { Polarity::IdleLow }, - phase: if pclk_active_neg { Phase::ShiftHigh } else { Phase::ShiftLow }, - }) - .with_frequency(Rate::from_hz(pclk_hz)) - .with_format(Format { enable_2byte_mode: true, ..Default::default() }) - // Use exact timing values that work with Conway's implementation - .with_timing(FrameTiming { - horizontal_active_width: 320, - horizontal_total_width: 320 + 4 + 43 + 79 + 8, // =446 (Conway's working value) - horizontal_blank_front_porch: 79 + 8, // was 47, add 32px - vertical_active_height: 240, - vertical_total_height: 240 + 4 + 12 + 16, // increased blank front porch to 16 - vertical_blank_front_porch: 16, - hsync_width: 4, - vsync_width: 4, - hsync_position: 43 + 4, // (= back_porch + pulse = 47) Conway's working value - }) - .with_vsync_idle_level(if vsync_idle_low { Level::Low } else { Level::High }) - .with_hsync_idle_level(if hsync_idle_low { Level::Low } else { Level::High }) - .with_de_idle_level(if de_idle_high { Level::High } else { Level::Low }) - .with_disable_black_region(false); - - let dpi = Dpi::new(lcd_cam.lcd, peripherals.DMA_CH2, dpi_config) - .unwrap() - .with_vsync(peripherals.GPIO6) - .with_hsync(peripherals.GPIO15) - .with_de(peripherals.GPIO5) - .with_pclk(peripherals.GPIO4) - // Blue bus - .with_data0(peripherals.GPIO9) - .with_data1(peripherals.GPIO17) - .with_data2(peripherals.GPIO46) - .with_data3(peripherals.GPIO16) - .with_data4(peripherals.GPIO7) - // Green bus - .with_data5(peripherals.GPIO8) - .with_data6(peripherals.GPIO21) - .with_data7(peripherals.GPIO3) - .with_data8(peripherals.GPIO11) - .with_data9(peripherals.GPIO18) - .with_data10(peripherals.GPIO10) - // Red bus - .with_data11(peripherals.GPIO14) - .with_data12(peripherals.GPIO20) - .with_data13(peripherals.GPIO13) - .with_data14(peripherals.GPIO19) - .with_data15(peripherals.GPIO12); + let BoardState { + dpi, + dma_tx, + touch_controller, + timer_group, + sw_ints, + cpu_ctrl, + _panel_enable, + _backlight, + _touch_reset, + } = self.state.borrow_mut().take().expect("event loop already running"); // Tell Slint the window dimensions match the display resolution let size = PhysicalSize::new(LCD_H_RES.into(), LCD_V_RES.into()); self.window.borrow().as_ref().expect("Window adapter not created").set_size(size); - // Initialize Embassy with both timers for multicore support - info!("=== Embassy Initialization ==="); - let heap_before_embassy = esp_alloc::HEAP.used(); - info!("Heap usage before Embassy init: {} bytes", heap_before_embassy); - - let timg0 = TimerGroup::new(peripherals.TIMG0); - let timer0: AnyTimer = timg0.timer0.into(); - let timg1 = TimerGroup::new(peripherals.TIMG1); - let timer1: AnyTimer = timg1.timer0.into(); + // Start the esp-rtos scheduler that drives the embassy executors on both cores. + info!("=== esp-rtos Initialization ==="); + let heap_before_rtos = esp_alloc::HEAP.used(); + info!("Heap usage before esp-rtos init: {} bytes", heap_before_rtos); - info!("Initializing Embassy with dual timers for multicore support..."); - esp_hal_embassy::init([timer0, timer1]); + info!("Starting esp-rtos scheduler on the main core..."); + esp_rtos::start(timer_group.timer0, sw_ints.software_interrupt0); - let heap_after_embassy = esp_alloc::HEAP.used(); + let heap_after_rtos = esp_alloc::HEAP.used(); info!( - "Heap usage after Embassy init: {} bytes (delta: +{})", - heap_after_embassy, - heap_after_embassy.saturating_sub(heap_before_embassy) + "Heap usage after esp-rtos init: {} bytes (delta: +{})", + heap_after_rtos, + heap_after_rtos.saturating_sub(heap_before_rtos) ); // Signal that PSRAM is ready for the app core @@ -386,9 +365,10 @@ impl slint::platform::Platform for EspBackend { let heap_before_core = esp_alloc::HEAP.used(); info!("Heap usage before app core startup: {} bytes", heap_before_core); - let mut cpu_control = CpuControl::new(peripherals.CPU_CTRL); info!("Starting app core (Core 1) for DMA display task..."); - let _app_core = cpu_control.start_app_core( + esp_rtos::start_second_core( + cpu_ctrl, + sw_ints.software_interrupt1, unsafe { &mut *core::ptr::addr_of_mut!(APP_CORE_STACK) }, move || { info!("App core started! Initializing Embassy executor on Core 1..."); @@ -398,8 +378,11 @@ impl slint::platform::Platform for EspBackend { let executor = APP_EXECUTOR.init(Executor::new()); info!("App core executor initialized, spawning DMA task..."); - executor.run(|spawner| match spawner.spawn(dma_display_task(dpi, dma_tx)) { - Ok(_) => info!("DMA display task spawned successfully on Core 1"), + executor.run(|spawner| match dma_display_task(dpi, dma_tx) { + Ok(token) => { + spawner.spawn(token); + info!("DMA display task spawned successfully on Core 1"); + } Err(e) => error!("Failed to spawn DMA display task: {:?}", e), }); }, @@ -423,8 +406,11 @@ impl slint::platform::Platform for EspBackend { ); executor.run(|spawner| { - match spawner.spawn(slint_rendering_task(window, touch_controller)) { - Ok(_) => info!("Slint rendering task spawned successfully on Core 0"), + match slint_rendering_task(window, touch_controller) { + Ok(token) => { + spawner.spawn(token); + info!("Slint rendering task spawned successfully on Core 0"); + } Err(e) => error!("Failed to spawn Slint rendering task: {:?}", e), } diff --git a/examples/mcu-board-support/esp32_s3_box_3/cargo-config.toml b/examples/mcu-board-support/esp32_s3_box_3/cargo-config.toml index c9f57e74f87..23b611f54f7 100644 --- a/examples/mcu-board-support/esp32_s3_box_3/cargo-config.toml +++ b/examples/mcu-board-support/esp32_s3_box_3/cargo-config.toml @@ -3,7 +3,6 @@ [env] ESP_LOG = "INFO" -ESP_HAL_CONFIG_PSRAM_MODE = "octal" [target.xtensa-esp32s3-none-elf] runner = "espflash flash --monitor --flash-size 16mb" diff --git a/examples/mcu-board-support/esp32_s3_box_3/esp32_s3_box_3.rs b/examples/mcu-board-support/esp32_s3_box_3/esp32_s3_box_3.rs index 0e5ffc2624e..7be233eb45b 100644 --- a/examples/mcu-board-support/esp32_s3_box_3/esp32_s3_box_3.rs +++ b/examples/mcu-board-support/esp32_s3_box_3/esp32_s3_box_3.rs @@ -11,7 +11,6 @@ use esp_alloc as _; use esp_backtrace as _; use esp_hal::clock::CpuClock; use esp_hal::gpio::DriveMode; -use esp_hal::peripherals::Peripherals; use esp_hal::time::Instant; use esp_hal::{ delay::Delay, @@ -28,6 +27,7 @@ use log::{error, info, warn}; use mipidsi::options::{ColorOrder, Orientation, Rotation}; use slint::platform::PointerEventButton; use slint::platform::WindowEvent; +use static_cell::StaticCell; #[panic_handler] fn panic(info: &core::panic::PanicInfo) -> ! { @@ -37,9 +37,30 @@ fn panic(info: &core::panic::PanicInfo) -> ! { esp_bootloader_esp_idf::esp_app_desc!(); +type BoardI2c = I2c<'static, esp_hal::Blocking>; +type BoardDisplay = mipidsi::Display< + mipidsi::interface::SpiInterface< + 'static, + ExclusiveDevice, Output<'static>, Delay>, + Output<'static>, + >, + mipidsi::models::ILI9342CRgb565, + Output<'static>, +>; + +/// Board hardware constructed in [`init`] and consumed by the event loop. +struct BoardState { + buffer_provider: DrawBuffer<'static, BoardDisplay>, + touch: Gt911Blocking, + i2c: BoardI2c, + // Kept alive for the lifetime of the event loop. + _backlight: Output<'static>, + _int_pin: Output<'static>, +} + struct EspBackend { window: RefCell>>, - peripherals: RefCell>, + state: RefCell>, } impl slint::platform::Platform for EspBackend { @@ -64,155 +85,170 @@ impl slint::platform::Platform for EspBackend { impl Default for EspBackend { fn default() -> Self { - EspBackend { window: RefCell::new(None), peripherals: RefCell::new(None) } + EspBackend { window: RefCell::new(None), state: RefCell::new(None) } } } -/// Initializes the heap and sets the Slint platform. +/// Initializes the heap, the board peripherals and sets the Slint platform. pub fn init() { - // Initialize peripherals first. let peripherals = esp_hal::init(esp_hal::Config::default().with_cpu_clock(CpuClock::_240MHz)); init_logger_from_env(); info!("Peripherals initialized"); - // Initialize the PSRAM allocator. - esp_alloc::psram_allocator!(peripherals.PSRAM, esp_hal::psram); + // Register the PSRAM heap before anything allocates. PSRAM is consumed here; + // every other peripheral is used field by field below, so the whole + // `Peripherals` struct is never stored and no `steal` is needed. + esp_alloc::psram_allocator!( + peripherals.PSRAM, + esp_hal::psram, + esp_hal::psram::PsramConfig { + mode: esp_hal::psram::PsramMode::OctalSpi, + ..Default::default() + } + ); + + let mut delay = Delay::new(); + + // The following sequence is necessary to properly initialize touch on ESP32-S3-BOX-3 + // Based on issue from ESP-IDF: https://github.com/espressif/esp-bsp/issues/302#issuecomment-1971559689 + // Related code: https://github.com/espressif/esp-bsp/blob/30f0111a97b8fbe2efb7e58366fcf4d26b380f23/components/lcd_touch/esp_lcd_touch_gt911/esp_lcd_touch_gt911.c#L101-L133 + // --- Begin GT911 I²C Address Selection Sequence --- + const ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS: u8 = 0x14; + const ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS_BACKUP: u8 = 0x5D; + + // Our desired address. + const DESIRED_ADDR: u8 = 0x14; + // For desired address 0x14, assume the configuration’s reset level is false (i.e. 0 means active). + let reset_level = Level::Low; + + // Configure the INT pin (GPIO3) as output; starting high because of internal pull-up. + let mut int_pin = Output::new(peripherals.GPIO3, Level::High, OutputConfig::default()); + // Force INT low to prepare for address selection. + int_pin.set_low(); + delay.delay_ms(10); + int_pin.set_low(); + delay.delay_ms(1); + + // Configure the shared RESET pin (GPIO48) as output in open–drain mode. + let mut rst = Output::new( + peripherals.GPIO48, + Level::Low, // start in active state + OutputConfig::default().with_drive_mode(DriveMode::OpenDrain), + ); + + // Set RESET to the reset-active level (here, false). + rst.set_level(reset_level); + // (Ensure INT remains low.) + int_pin.set_low(); + delay.delay_ms(10); + + // Now, select the I²C address: + // For GT911 address 0x14, the desired INT level is low; otherwise, for backup (0x5D) it would be high. + let gpio_level = if DESIRED_ADDR == ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS { + Level::Low + } else if DESIRED_ADDR == ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS_BACKUP { + Level::High + } else { + Level::Low + }; + int_pin.set_level(gpio_level); + delay.delay_ms(1); + + // Toggle the RESET pin: + // Release RESET by setting it to the opposite of the reset level. + rst.set_level(!reset_level); + delay.delay_ms(10); + delay.delay_ms(50); + // --- End GT911 I²C Address Selection Sequence --- + + // --- Begin SPI and Display Initialization --- + let spi = Spi::::new( + peripherals.SPI2, + SpiConfig::default().with_frequency(Rate::from_mhz(40)).with_mode(SpiMode::_0), + ) + .unwrap() + .with_sck(peripherals.GPIO7) + .with_mosi(peripherals.GPIO6); + + // Display control pins. + let dc = Output::new(peripherals.GPIO4, Level::Low, OutputConfig::default()); + let cs = Output::new(peripherals.GPIO5, Level::Low, OutputConfig::default()); + + // Wrap SPI into a bus. The interface buffer must outlive the display, so it + // lives in a `StaticCell`. + let spi_device = ExclusiveDevice::new(spi, cs, Delay::new()).unwrap(); + static SPI_BUFFER: StaticCell<[u8; 512]> = StaticCell::new(); + let di = mipidsi::interface::SpiInterface::new(spi_device, dc, SPI_BUFFER.init([0u8; 512])); + + // Initialize the display. + let display = mipidsi::Builder::new(mipidsi::models::ILI9342CRgb565, di) + .reset_pin(rst) + .orientation(Orientation::new().rotate(Rotation::Deg180)) + .color_order(ColorOrder::Bgr) + .init(&mut delay) + .unwrap(); + + // Set up the backlight pin. + let mut backlight = Output::new(peripherals.GPIO47, Level::Low, OutputConfig::default()); + backlight.set_high(); + // --- End Display Initialization --- + + let mut i2c = I2c::new( + peripherals.I2C0, + esp_hal::i2c::master::Config::default().with_frequency(Rate::from_khz(400)), + ) + .unwrap() + .with_sda(peripherals.GPIO8) + .with_scl(peripherals.GPIO18); + + // Initialize the touch driver. + let mut touch = Gt911Blocking::new(ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS); + match touch.init(&mut i2c) { + Ok(_) => info!("Touch initialized"), + Err(e) => { + warn!("Touch initialization failed: {:?}", e); + let touch_fallback = Gt911Blocking::new(ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS_BACKUP); + match touch_fallback.init(&mut i2c) { + Ok(_) => { + info!("Touch initialized with backup address"); + touch = touch_fallback; + } + Err(e) => error!("Touch initialization failed with backup address: {:?}", e), + } + } + } + + // Prepare a draw buffer for the Slint software renderer. The line buffer must + // outlive the platform, so it lives in a `StaticCell`. + static LINE_BUFFER: StaticCell<[slint::platform::software_renderer::Rgb565Pixel; 320]> = + StaticCell::new(); + let buffer_provider = DrawBuffer { + display, + buffer: LINE_BUFFER.init([slint::platform::software_renderer::Rgb565Pixel(0); 320]), + }; - // Create an EspBackend that now owns the peripherals. slint::platform::set_platform(Box::new(EspBackend { - peripherals: RefCell::new(Some(peripherals)), window: RefCell::new(None), + state: RefCell::new(Some(BoardState { + buffer_provider, + touch, + i2c, + _backlight: backlight, + _int_pin: int_pin, + })), })) .expect("backend already initialized"); } impl EspBackend { fn run_event_loop(&self) -> Result<(), slint::PlatformError> { - // Take and configure peripherals. - let peripherals = self.peripherals.borrow_mut().take().expect("Peripherals already taken"); - let mut delay = Delay::new(); - - // The following sequence is necessary to properly initialize touch on ESP32-S3-BOX-3 - // Based on issue from ESP-IDF: https://github.com/espressif/esp-bsp/issues/302#issuecomment-1971559689 - // Related code: https://github.com/espressif/esp-bsp/blob/30f0111a97b8fbe2efb7e58366fcf4d26b380f23/components/lcd_touch/esp_lcd_touch_gt911/esp_lcd_touch_gt911.c#L101-L133 - // --- Begin GT911 I²C Address Selection Sequence --- - // Define constants for the two possible addresses. - const ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS: u8 = 0x14; - const ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS_BACKUP: u8 = 0x5D; - - // Our desired address. - const DESIRED_ADDR: u8 = 0x14; - // For desired address 0x14, assume the configuration’s reset level is false (i.e. 0 means active). - let reset_level = Level::Low; - - // Configure the INT pin (GPIO3) as output; starting high because of internal pull-up. - let mut int_pin = Output::new(peripherals.GPIO3, Level::High, OutputConfig::default()); - // Force INT low to prepare for address selection. - int_pin.set_low(); - delay.delay_ms(10); - int_pin.set_low(); - delay.delay_ms(1); - - // Configure the shared RESET pin (GPIO48) as output in open–drain mode. - let mut rst = Output::new( - peripherals.GPIO48, - Level::Low, // start in active state - OutputConfig::default().with_drive_mode(DriveMode::OpenDrain), - ); - - // Set RESET to the reset-active level (here, false). - rst.set_level(reset_level); - // (Ensure INT remains low.) - int_pin.set_low(); - delay.delay_ms(10); - - // Now, select the I²C address: - // For GT911 address 0x14, the desired INT level is low; otherwise, for backup (0x5D) it would be high. - let gpio_level = if DESIRED_ADDR == ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS { - Level::Low - } else if DESIRED_ADDR == ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS_BACKUP { - Level::High - } else { - Level::Low - }; - int_pin.set_level(gpio_level); - delay.delay_ms(1); - - // Toggle the RESET pin: - // Release RESET by setting it to the opposite of the reset level. - rst.set_level(!reset_level); - delay.delay_ms(10); - delay.delay_ms(50); - // --- End GT911 I²C Address Selection Sequence --- - - // --- Begin SPI and Display Initialization --- - let spi = Spi::::new( - peripherals.SPI2, - SpiConfig::default().with_frequency(Rate::from_mhz(40)).with_mode(SpiMode::_0), - ) - .unwrap() - .with_sck(peripherals.GPIO7) - .with_mosi(peripherals.GPIO6); - - // Display control pins. - let dc = Output::new(peripherals.GPIO4, Level::Low, OutputConfig::default()); - let cs = Output::new(peripherals.GPIO5, Level::Low, OutputConfig::default()); - - // Wrap SPI into a bus. - let spi_delay = Delay::new(); - let spi_device = ExclusiveDevice::new(spi, cs, spi_delay).unwrap(); - let mut buffer = [0u8; 512]; - let di = mipidsi::interface::SpiInterface::new(spi_device, dc, &mut buffer); - - // Initialize the display. - let display = mipidsi::Builder::new(mipidsi::models::ILI9486Rgb565, di) - .reset_pin(rst) - .orientation(Orientation::new().rotate(Rotation::Deg180)) - .color_order(ColorOrder::Bgr) - .init(&mut delay) - .unwrap(); - - // Set up the backlight pin. - let mut backlight = Output::new(peripherals.GPIO47, Level::Low, OutputConfig::default()); - backlight.set_high(); + let BoardState { mut buffer_provider, touch, mut i2c, _backlight, _int_pin } = + self.state.borrow_mut().take().expect("event loop already running"); // Update the Slint window size from the display. let size = slint::PhysicalSize::new(320, 240); self.window.borrow().as_ref().unwrap().set_size(size); - // --- End Display Initialization --- - - let mut i2c = I2c::new( - peripherals.I2C0, - esp_hal::i2c::master::Config::default().with_frequency(Rate::from_khz(400)), - ) - .unwrap() - .with_sda(peripherals.GPIO8) - .with_scl(peripherals.GPIO18); - - // Initialize the touch driver. - let mut touch = Gt911Blocking::new(ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS); - match touch.init(&mut i2c) { - Ok(_) => info!("Touch initialized"), - Err(e) => { - warn!("Touch initialization failed: {:?}", e); - let touch_fallback = Gt911Blocking::new(ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS_BACKUP); - match touch_fallback.init(&mut i2c) { - Ok(_) => { - info!("Touch initialized with backup address"); - touch = touch_fallback; - } - Err(e) => error!("Touch initialization failed with backup address: {:?}", e), - } - } - } - - // Prepare a draw buffer for the Slint software renderer. - let mut buffer_provider = DrawBuffer { - display, - buffer: &mut [slint::platform::software_renderer::Rgb565Pixel(0); 320], - }; - // Variable to track the last touch position. let mut last_touch = None; @@ -287,7 +323,7 @@ impl< DI: mipidsi::interface::Interface, RST: OutputPin, > slint::platform::software_renderer::LineBufferProvider - for &mut DrawBuffer<'_, mipidsi::Display> + for &mut DrawBuffer<'_, mipidsi::Display> { type TargetPixel = slint::platform::software_renderer::Rgb565Pixel; diff --git a/examples/mcu-board-support/esp32_s3_lcd_ev_board/cargo-config.toml b/examples/mcu-board-support/esp32_s3_lcd_ev_board/cargo-config.toml index 41d9aee4c0d..2d61f178bae 100644 --- a/examples/mcu-board-support/esp32_s3_lcd_ev_board/cargo-config.toml +++ b/examples/mcu-board-support/esp32_s3_lcd_ev_board/cargo-config.toml @@ -3,7 +3,6 @@ [env] ESP_LOG = "INFO" -ESP_HAL_CONFIG_PSRAM_MODE = "octal" [target.xtensa-esp32s3-none-elf] runner = "espflash flash --monitor" diff --git a/examples/mcu-board-support/esp32_s3_lcd_ev_board/esp32_s3_lcd_ev_board.rs b/examples/mcu-board-support/esp32_s3_lcd_ev_board/esp32_s3_lcd_ev_board.rs index ec34440f658..9898233918b 100644 --- a/examples/mcu-board-support/esp32_s3_lcd_ev_board/esp32_s3_lcd_ev_board.rs +++ b/examples/mcu-board-support/esp32_s3_lcd_ev_board/esp32_s3_lcd_ev_board.rs @@ -44,7 +44,6 @@ where use alloc::boxed::Box; use esp_hal::dma::{CHUNK_SIZE, DmaDescriptor, DmaTxBuf}; use esp_hal::i2c; -use esp_hal::peripherals::Peripherals; use slint::LogicalPosition; use slint::PhysicalPosition; use slint::PhysicalSize; @@ -75,7 +74,8 @@ use log::{error, info}; // === Display constants === const LCD_H_RES: u16 = 480; const LCD_V_RES: u16 = 480; -const FRAME_BYTES: usize = (LCD_H_RES as usize * LCD_V_RES as usize) * 2; +const FRAME_PIXELS: usize = LCD_H_RES as usize * LCD_V_RES as usize; +const FRAME_BYTES: usize = FRAME_PIXELS * 2; const NUM_DMA_DESC: usize = (FRAME_BYTES + CHUNK_SIZE - 1) / CHUNK_SIZE; // Place DMA descriptors in DMA-capable RAM @@ -88,31 +88,205 @@ fn panic(_info: &core::panic::PanicInfo) -> ! { loop {} } +/// Board hardware constructed in [`init`] and consumed by the event loop. +struct BoardState { + dpi: Dpi<'static, Blocking>, + dma_tx: DmaTxBuf, + pixel_box: Box<[Rgb565Pixel; FRAME_PIXELS]>, + touch: Ft5x06>, +} + struct EspBackend { window: RefCell>>, - peripherals: RefCell>, + state: RefCell>, } impl Default for EspBackend { fn default() -> Self { - EspBackend { window: RefCell::new(None), peripherals: RefCell::new(None) } + EspBackend { window: RefCell::new(None), state: RefCell::new(None) } } } -/// Initialize the heap and set the Slint platform. +/// Initialize the heap, the board peripherals and set the Slint platform. pub fn init() { - // Initialize peripherals first. let peripherals = esp_hal::init(HalConfig::default().with_cpu_clock(_240MHz)); init_logger_from_env(); info!("Peripherals initialized"); - // Initialize the PSRAM allocator. - esp_alloc::psram_allocator!(peripherals.PSRAM, esp_hal::psram); + // Register the PSRAM heap before anything allocates. PSRAM is consumed here; + // every other peripheral is used field by field below, so the whole + // `Peripherals` struct is never stored and no `steal` is needed. + esp_alloc::psram_allocator!( + peripherals.PSRAM, + esp_hal::psram, + esp_hal::psram::PsramConfig { + mode: esp_hal::psram::PsramMode::OctalSpi, + ..Default::default() + } + ); + + // Setup I2C for the TCA9554 IO expander + let i2c = I2c::new( + peripherals.I2C0, + i2c::master::Config::default().with_frequency(Rate::from_khz(400)), + ) + .unwrap() + .with_sda(peripherals.GPIO47) + .with_scl(peripherals.GPIO48); + + // Initialize the IO expander for controlling the display + let mut expander = Tca9554::new(i2c); + expander.write_output_reg(0b1111_0011).unwrap(); + expander.write_direction_reg(0b1111_0001).unwrap(); + + let delay = Delay::new(); + info!("Initializing display..."); + + // Set up the write_byte function for sending commands to the display + let mut write_byte = |b: u8, is_cmd: bool| { + const SCS_BIT: u8 = 0b0000_0010; + const SCL_BIT: u8 = 0b0000_0100; + const SDA_BIT: u8 = 0b0000_1000; + + let mut output = 0b1111_0001 & !SCS_BIT; + expander.write_output_reg(output).unwrap(); + + for bit in core::iter::once(!is_cmd).chain((0..8).map(|i| (b >> i) & 0b1 != 0).rev()) { + let prev = output; + if bit { + output |= SDA_BIT; + } else { + output &= !SDA_BIT; + } + if prev != output { + expander.write_output_reg(output).unwrap(); + } + + output &= !SCL_BIT; + expander.write_output_reg(output).unwrap(); + + output |= SCL_BIT; + expander.write_output_reg(output).unwrap(); + } + + output &= !SCL_BIT; + expander.write_output_reg(output).unwrap(); + + output &= !SDA_BIT; + expander.write_output_reg(output).unwrap(); + + output |= SCS_BIT; + expander.write_output_reg(output).unwrap(); + }; + + // VSYNC must be high during initialization + let mut vsync_pin = peripherals.GPIO3; + let vsync_guard = Output::new(vsync_pin.reborrow(), Level::High, OutputConfig::default()); + + // Initialize the display by sending the initialization commands + for &init in INIT_CMDS.iter() { + match init { + InitCmd::Cmd(cmd, args) => { + write_byte(cmd, true); + for &arg in args { + write_byte(arg, false); + } + } + InitCmd::Delay(ms) => { + delay.delay_millis(ms as _); + } + } + } + drop(vsync_guard); + + // Set up DMA channel for LCD + let tx_channel = peripherals.DMA_CH2; + let lcd_cam = LcdCam::new(peripherals.LCD_CAM); + + // Configure the RGB display + let config = DpiConfig::default() + .with_clock_mode(ClockMode { polarity: Polarity::IdleLow, phase: Phase::ShiftLow }) + .with_frequency(Rate::from_mhz(10)) + .with_format(Format { enable_2byte_mode: true, ..Default::default() }) + .with_timing(FrameTiming { + horizontal_active_width: LCD_H_RES as usize, + vertical_active_height: LCD_V_RES as usize, + horizontal_total_width: 600, + horizontal_blank_front_porch: 80, + vertical_total_height: 600, + vertical_blank_front_porch: 80, + hsync_width: 10, + vsync_width: 4, + hsync_position: 10, + }) + .with_vsync_idle_level(Level::High) + .with_hsync_idle_level(Level::High) + .with_de_idle_level(Level::Low) + .with_disable_black_region(false); + + let mut dpi = Dpi::new(lcd_cam.lcd, tx_channel, config) + .unwrap() + .with_vsync(vsync_pin) + .with_hsync(peripherals.GPIO46) + .with_de(peripherals.GPIO17) + .with_pclk(peripherals.GPIO9) + .with_data0(peripherals.GPIO10) + .with_data1(peripherals.GPIO11) + .with_data2(peripherals.GPIO12) + .with_data3(peripherals.GPIO13) + .with_data4(peripherals.GPIO14) + .with_data5(peripherals.GPIO21) + .with_data6(peripherals.GPIO8) + .with_data7(peripherals.GPIO18) + .with_data8(peripherals.GPIO45) + .with_data9(peripherals.GPIO38) + .with_data10(peripherals.GPIO39) + .with_data11(peripherals.GPIO40) + .with_data12(peripherals.GPIO41) + .with_data13(peripherals.GPIO42) + .with_data14(peripherals.GPIO2) + .with_data15(peripherals.GPIO1); + + info!("Display initialized"); + + // Allocate a PSRAM-backed DMA buffer for the frame + let buf_box: Box<[u8; FRAME_BYTES]> = Box::new([0; FRAME_BYTES]); + let psram_buf: &'static mut [u8] = Box::leak(buf_box); + let mut dma_tx: DmaTxBuf = unsafe { + let descriptors = &mut *core::ptr::addr_of_mut!(TX_DESCRIPTORS); + DmaTxBuf::new(descriptors, psram_buf).unwrap() + }; + let pixel_box: Box<[Rgb565Pixel; FRAME_PIXELS]> = Box::new([Rgb565Pixel(0); FRAME_PIXELS]); + // Initialize the DMA buffer from the (blank) pixel buffer. + { + let dst = dma_tx.as_mut_slice(); + for (i, px) in pixel_box.iter().enumerate() { + let [lo, hi] = px.0.to_le_bytes(); + dst[2 * i] = lo; + dst[2 * i + 1] = hi; + } + } + // Initial flush of the screen buffer + match dpi.send(false, dma_tx) { + Ok(xfer) => { + let (_res, dpi2, tx2) = xfer.wait(); + dpi = dpi2; + dma_tx = tx2; + } + Err((e, dpi2, tx2)) => { + error!("Initial DMA send error: {:?}", e); + dpi = dpi2; + dma_tx = tx2; + } + } + + // Initialize FT5x06 touch controller. Reclaim the I2C bus from the expander. + let i2c_bus = expander.into_i2c(); + let touch = Ft5x06::new(i2c_bus, 0x38); - // Create and install the Slint backend that owns the peripherals. slint::platform::set_platform(Box::new(EspBackend { window: RefCell::new(None), - peripherals: RefCell::new(Some(peripherals)), + state: RefCell::new(Some(BoardState { dpi, dma_tx, pixel_box, touch })), })) .expect("Slint platform already initialized"); } @@ -133,176 +307,14 @@ impl slint::platform::Platform for EspBackend { } fn run_event_loop(&self) -> Result<(), slint::PlatformError> { - // Reinitialize peripherals, PSRAM, and logger - let peripherals = self.peripherals.borrow_mut().take().expect("Peripherals already taken"); - - // Setup I2C for the TCA9554 IO expander - let i2c = I2c::new( - peripherals.I2C0, - i2c::master::Config::default().with_frequency(Rate::from_khz(400)), - ) - .unwrap() - .with_sda(peripherals.GPIO47) - .with_scl(peripherals.GPIO48); - - // Initialize the IO expander for controlling the display - let mut expander = Tca9554::new(i2c); - expander.write_output_reg(0b1111_0011).unwrap(); - expander.write_direction_reg(0b1111_0001).unwrap(); - - let delay = Delay::new(); - info!("Initializing display..."); - - // Set up the write_byte function for sending commands to the display - let mut write_byte = |b: u8, is_cmd: bool| { - const SCS_BIT: u8 = 0b0000_0010; - const SCL_BIT: u8 = 0b0000_0100; - const SDA_BIT: u8 = 0b0000_1000; - - let mut output = 0b1111_0001 & !SCS_BIT; - expander.write_output_reg(output).unwrap(); - - for bit in core::iter::once(!is_cmd).chain((0..8).map(|i| (b >> i) & 0b1 != 0).rev()) { - let prev = output; - if bit { - output |= SDA_BIT; - } else { - output &= !SDA_BIT; - } - if prev != output { - expander.write_output_reg(output).unwrap(); - } - - output &= !SCL_BIT; - expander.write_output_reg(output).unwrap(); - - output |= SCL_BIT; - expander.write_output_reg(output).unwrap(); - } - - output &= !SCL_BIT; - expander.write_output_reg(output).unwrap(); - - output &= !SDA_BIT; - expander.write_output_reg(output).unwrap(); - - output |= SCS_BIT; - expander.write_output_reg(output).unwrap(); - }; - - // VSYNC must be high during initialization - let mut vsync_pin = peripherals.GPIO3; - let vsync_guard = Output::new(vsync_pin.reborrow(), Level::High, OutputConfig::default()); - - // Initialize the display by sending the initialization commands - for &init in INIT_CMDS.iter() { - match init { - InitCmd::Cmd(cmd, args) => { - write_byte(cmd, true); - for &arg in args { - write_byte(arg, false); - } - } - InitCmd::Delay(ms) => { - delay.delay_millis(ms as _); - } - } - } - drop(vsync_guard); - - // Set up DMA channel for LCD - let tx_channel = peripherals.DMA_CH2; - let lcd_cam = LcdCam::new(peripherals.LCD_CAM); - - // Configure the RGB display - let config = DpiConfig::default() - .with_clock_mode(ClockMode { polarity: Polarity::IdleLow, phase: Phase::ShiftLow }) - .with_frequency(Rate::from_mhz(10)) - .with_format(Format { enable_2byte_mode: true, ..Default::default() }) - .with_timing(FrameTiming { - horizontal_active_width: LCD_H_RES as usize, - vertical_active_height: LCD_V_RES as usize, - horizontal_total_width: 600, - horizontal_blank_front_porch: 80, - vertical_total_height: 600, - vertical_blank_front_porch: 80, - hsync_width: 10, - vsync_width: 4, - hsync_position: 10, - }) - .with_vsync_idle_level(Level::High) - .with_hsync_idle_level(Level::High) - .with_de_idle_level(Level::Low) - .with_disable_black_region(false); - - let mut dpi = Dpi::new(lcd_cam.lcd, tx_channel, config) - .unwrap() - .with_vsync(vsync_pin.reborrow()) - .with_hsync(peripherals.GPIO46) - .with_de(peripherals.GPIO17) - .with_pclk(peripherals.GPIO9) - .with_data0(peripherals.GPIO10) - .with_data1(peripherals.GPIO11) - .with_data2(peripherals.GPIO12) - .with_data3(peripherals.GPIO13) - .with_data4(peripherals.GPIO14) - .with_data5(peripherals.GPIO21) - .with_data6(peripherals.GPIO8) - .with_data7(peripherals.GPIO18) - .with_data8(peripherals.GPIO45) - .with_data9(peripherals.GPIO38) - .with_data10(peripherals.GPIO39) - .with_data11(peripherals.GPIO40) - .with_data12(peripherals.GPIO41) - .with_data13(peripherals.GPIO42) - .with_data14(peripherals.GPIO2) - .with_data15(peripherals.GPIO1); - - info!("Display initialized, entering main loop..."); - - const FRAME_PIXELS: usize = (LCD_H_RES as usize) * (LCD_V_RES as usize); - const FRAME_BYTES: usize = FRAME_PIXELS * 2; - - // Allocate a PSRAM-backed DMA buffer for the frame - let buf_box: Box<[u8; FRAME_BYTES]> = Box::new([0; FRAME_BYTES]); - let psram_buf: &'static mut [u8] = Box::leak(buf_box); - let mut dma_tx: DmaTxBuf = unsafe { - let descriptors = &mut *core::ptr::addr_of_mut!(TX_DESCRIPTORS); - DmaTxBuf::new(descriptors, psram_buf).unwrap() - }; - let mut pixel_box: Box<[Rgb565Pixel; FRAME_PIXELS]> = - Box::new([Rgb565Pixel(0); FRAME_PIXELS]); + let BoardState { mut dpi, mut dma_tx, mut pixel_box, mut touch } = + self.state.borrow_mut().take().expect("event loop already running"); let pixel_buf: &mut [Rgb565Pixel] = &mut *pixel_box; - // Initialize pixel buffer and DMA buffer - // The pixel buffer will be filled by Slint's renderer in the main loop - let dst = dma_tx.as_mut_slice(); - for (i, px) in pixel_buf.iter().enumerate() { - let [lo, hi] = px.0.to_le_bytes(); - dst[2 * i] = lo; - dst[2 * i + 1] = hi; - } - // Initial flush of the screen buffer - match dpi.send(false, dma_tx) { - Ok(xfer) => { - let (_res, dpi2, tx2) = xfer.wait(); - dpi = dpi2; - dma_tx = tx2; - } - Err((e, dpi2, tx2)) => { - error!("Initial DMA send error: {:?}", e); - dpi = dpi2; - dma_tx = tx2; - } - } // Tell Slint the window dimensions match the DPI display resolution let size = PhysicalSize::new(LCD_H_RES.into(), LCD_V_RES.into()); self.window.borrow().as_ref().expect("Window adapter not created").set_size(size); - // Initialize FT5x06 touch controller on I2C1 (example pins) - // Reclaim the I2C bus from the expander for FT5x06 - let i2c_bus = expander.into_i2c(); - let mut touch = Ft5x06::new(i2c_bus, 0x38); let mut last_touch: Option = None; loop { diff --git a/examples/mcu-board-support/m5stack_cores3/cargo-config.toml b/examples/mcu-board-support/m5stack_cores3/cargo-config.toml index bf94ec53e4f..2d61f178bae 100644 --- a/examples/mcu-board-support/m5stack_cores3/cargo-config.toml +++ b/examples/mcu-board-support/m5stack_cores3/cargo-config.toml @@ -3,7 +3,6 @@ [env] ESP_LOG = "INFO" -ESP_HAL_CONFIG_PSRAM_MODE = "quad" [target.xtensa-esp32s3-none-elf] runner = "espflash flash --monitor" diff --git a/examples/mcu-board-support/m5stack_cores3/m5stack_cores3.rs b/examples/mcu-board-support/m5stack_cores3/m5stack_cores3.rs index 191d1a12035..8f410a95ede 100644 --- a/examples/mcu-board-support/m5stack_cores3/m5stack_cores3.rs +++ b/examples/mcu-board-support/m5stack_cores3/m5stack_cores3.rs @@ -13,7 +13,6 @@ use alloc::boxed::Box; use alloc::rc::Rc; use core::cell::RefCell; use embedded_graphics_core::draw_target::DrawTarget; -use embedded_graphics_core::geometry::OriginDimensions; use embedded_graphics_core::pixelcolor::RgbColor; use embedded_hal::delay::DelayNs; use embedded_hal::digital::OutputPin; @@ -21,7 +20,6 @@ use embedded_hal_bus::spi::ExclusiveDevice; use esp_alloc as _; use esp_backtrace as _; use esp_hal::clock::CpuClock; -use esp_hal::peripherals::Peripherals; use esp_hal::time::Instant; use esp_hal::{ delay::Delay, @@ -98,9 +96,29 @@ where } } +type SharedI2c = RefCellDevice<'static, I2c<'static, esp_hal::Blocking>>; +type BoardDisplay = mipidsi::Display< + mipidsi::interface::SpiInterface< + 'static, + ExclusiveDevice, Output<'static>, Delay>, + Output<'static>, + >, + mipidsi::models::ILI9342CRgb565, + Output<'static>, +>; +type BoardTouch = Ft3x68Driver>; + +/// Board hardware constructed in [`init`] and consumed by the event loop. +struct BoardState { + buffer_provider: DrawBuffer<'static, BoardDisplay>, + touch_driver: BoardTouch, + // Kept alive for the lifetime of the event loop. + _backlight: Output<'static>, +} + struct EspBackend { window: RefCell>>, - peripherals: RefCell>, + state: RefCell>, } impl slint::platform::Platform for EspBackend { @@ -125,24 +143,136 @@ impl slint::platform::Platform for EspBackend { impl Default for EspBackend { fn default() -> Self { - EspBackend { window: RefCell::new(None), peripherals: RefCell::new(None) } + EspBackend { window: RefCell::new(None), state: RefCell::new(None) } } } -/// Initializes the heap and sets the Slint platform. +/// Initializes the heap, the board peripherals and sets the Slint platform. pub fn init() { - // Initialize peripherals first. let peripherals = esp_hal::init(esp_hal::Config::default().with_cpu_clock(CpuClock::_240MHz)); init_logger_from_env(); info!("Peripherals initialized"); - // Initialize the PSRAM allocator. - esp_alloc::psram_allocator!(peripherals.PSRAM, esp_hal::psram); + // Register the PSRAM heap before anything allocates. PSRAM is consumed here; + // every other peripheral is used field by field below, so the whole + // `Peripherals` struct is never stored and no `steal` is needed. + esp_alloc::psram_allocator!( + peripherals.PSRAM, + esp_hal::psram, + esp_hal::psram::PsramConfig { + mode: esp_hal::psram::PsramMode::QuadSpi, + ..Default::default() + } + ); + + let mut delay = Delay::new(); + + // --- Initialize I2C bus for all I2C devices (AXP2101, AW9523, touch controller) --- + let power_i2c = I2c::new( + peripherals.I2C0, + esp_hal::i2c::master::Config::default().with_frequency(Rate::from_khz(400)), + ) + .unwrap() + .with_sda(peripherals.GPIO12) // AXP2101 SDA + .with_scl(peripherals.GPIO11); // AXP2101 SCL + + // --- Use StaticCell to create a shared I2C bus for all I2C devices --- + static I2C_BUS: StaticCell>> = StaticCell::new(); + let i2c_bus = I2C_BUS.init(RefCell::new(power_i2c)); + + // --- Begin AXP2101 Power Management Initialization --- + // Initialize power management using shared I2C bus - critical for M5Stack CoreS3 + init_axp2101_power(RefCellDevice::new(i2c_bus)) + .expect("Failed to initialize AXP2101 power management"); + info!("Power management initialized successfully"); + + // Small delay to let power rails stabilize + delay.delay_ms(100); + + // --- Begin AW9523 GPIO Expander Initialization --- + // Initialize AW9523 GPIO expander using M5Stack CoreS3 specific sequence + init_aw9523_gpio_expander(RefCellDevice::new(i2c_bus)) + .expect("Failed to initialize AW9523 GPIO expander"); + info!("AW9523 GPIO expander initialized successfully"); + // --- End AW9523 Initialization --- + + // --- Begin SPI and Display Initialization --- + let spi = Spi::::new( + peripherals.SPI2, + SpiConfig::default().with_frequency(Rate::from_mhz(40)).with_mode(SpiMode::_0), + ) + .unwrap() + .with_sck(peripherals.GPIO36) // SPI Clock + .with_mosi(peripherals.GPIO37); // SPI MOSI + + // Display control pins + let dc = Output::new(peripherals.GPIO35, Level::Low, OutputConfig::default()); // D/C pin + let cs = Output::new(peripherals.GPIO3, Level::High, OutputConfig::default()); // CS pin + let reset = Output::new(peripherals.GPIO15, Level::High, OutputConfig::default()); // Reset pin + + // Wrap SPI into a bus. The interface buffer must outlive the display, so it + // lives in a `StaticCell`. + let spi_device = ExclusiveDevice::new(spi, cs, Delay::new()).unwrap(); + static SPI_BUFFER: StaticCell<[u8; 512]> = StaticCell::new(); + let di = mipidsi::interface::SpiInterface::new(spi_device, dc, SPI_BUFFER.init([0u8; 512])); + + // Add small delay before display initialization + delay.delay_ms(10); + + // Initialize the display with settings + let mut display = mipidsi::Builder::new(mipidsi::models::ILI9342CRgb565, di) + .reset_pin(reset) + .display_size(320, 240) + .color_order(ColorOrder::Bgr) + .invert_colors(ColorInversion::Inverted) + .init(&mut delay) + .unwrap(); + + // Clear display to test it's working + use embedded_graphics::pixelcolor::Rgb565; + display.clear(Rgb565::BLUE).expect("Display clear failed"); + info!("Display initialized and cleared to blue"); + + // Set up the backlight pin (controlled via AXP2101, but we can use GPIO for basic control) + let mut backlight = Output::new(peripherals.GPIO16, Level::Low, OutputConfig::default()); + backlight.set_high(); // Enable backlight + // --- End Display Initialization --- + + // --- Begin Touch Initialization --- + info!("Initializing FT6336U touch controller..."); + + // Create touch reset driver using shared I2C bus + let touch_reset = TouchResetDriverAW9523::new(RefCellDevice::new(i2c_bus)); + + // Initialize FT6336U touch driver using shared I2C bus + let mut touch_driver = + Ft3x68Driver::new(RefCellDevice::new(i2c_bus), FT6336U_DEVICE_ADDRESS, touch_reset, delay); + + match touch_driver.initialize() { + Ok(_) => info!("FT6336U touch controller initialized successfully"), + Err(e) => { + error!("Touch initialization failed: {:?}", e); + // Continue without touch + } + } + // --- End Touch Initialization --- + + // Prepare a draw buffer for the Slint software renderer. The line buffer must + // outlive the platform, so it lives in a `StaticCell`. + static LINE_BUFFER: StaticCell<[slint::platform::software_renderer::Rgb565Pixel; 320]> = + StaticCell::new(); + let buffer_provider = DrawBuffer { + display, + buffer: LINE_BUFFER.init([slint::platform::software_renderer::Rgb565Pixel(0); 320]), + }; - // Create an EspBackend that now owns the peripherals. slint::platform::set_platform(Box::new(EspBackend { - peripherals: RefCell::new(Some(peripherals)), window: RefCell::new(None), + state: RefCell::new(Some(BoardState { + buffer_provider, + touch_driver, + _backlight: backlight, + })), })) .expect("backend already initialized"); } @@ -246,134 +376,13 @@ where impl EspBackend { fn run_event_loop(&self) -> Result<(), slint::PlatformError> { - // Take and configure peripherals. - let peripherals = self.peripherals.borrow_mut().take().expect("Peripherals already taken"); - let mut delay = Delay::new(); - - // --- Initialize I2C bus for all I2C devices (AXP2101, AW9523, touch controller) --- - let power_i2c = I2c::new( - peripherals.I2C0, - esp_hal::i2c::master::Config::default().with_frequency(Rate::from_khz(400)), - ) - .unwrap() - .with_sda(peripherals.GPIO12) // AXP2101 SDA - .with_scl(peripherals.GPIO11); // AXP2101 SCL - - // --- Use StaticCell to create a shared I2C bus for all I2C devices --- - static I2C_BUS: StaticCell>> = StaticCell::new(); - let i2c_bus = I2C_BUS.init(RefCell::new(power_i2c)); - - // --- Begin AXP2101 Power Management Initialization --- - // Initialize power management using shared I2C bus - critical for M5Stack CoreS3 - match init_axp2101_power(RefCellDevice::new(i2c_bus)) { - Ok(_) => { - info!("Power management initialized successfully"); - } - Err(_) => { - error!("Failed to initialize AXP2101 power management"); - // Return error since power management is critical - return Err(slint::PlatformError::Other("AXP2101 initialization failed".into())); - } - }; - - // Small delay to let power rails stabilize - delay.delay_ms(100); - - // --- Begin AW9523 GPIO Expander Initialization --- - // Initialize AW9523 GPIO expander using M5Stack CoreS3 specific sequence - match init_aw9523_gpio_expander(RefCellDevice::new(i2c_bus)) { - Ok(_) => { - info!("AW9523 GPIO expander initialized successfully"); - } - Err(_) => { - error!("Failed to initialize AW9523 GPIO expander"); - // Return error since GPIO expander is needed for touch - return Err(slint::PlatformError::Other("AW9523 initialization failed".into())); - } - }; - // --- End AW9523 Initialization --- - - // --- Begin SPI and Display Initialization --- - let spi = Spi::::new( - peripherals.SPI2, - SpiConfig::default().with_frequency(Rate::from_mhz(40)).with_mode(SpiMode::_0), - ) - .unwrap() - .with_sck(peripherals.GPIO36) // SPI Clock - .with_mosi(peripherals.GPIO37); // SPI MOSI - - // Display control pins - let dc = Output::new(peripherals.GPIO35, Level::Low, OutputConfig::default()); // D/C pin - let cs = Output::new(peripherals.GPIO3, Level::High, OutputConfig::default()); // CS pin - let reset = Output::new(peripherals.GPIO15, Level::High, OutputConfig::default()); // Reset pin - - // Wrap SPI into a bus. - let spi_delay = Delay::new(); - let spi_device = ExclusiveDevice::new(spi, cs, spi_delay).unwrap(); - - // Create buffer for display interface - let mut buffer = [0u8; 512]; - let di = mipidsi::interface::SpiInterface::new(spi_device, dc, &mut buffer); - - // Add small delay before display initialization - delay.delay_ms(10); - - // Initialize the display with settings - let mut display = mipidsi::Builder::new(mipidsi::models::ILI9342CRgb565, di) - .reset_pin(reset) - .display_size(320, 240) - .color_order(ColorOrder::Bgr) - .invert_colors(ColorInversion::Inverted) - .init(&mut delay) - .unwrap(); - - // Clear display to test it's working - use embedded_graphics::pixelcolor::Rgb565; - display - .clear(Rgb565::BLUE) - .map_err(|_| slint::PlatformError::Other("Display clear failed".into()))?; - info!("Display initialized and cleared to blue"); - - // Set up the backlight pin (controlled via AXP2101, but we can use GPIO for basic control) - let mut backlight = Output::new(peripherals.GPIO16, Level::Low, OutputConfig::default()); - backlight.set_high(); // Enable backlight + let BoardState { mut buffer_provider, mut touch_driver, _backlight } = + self.state.borrow_mut().take().expect("event loop already running"); // Update the Slint window size from the display (320x240 for M5Stack CoreS3) - let size = display.size(); - let size = slint::PhysicalSize::new(size.width, size.height); + let size = slint::PhysicalSize::new(320, 240); self.window.borrow().as_ref().unwrap().set_size(size); - // --- End Display Initialization --- - - // --- Begin Touch Initialization --- - info!("Initializing FT6336U touch controller..."); - - // Create touch reset driver using shared I2C bus - let touch_reset = TouchResetDriverAW9523::new(RefCellDevice::new(i2c_bus)); - - // Initialize FT6336U touch driver using shared I2C bus - let mut touch_driver = Ft3x68Driver::new( - RefCellDevice::new(i2c_bus), - FT6336U_DEVICE_ADDRESS, - touch_reset, - delay, - ); - - match touch_driver.initialize() { - Ok(_) => info!("FT6336U touch controller initialized successfully"), - Err(e) => { - error!("Touch initialization failed: {:?}", e); - // Continue without touch - } - } - // --- End Touch Initialization --- - - // Prepare a draw buffer for the Slint software renderer - let mut buffer_provider = DrawBuffer { - display, - buffer: &mut [slint::platform::software_renderer::Rgb565Pixel(0); 320], - }; - // Variable to track the last touch position let mut last_touch = None; diff --git a/examples/mcu-board-support/stm32u5g9j_dk2/stm32u5g9j_dk2.rs b/examples/mcu-board-support/stm32u5g9j_dk2/stm32u5g9j_dk2.rs index 8928b20020a..95fed7c012a 100644 --- a/examples/mcu-board-support/stm32u5g9j_dk2/stm32u5g9j_dk2.rs +++ b/examples/mcu-board-support/stm32u5g9j_dk2/stm32u5g9j_dk2.rs @@ -10,7 +10,7 @@ use slint::platform::{PointerEventButton, WindowEvent, software_renderer}; use crate::embassy::{EmbassyBackend, PlatformBackend}; use embassy_stm32::{Config, rcc}; use embassy_stm32::{ - bind_interrupts, + bind_interrupts, dma, gpio::{Level, Output, Speed}, hspi::{ChipSelectHighTime, FIFOThresholdLevel, Hspi, MemorySize, MemoryType, WrapSize}, i2c::I2c, @@ -34,6 +34,7 @@ static mut HEAP: [u8; HEAP_SIZE] = [0; HEAP_SIZE]; bind_interrupts!(struct Irqs { LTDC => ltdc::InterruptHandler; RNG => rng::InterruptHandler; + GPDMA1_CHANNEL7 => dma::InterruptHandler; }); const DISPLAY_WIDTH: usize = 800; @@ -131,6 +132,7 @@ pub fn init() { p.PH9, p.PI2, p.GPDMA1_CH7, + Irqs, flash_config, ); @@ -216,8 +218,8 @@ pub fn init() { // used for the touch events // NOTE: Async i2c communication returns a Timeout error so we will use blocking i2c until this is fixed - let mut i2c: I2c<'_, embassy_stm32::mode::Blocking> = - I2c::new_blocking(p.I2C2, p.PF1, p.PF0, Hertz(100_000), Default::default()); + let mut i2c: I2c<'_, embassy_stm32::mode::Blocking, embassy_stm32::i2c::Master> = + I2c::new_blocking(p.I2C2, p.PF1, p.PF0, Default::default()); let touch = gt911::Gt911Blocking::default(); touch.init(&mut i2c).unwrap(); @@ -262,8 +264,11 @@ static mut FB2: [TargetPixel; DISPLAY_WIDTH * DISPLAY_HEIGHT] = struct StmBackendInner { _flash: hspi::OctaDtrFlashMemory<'static, embassy_stm32::peripherals::HSPI1>, - touch: gt911::Gt911Blocking>, - i2c: embassy_stm32::i2c::I2c<'static, embassy_stm32::mode::Blocking>, + touch: gt911::Gt911Blocking< + I2c<'static, embassy_stm32::mode::Blocking, embassy_stm32::i2c::Master>, + >, + i2c: + embassy_stm32::i2c::I2c<'static, embassy_stm32::mode::Blocking, embassy_stm32::i2c::Master>, ltdc: embassy_stm32::ltdc::Ltdc<'static, embassy_stm32::peripherals::LTDC>, _ltdc_display_enable: embassy_stm32::gpio::Output<'static>, _ltdc_backlight_control: embassy_stm32::gpio::Output<'static>, diff --git a/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/cargo-config.toml b/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/cargo-config.toml index 41d9aee4c0d..2d61f178bae 100644 --- a/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/cargo-config.toml +++ b/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/cargo-config.toml @@ -3,7 +3,6 @@ [env] ESP_LOG = "INFO" -ESP_HAL_CONFIG_PSRAM_MODE = "octal" [target.xtensa-esp32s3-none-elf] runner = "espflash flash --monitor" diff --git a/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/waveshare_esp32_s3_touch_amoled_1_8.rs b/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/waveshare_esp32_s3_touch_amoled_1_8.rs index 7f9eff92ad6..4f29a324c1c 100644 --- a/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/waveshare_esp32_s3_touch_amoled_1_8.rs +++ b/examples/mcu-board-support/waveshare_esp32_s3_touch_amoled_1_8/waveshare_esp32_s3_touch_amoled_1_8.rs @@ -13,13 +13,12 @@ use esp_hal::delay::Delay; use esp_hal::dma::{DmaRxBuf, DmaTxBuf}; use esp_hal::dma_buffers; use esp_hal::i2c::master::{Config as I2cConfig, I2c}; -use esp_hal::peripherals::Peripherals; use esp_hal::spi::Mode; use esp_hal::spi::master::{Config as SpiConfig, Spi}; use esp_hal::time::{Instant, Rate}; use esp_println::logger::init_logger_from_env; use ft3x68_rs::{FT3168_DEVICE_ADDRESS, Ft3x68Driver, ResetInterface}; -use log::{error, info}; +use log::info; use sh8601_rs::{ ColorMode, DMA_CHUNK_SIZE, DisplaySize, ResetDriver, Sh8601Driver, Ws18AmoledDriver, framebuffer_size, @@ -58,9 +57,26 @@ where } } +// Display configuration for Waveshare ESP32-S3-Touch-AMOLED-1.8 +const DISPLAY_SIZE: DisplaySize = DisplaySize::new(368, 448); +const FB_SIZE: usize = framebuffer_size(DISPLAY_SIZE, ColorMode::Rgb888); +const FRAME_PIXELS: usize = 368 * 448; + +type SharedI2c = RefCellDevice<'static, I2c<'static, esp_hal::Blocking>>; +type BoardDisplay = + Sh8601Driver, embedded_graphics::pixelcolor::Rgb888>; +type BoardTouch = Ft3x68Driver>; + +/// Board hardware constructed in [`init`] and consumed by the event loop. +struct BoardState { + display: BoardDisplay, + touch_driver: BoardTouch, + pixel_buffer: Box<[Rgb8Pixel; FRAME_PIXELS]>, +} + struct EspBackend { window: RefCell>>, - peripherals: RefCell>, + state: RefCell>, } impl slint::platform::Platform for EspBackend { @@ -85,118 +101,113 @@ impl slint::platform::Platform for EspBackend { impl Default for EspBackend { fn default() -> Self { - EspBackend { window: RefCell::new(None), peripherals: RefCell::new(None) } + EspBackend { window: RefCell::new(None), state: RefCell::new(None) } } } -/// Initializes the heap and sets the Slint platform. +/// Initializes the heap, the board peripherals and sets the Slint platform. pub fn init() { - // Initialize peripherals first. let peripherals = esp_hal::init(esp_hal::Config::default().with_cpu_clock(CpuClock::_240MHz)); init_logger_from_env(); info!("Peripherals initialized"); - // Initialize the PSRAM allocator. - esp_alloc::psram_allocator!(peripherals.PSRAM, esp_hal::psram); + // Register the PSRAM heap before anything allocates. PSRAM is consumed here; + // every other peripheral is used field by field below, so the whole + // `Peripherals` struct is never stored and no `steal` is needed. + esp_alloc::psram_allocator!( + peripherals.PSRAM, + esp_hal::psram, + esp_hal::psram::PsramConfig { + mode: esp_hal::psram::PsramMode::OctalSpi, + ..Default::default() + } + ); + + let delay = Delay::new(); + + // --- Begin SPI and Display Initialization --- + // DMA Buffers for SPI + let (rx_buffer, rx_descriptors, tx_buffer, tx_descriptors) = dma_buffers!(DMA_CHUNK_SIZE); + let dma_rx_buf = DmaRxBuf::new(rx_descriptors, rx_buffer).unwrap(); + let dma_tx_buf = DmaTxBuf::new(tx_descriptors, tx_buffer).unwrap(); + + // SPI Configuration for Waveshare ESP32-S3 1.8inch AMOLED Touch Display + let lcd_spi = Spi::new( + peripherals.SPI2, + SpiConfig::default().with_frequency(Rate::from_mhz(40_u32)).with_mode(Mode::_0), + ) + .unwrap() + .with_sio0(peripherals.GPIO4) + .with_sio1(peripherals.GPIO5) + .with_sio2(peripherals.GPIO6) + .with_sio3(peripherals.GPIO7) + .with_cs(peripherals.GPIO12) + .with_sck(peripherals.GPIO11) + .with_dma(peripherals.DMA_CH0) + .with_buffers(dma_rx_buf, dma_tx_buf); + + // Shared I2C bus for Waveshare ESP32-S3 1.8inch AMOLED Touch Display + // Using embedded-hal-bus RefCellDevice for shared access + let i2c_instance = + I2c::new(peripherals.I2C0, I2cConfig::default().with_frequency(Rate::from_khz(400))) + .unwrap() + .with_sda(peripherals.GPIO15) + .with_scl(peripherals.GPIO14); + + // Use StaticCell to create a shared I2C bus + static I2C_BUS: StaticCell>> = StaticCell::new(); + let i2c_bus = I2C_BUS.init(RefCell::new(i2c_instance)); + + // Initialize the FT3x68 touch driver FIRST using shared I2C bus + info!("Initializing FT3x68 Touch Driver first..."); + + let touch_reset = TouchResetDriver::new(RefCellDevice::new(i2c_bus)); + let mut touch_driver = + Ft3x68Driver::new(RefCellDevice::new(i2c_bus), FT3168_DEVICE_ADDRESS, touch_reset, delay); + touch_driver.initialize().expect("Failed to initialize touch driver"); + info!("Touch driver initialized successfully"); + + // NOW initialize I2C GPIO Reset Pin for the WaveShare 1.8" AMOLED display + let reset = ResetDriver::new(RefCellDevice::new(i2c_bus)); + + // Initialize display driver for the Waveshare 1.8" AMOLED display + let ws_driver = Ws18AmoledDriver::new(lcd_spi); + + // Instantiate and Initialize Display AFTER touch + info!("Initializing SH8601 Display after touch..."); + let display = Sh8601Driver::new_heap::<_, FB_SIZE>( + ws_driver, + reset, + ColorMode::Rgb888, + DISPLAY_SIZE, + delay, + ) + .expect("Display initialization failed"); + + info!("Display initialized successfully after touch"); + + // Create a pixel buffer for Slint to render into (allocate once). + let pixel_buffer: Box<[Rgb8Pixel; FRAME_PIXELS]> = + Box::new([Rgb8Pixel { r: 0, g: 0, b: 0 }; FRAME_PIXELS]); - // Create an EspBackend that now owns the peripherals. slint::platform::set_platform(Box::new(EspBackend { - peripherals: RefCell::new(Some(peripherals)), window: RefCell::new(None), + state: RefCell::new(Some(BoardState { display, touch_driver, pixel_buffer })), })) .expect("backend already initialized"); } impl EspBackend { fn run_event_loop(&self) -> Result<(), slint::PlatformError> { - // Take and configure peripherals. - let peripherals = self.peripherals.borrow_mut().take().expect("Peripherals already taken"); + let BoardState { mut display, mut touch_driver, mut pixel_buffer } = + self.state.borrow_mut().take().expect("event loop already running"); + let pixel_buf: &mut [Rgb8Pixel] = &mut *pixel_buffer; let mut delay = Delay::new(); - // Display configuration for Waveshare ESP32-S3-Touch-AMOLED-1.8 - const DISPLAY_SIZE: DisplaySize = DisplaySize::new(368, 448); - const FB_SIZE: usize = framebuffer_size(DISPLAY_SIZE, ColorMode::Rgb888); - - // --- Begin SPI and Display Initialization --- - // DMA Buffers for SPI - let (rx_buffer, rx_descriptors, tx_buffer, tx_descriptors) = dma_buffers!(DMA_CHUNK_SIZE); - let dma_rx_buf = DmaRxBuf::new(rx_descriptors, rx_buffer).unwrap(); - let dma_tx_buf = DmaTxBuf::new(tx_descriptors, tx_buffer).unwrap(); - - // SPI Configuration for Waveshare ESP32-S3 1.8inch AMOLED Touch Display - let lcd_spi = Spi::new( - peripherals.SPI2, - SpiConfig::default().with_frequency(Rate::from_mhz(40_u32)).with_mode(Mode::_0), - ) - .unwrap() - .with_sio0(peripherals.GPIO4) - .with_sio1(peripherals.GPIO5) - .with_sio2(peripherals.GPIO6) - .with_sio3(peripherals.GPIO7) - .with_cs(peripherals.GPIO12) - .with_sck(peripherals.GPIO11) - .with_dma(peripherals.DMA_CH0) - .with_buffers(dma_rx_buf, dma_tx_buf); - - // Shared I2C bus for Waveshare ESP32-S3 1.8inch AMOLED Touch Display - // Using embedded-hal-bus RefCellDevice for shared access - let i2c_instance = - I2c::new(peripherals.I2C0, I2cConfig::default().with_frequency(Rate::from_khz(400))) - .unwrap() - .with_sda(peripherals.GPIO15) - .with_scl(peripherals.GPIO14); - - // Use StaticCell to create a shared I2C bus - static I2C_BUS: StaticCell>> = StaticCell::new(); - let i2c_bus = I2C_BUS.init(RefCell::new(i2c_instance)); - - // Initialize the FT3x68 touch driver FIRST using shared I2C bus - info!("Initializing FT3x68 Touch Driver first..."); - - let touch_reset = TouchResetDriver::new(RefCellDevice::new(i2c_bus)); - let mut touch_driver = Ft3x68Driver::new( - RefCellDevice::new(i2c_bus), - FT3168_DEVICE_ADDRESS, - touch_reset, - delay, - ); - touch_driver.initialize().expect("Failed to initialize touch driver"); - info!("Touch driver initialized successfully"); - - // NOW initialize I2C GPIO Reset Pin for the WaveShare 1.8" AMOLED display - let reset = ResetDriver::new(RefCellDevice::new(i2c_bus)); - - // Initialize display driver for the Waveshare 1.8" AMOLED display - let ws_driver = Ws18AmoledDriver::new(lcd_spi); - - // Instantiate and Initialize Display AFTER touch - info!("Initializing SH8601 Display after touch..."); - let mut display = Sh8601Driver::new_heap::<_, FB_SIZE>( - ws_driver, - reset, - ColorMode::Rgb888, - DISPLAY_SIZE, - delay, - ) - .map_err(|e| { - error!("Error initializing display: {:?}", e); - slint::PlatformError::Other("Display initialization failed".into()) - })?; - - info!("Display initialized successfully after touch"); - // Update the Slint window size from the display let size = slint::PhysicalSize::new(DISPLAY_SIZE.width as u32, DISPLAY_SIZE.height as u32); self.window.borrow().as_ref().unwrap().set_size(size); - // --- End Initialization --- - - // Create a pixel buffer for Slint to render into (allocate once outside the loop) - const FRAME_PIXELS: usize = (368 * 448) as usize; - let mut pixel_buffer: Box<[Rgb8Pixel; FRAME_PIXELS]> = - Box::new([Rgb8Pixel { r: 0, g: 0, b: 0 }; FRAME_PIXELS]); - let pixel_buf: &mut [Rgb8Pixel] = &mut *pixel_buffer; - // Variable to track the last touch position let mut last_touch: Option = None;