From a24a606df6e700c7f250e561806b66cc80d16510 Mon Sep 17 00:00:00 2001 From: shimun Date: Sun, 5 May 2024 17:25:44 +0200 Subject: [PATCH] network --- Cargo.lock | 1348 +++++++++++++++++++++++++++++++++++++++++++++------ Cargo.toml | 30 +- flake.nix | 3 +- src/main.rs | 320 +++++++++--- src/mqtt.rs | 11 + 5 files changed, 1483 insertions(+), 229 deletions(-) create mode 100644 src/mqtt.rs diff --git a/Cargo.lock b/Cargo.lock index cf9c4a5..250edad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,12 +3,74 @@ version = 3 [[package]] -name = "atomic-polyfill" -version = "0.1.11" +name = "aead" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "critical-section", + "crypto-common", + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" + +[[package]] +name = "as-slice" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0" +dependencies = [ + "generic-array 0.12.4", + "generic-array 0.13.3", + "generic-array 0.14.7", + "stable_deref_trait", +] + +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", ] [[package]] @@ -21,25 +83,52 @@ dependencies = [ ] [[package]] -name = "autocfg" -version = "1.1.0" +name = "atomic-pool" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "basic-toml" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bfc506e7a2370ec239e1d072507b2a80c833083699d3c6fa176fbb4de8448c6" +checksum = "58c5fc22e05ec2884db458bf307dc7b278c9428888d2b6e6fad9c0ae7804f5f6" dependencies = [ - "serde", + "as-slice 0.1.5", + "as-slice 0.2.1", + "atomic-polyfill", + "stable_deref_trait", ] [[package]] -name = "bit_field" -version = "0.10.2" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[package]] +name = "bare-metal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "basic-toml" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" +dependencies = [ + "serde", +] [[package]] name = "bitfield" @@ -49,9 +138,24 @@ checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac" [[package]] name = "bitflags" -version = "2.4.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] [[package]] name = "bytemuck" @@ -71,6 +175,44 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "core-isa-parser" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ec98e54b735872e54b2335c2e5a5c7fa7d9c3bfd45500f75280f84089a0083" +dependencies = [ + "anyhow", + "enum-as-inner", + "regex", + "strum 0.24.1", + "strum_macros 0.24.3", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + [[package]] name = "critical-section" version = "1.1.2" @@ -78,10 +220,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" [[package]] -name = "darling" -version = "0.20.3" +name = "crypto-bigint" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ "darling_core", "darling_macro", @@ -89,89 +262,184 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.30", + "syn 2.0.58", ] [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.30", + "syn 2.0.58", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "document-features" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" +dependencies = [ + "litrs", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array 0.14.7", + "group", + "hkdf", + "rand_core", + "sec1", + "subtle", + "zeroize", ] [[package]] name = "embassy-executor" -version = "0.2.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acebf176f4622fd87c7200b568ee32d5b435e3a4d58e39355ce0837b45139eca" +checksum = "ec648daedd2143466eff4b3e8002024f9f6c1de4ab7666bb679688752624c925" dependencies = [ - "atomic-polyfill 1.0.3", "critical-section", - "embassy-macros", - "embassy-time", - "futures-util", - "static_cell", + "document-features", + "embassy-executor-macros", + "embassy-time-driver", + "embassy-time-queue-driver", + "portable-atomic", ] [[package]] -name = "embassy-futures" -version = "0.1.0" +name = "embassy-executor-macros" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e5367165d347c039360f784812f493b001583ab6a3dd8622f4ce9c30374ec3" - -[[package]] -name = "embassy-macros" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d3eef431adfc517df1601e367f72b1c28a51c6eb91def7dc297be7fc8789a4" +checksum = "ad454accf80050e9cf7a51e994132ba0e56286b31f9317b68703897c328c59b5" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.30", + "syn 2.0.58", ] [[package]] -name = "embassy-sync" +name = "embassy-futures" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f878075b9794c1e4ac788c95b728f26aa6366d32eeb10c7051389f898f7d067" + +[[package]] +name = "embassy-net" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cf91dd36dfd623de32242af711fd294d41159f02130052fc93c5c5ba93febe" +dependencies = [ + "as-slice 0.2.1", + "atomic-pool", + "document-features", + "embassy-net-driver", + "embassy-sync", + "embassy-time", + "embedded-io-async", + "embedded-nal-async", + "futures", + "generic-array 0.14.7", + "heapless 0.8.0", + "managed", + "smoltcp", + "stable_deref_trait", +] + +[[package]] +name = "embassy-net-driver" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0dad296a6f70bfdc32ef52442a31f98c28e1608893c1cecc9b6f419bab005a0" +checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" + +[[package]] +name = "embassy-sync" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd938f25c0798db4280fcd8026bf4c2f48789aebf8f77b6e5cf8a7693ba114ec" dependencies = [ "cfg-if", "critical-section", - "embedded-io", + "embedded-io-async", "futures-util", - "heapless", + "heapless 0.8.0", ] [[package]] name = "embassy-time" -version = "0.1.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0461fa8de2cf03c4363a38f439a5d7e4cc16cd41947b51663ff4b2f155b902" +checksum = "a9c844070d9f80dc66ee739299183312baee2e1cdeb6e90b4ea2af44f4676da5" dependencies = [ - "atomic-polyfill 1.0.3", "cfg-if", "critical-section", + "document-features", + "embassy-time-driver", + "embassy-time-queue-driver", "embedded-hal 0.2.7", + "embedded-hal 1.0.0", "embedded-hal-async", "futures-util", - "heapless", + "heapless 0.8.0", ] +[[package]] +name = "embassy-time-driver" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c214077aaa9206958b16411c157961fb7990d4ea628120a78d1a5a28aed24" +dependencies = [ + "document-features", +] + +[[package]] +name = "embassy-time-queue-driver" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1177859559ebf42cd24ae7ba8fe6ee707489b01d0bf471f8827b7b12dcb0bc0" + [[package]] name = "embedded-can" version = "0.4.1" @@ -202,34 +470,129 @@ dependencies = [ [[package]] name = "embedded-hal" -version = "1.0.0-alpha.11" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7724ebabcadfeb15920571dd727bc8ccde8586e52f2890bdb8182fdf42c3ff2" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" [[package]] name = "embedded-hal-async" -version = "0.2.0-alpha.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "918285ec7b18edb024d4adc64f6f16cdc7c4d72eadfc85c3313d1e0ff40e0229" +checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" dependencies = [ - "embedded-hal 1.0.0-alpha.11", + "embedded-hal 1.0.0", ] [[package]] name = "embedded-hal-nb" -version = "1.0.0-alpha.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a09e4c3f8a54e60803405e1cc17e36c963ab32e654f8d6bb49d48cd8116360d7" +checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605" dependencies = [ - "embedded-hal 1.0.0-alpha.11", + "embedded-hal 1.0.0", "nb 1.1.0", ] [[package]] name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "embedded-io-adapters" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03facd2b544d24916f312a6026c1b548b8af012f788a554d498afdc8ef9c775" +dependencies = [ + "embedded-io", +] + +[[package]] +name = "embedded-io-async" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f" +dependencies = [ + "embedded-io", +] + +[[package]] +name = "embedded-nal" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a943fad5ed3d3f8a00f1e80f6bba371f1e7f0df28ec38477535eb318dc19cc" +dependencies = [ + "nb 1.1.0", + "no-std-net", +] + +[[package]] +name = "embedded-nal-async" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72229137a4fc12d239b0b7f50f04b30790678da6d782a0f3f1909bf57ec4b759" +dependencies = [ + "embedded-io-async", + "embedded-nal", + "no-std-net", +] + +[[package]] +name = "embedded-tls" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6efb76fdd004a4ef787640177237b83449e6c5847765ea50bf15900061fd601" +dependencies = [ + "aes-gcm", + "atomic-polyfill", + "digest", + "embedded-io", + "embedded-io-adapters", + "embedded-io-async", + "generic-array 0.14.7", + "heapless 0.6.1", + "heapless 0.8.0", + "hkdf", + "hmac", + "p256", + "rand_core", + "sha2", + "typenum", +] + +[[package]] +name = "enum-as-inner" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" +checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "enumset" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.58", +] [[package]] name = "equivalent" @@ -249,127 +612,262 @@ dependencies = [ [[package]] name = "esp-backtrace" -version = "0.4.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1834d20d58dc6baaf063924cb3ffa0b7f6388a593bae310c9f228c4bd47f0dde" +checksum = "dda6c53c50ed96cce44e8565bd7659f8884d55bac3262184c3a77f748553e3ff" dependencies = [ "esp-println", - "riscv", ] [[package]] -name = "esp-hal-common" -version = "0.11.0" +name = "esp-hal" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9bb3220d63ba0ec4e9b1846edd47e8da3a884c6557b3ba7398494c56a93de35" +checksum = "cc3e9b3333d2ae42f5c9b4890e162cb756fb1b067ab5f642b89fc9f29be424fa" dependencies = [ "basic-toml", "bitfield", - "bitflags", + "bitflags 2.5.0", "cfg-if", "critical-section", + "document-features", "embassy-futures", "embassy-sync", - "embassy-time", + "embassy-time-driver", "embedded-can", "embedded-dma", "embedded-hal 0.2.7", - "embedded-hal 1.0.0-alpha.11", + "embedded-hal 1.0.0", "embedded-hal-async", "embedded-hal-nb", + "embedded-io", + "embedded-io-async", + "enumset", "esp-hal-procmacros", "esp-riscv-rt", - "esp32c3 0.16.0", + "esp32", + "esp32c2", + "esp32c3 0.21.0", + "esp32c6", + "esp32h2", + "esp32p4", + "esp32s2", + "esp32s3", "fugit", "log", "nb 1.1.0", "paste", - "riscv-atomic-emulation-trap", + "portable-atomic", + "rand_core", + "riscv", "serde", - "strum", + "strum 0.26.2", "void", + "xtensa-lx-rt", ] [[package]] name = "esp-hal-procmacros" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "042d5a1ef0e01d6de045972779e4aced3a10e6170169a5cb2de7bef31802e28a" +checksum = "05084ecf8446fe60e0aff6c3873c96dca56dc383a449324ca555edbb80ae60c0" dependencies = [ "darling", + "document-features", + "litrs", "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.30", + "syn 2.0.58", ] [[package]] name = "esp-hal-smartled" -version = "0.4.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd1c4e28c17b0b6f7aac56a5e27c71b5e5ece3e81b49fbcfa81be2ccb9cc2f82" +checksum = "16070db09f056cad1407a0abe1fe0606a3623295428de3e06e89d9a5033da5f3" dependencies = [ - "esp-hal-common", + "document-features", + "esp-hal", "fugit", "smart-leds-trait", ] [[package]] name = "esp-println" -version = "0.3.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcfe5d532cf2029b11996cab6b4af948f41c24b131c76422115634711549aaa" +checksum = "e98f0f58453dd2ce08d99228fc8757fad39d05dfd26643665d1093b8844f42cc" +dependencies = [ + "critical-section", +] [[package]] name = "esp-riscv-rt" -version = "0.4.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb1008d28898f6dc8bab1c01f14826399b93f7e5f910c83062fc1d19eb5b5f28" +checksum = "e599762d31156fa2322db4d5a0784c13b6122b79c1fa7bed70953de2f7d731f1" dependencies = [ + "document-features", "riscv", "riscv-rt-macros", ] +[[package]] +name = "esp-wifi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bdfa4a39424472e5412fb2c7783f2cd42c7780893f440b34958a2df1b48628b" +dependencies = [ + "atomic-waker", + "cfg-if", + "critical-section", + "embassy-futures", + "embassy-net-driver", + "embassy-sync", + "embedded-io", + "embedded-io-async", + "enumset", + "esp-hal", + "esp-wifi-sys", + "fugit", + "futures-util", + "heapless 0.8.0", + "libm", + "linked_list_allocator", + "log", + "no-std-net", + "num-derive", + "num-traits", + "portable-atomic", + "portable_atomic_enum", + "toml-cfg", +] + +[[package]] +name = "esp-wifi-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "551b510b3944844675fcefa1301b3610fe56faa419bcc05dd0dd0056745c6654" +dependencies = [ + "anyhow", +] + +[[package]] +name = "esp32" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343ac30c4537d3f8526490db4264091a9785a55bcdfc22fc34482751a501d8d2" +dependencies = [ + "critical-section", + "vcell", + "xtensa-lx", +] + +[[package]] +name = "esp32c2" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e30c9147b7a1f388887dfd2fe7da4d6159a0248603674af5f3a5282a46cd11" +dependencies = [ + "critical-section", + "vcell", +] + [[package]] name = "esp32c3" version = "0.1.0" dependencies = [ "embassy-executor", + "embassy-net", + "embassy-sync", "embassy-time", - "embedded-hal 0.2.7", + "embedded-io-async", + "embedded-tls", "esp-alloc", "esp-backtrace", - "esp-hal-common", + "esp-hal", "esp-hal-smartled", "esp-println", - "esp32c3-hal", + "esp-wifi", + "heapless 0.8.0", + "mqttrust", + "rust-mqtt", "smart-leds", - "smart-leds-trait", "static_cell", ] [[package]] name = "esp32c3" -version = "0.16.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e3775bd92a673d2c96e40ada5ad5f93448c02ce77a3f7a635b386d59e9b2880" +checksum = "4a7ee710c1e4f16b5e840cdfec3f4e7642b7517a877c5c4b7e1cafa9a14117c5" dependencies = [ "critical-section", "vcell", ] [[package]] -name = "esp32c3-hal" -version = "0.11.0" +name = "esp32c6" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cccbc1d35013f062ae0330651d000736200692d4fdc9e1146eff540af907240" +checksum = "ff0275425ea3a7675b7b5903163a93b65e8ce5b9c8a7749ed397279ed2ade3e3" dependencies = [ - "cfg-if", - "embassy-time", - "embedded-hal 0.2.7", - "embedded-hal-async", - "esp-hal-common", + "critical-section", + "vcell", +] + +[[package]] +name = "esp32h2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e606c8e60d3e68afda997fa9fcc8d8fe1d2e3c172505bb03eb9ab79b4bca4d6a" +dependencies = [ + "critical-section", + "vcell", +] + +[[package]] +name = "esp32p4" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03c0bc7973e6805e3c3c3c979e9418ba30380d8c16989a477440dbce8cf1965" +dependencies = [ + "critical-section", + "vcell", +] + +[[package]] +name = "esp32s2" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbcb8e9a4097fbf1c455fc776ad46a4bb7861d5bad3c3cd4549b666ad906ce4" +dependencies = [ + "critical-section", + "vcell", + "xtensa-lx", +] + +[[package]] +name = "esp32s3" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "044e216560a33aa5d6c98163c8ae4278845ec3bae7b9cab520da0697be4f23a6" +dependencies = [ + "critical-section", + "vcell", + "xtensa-lx", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", ] [[package]] @@ -387,11 +885,61 @@ dependencies = [ "gcd", ] +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", + "futures-sink", +] + [[package]] name = "futures-core" version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" @@ -406,6 +954,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-core", + "futures-macro", + "futures-sink", "futures-task", "pin-project-lite", "pin-utils", @@ -417,6 +967,65 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hash32" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc" +dependencies = [ + "byteorder", +] + [[package]] name = "hash32" version = "0.2.1" @@ -426,6 +1035,15 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.14.0" @@ -434,23 +1052,64 @@ checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" [[package]] name = "heapless" -version = "0.7.16" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" +checksum = "634bd4d29cbf24424d0a4bfcbf80c6960129dc24424752a7d1d1390607023422" dependencies = [ - "atomic-polyfill 0.1.11", - "hash32", + "as-slice 0.1.5", + "generic-array 0.14.7", + "hash32 0.1.1", + "stable_deref_trait", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32 0.2.1", "rustc_version", "spin", "stable_deref_trait", ] +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32 0.3.1", + "portable-atomic", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -467,6 +1126,27 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "libc" +version = "0.2.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "linked_list_allocator" version = "0.10.5" @@ -474,10 +1154,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" [[package]] -name = "lock_api" -version = "0.4.10" +name = "litrs" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -485,9 +1174,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.18" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "managed" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" [[package]] name = "memchr" @@ -495,6 +1190,30 @@ version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +[[package]] +name = "minijinja" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5c5e3d2b4c0a6832bd3d571f7c19a7c1c1f05f11a6e85ae1a29f76be5f9455" +dependencies = [ + "serde", +] + +[[package]] +name = "mqttrust" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae32f7b780d20b0fc574bba0ca71b33838bb264d7a48b098cd18e3327c30edde" +dependencies = [ + "heapless 0.7.17", +] + +[[package]] +name = "mutex-trait" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4bb1638d419e12f8b1c43d9e639abd0d1424285bdea2f76aa231e233c63cd3a" + [[package]] name = "nb" version = "0.1.3" @@ -511,10 +1230,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" [[package]] -name = "once_cell" -version = "1.18.0" +name = "no-std-net" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "elliptic-curve", + "primeorder", +] [[package]] name = "paste" @@ -535,13 +1290,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "proc-macro-crate" -version = "1.3.1" +name = "polyval" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ - "once_cell", - "toml_edit", + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "portable_atomic_enum" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d48f60c43e0120bb2bb48589a16d4bed2f4b911be41e299f2d0fc0e0e20885" +dependencies = [ + "portable-atomic", + "portable_atomic_enum_macros", +] + +[[package]] +name = "portable_atomic_enum_macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33fa6ec7f2047f572d49317cca19c87195de99c6e5b6ee492da701cfe02b053" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", ] [[package]] @@ -570,22 +1372,63 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] +[[package]] +name = "r0" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7a31eed1591dcbc95d92ad7161908e72f4677f8fabf2a32ca49b4237cbf211" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + [[package]] name = "rgb" version = "0.8.36" @@ -597,32 +1440,37 @@ dependencies = [ [[package]] name = "riscv" -version = "0.10.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa3145d2fae3778b1e31ec2e827b228bdc6abd9b74bb5705ba46dcb82069bc4f" +checksum = "2f5c1b8bf41ea746266cdee443d1d1e9125c86ce1447e1a2615abd34330d33a9" dependencies = [ - "bit_field", "critical-section", - "embedded-hal 0.2.7", + "embedded-hal 1.0.0", ] -[[package]] -name = "riscv-atomic-emulation-trap" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da39f4a5642a62e8e16bb438c37e6f90ea388ca0b7960fe875ea39887155d6ba" - [[package]] name = "riscv-rt-macros" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38509d7b17c2f604ceab3e5ff8ac97bb8cd2f544688c512be75c715edaf4daf" +checksum = "a8d100d466dbb76681ef6a9386f3da9abc570d57394e86da0ba5af8c4408486d" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "rust-mqtt" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f71160765f368fd9a84e0955e2ddb6d64ac9018fee1c5323354d6d08c816b40" +dependencies = [ + "embedded-io", + "embedded-io-async", + "heapless 0.8.0", + "rand_core", +] + [[package]] name = "rustc_version" version = "0.4.0" @@ -645,49 +1493,95 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "semver" -version = "1.0.18" +name = "sec1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.30", + "syn 2.0.58", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", ] [[package]] name = "smart-leds" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38dd45fa275f70b4110eac5f5182611ad384f88bb22b68b9a9c3cafd7015290b" +checksum = "66df34e571fa9993fa6f99131a374d58ca3d694b75f9baac93458fe0d6057bf0" dependencies = [ "smart-leds-trait", ] [[package]] name = "smart-leds-trait" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebf6d833fa93f16a1c1874e62c2aebe8567e5bdd436d59bf543ed258b6f7a8e3" +checksum = "0bc64ee02bbbf469603016df746c0ed224f263280b6ebb49b7ebadbff375c572" dependencies = [ "rgb", ] +[[package]] +name = "smoltcp" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a1a996951e50b5971a2c8c0fa05a381480d70a933064245c4a223ddc87ccc97" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "cfg-if", + "heapless 0.8.0", + "managed", +] + [[package]] name = "spin" version = "0.9.8" @@ -705,11 +1599,11 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "static_cell" -version = "1.2.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cd323fc21eb534f903ee78d781d622099f9716c5b408ed23bcf39f8f1651c0" +checksum = "fa6ba4cf83bf80d3eb25f098ea5e790a0a1fcb5e357442259b231e412c2d3ca0" dependencies = [ - "atomic-polyfill 1.0.3", + "portable-atomic", ] [[package]] @@ -720,26 +1614,51 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.25.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" dependencies = [ - "strum_macros", + "strum_macros 0.26.2", ] [[package]] name = "strum_macros" -version = "0.25.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.30", + "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.58", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + [[package]] name = "syn" version = "1.0.109" @@ -753,9 +1672,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.30" +version = "2.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ddc1f908d32ec46858c2d3b3daa00cc35bf4b6841ce4355c7bb3eedf2283a68" +checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" dependencies = [ "proc-macro2", "quote", @@ -763,28 +1682,86 @@ dependencies = [ ] [[package]] -name = "toml_datetime" -version = "0.6.3" +name = "toml" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.9", +] + +[[package]] +name = "toml-cfg" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c587298ddd135c156e92e8c3eae69614d6eecea8e2d8a09daab011e5e6a21d" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "serde", + "syn 2.0.58", + "toml", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", - "winnow", + "winnow 0.5.15", ] +[[package]] +name = "toml_edit" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.6", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + [[package]] name = "unicode-ident" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "vcell" version = "0.1.3" @@ -811,3 +1788,54 @@ checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" dependencies = [ "memchr", ] + +[[package]] +name = "winnow" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" +dependencies = [ + "memchr", +] + +[[package]] +name = "xtensa-lx" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e758f94e1a1f71758f94052a2766dcb12604998eb372b8b2e30576e3ab1ba1e6" +dependencies = [ + "bare-metal", + "mutex-trait", + "spin", +] + +[[package]] +name = "xtensa-lx-rt" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904102108b780c9a5e3275c5f3c63dc348ec43ae5da5237868515498b447d51a" +dependencies = [ + "bare-metal", + "core-isa-parser", + "minijinja", + "r0", + "xtensa-lx-rt-proc-macros", +] + +[[package]] +name = "xtensa-lx-rt-proc-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "082cdede098bbec9af15b0e74085e5f3d16f2923597de7aed7b8112003af2da7" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/Cargo.toml b/Cargo.toml index 47a115c..d596f8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,15 +7,23 @@ authors = [ "Marvin Drescher " ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -embassy-executor = { version = "0.2.0", features = ["nightly", "integrated-timers", "arch-riscv32", "executor-thread"] } -embassy-time = { version = "0.1.0", features = ["nightly"] } -embedded-hal = "0.2.7" +embassy-executor = { version = "0.5.0", features = ["nightly", "integrated-timers", "arch-riscv32", "executor-thread"] } +embassy-net = { version = "0.4.0", features = ["dhcpv4", "dhcpv4-hostname", "dns", "medium-ip", "proto-ipv4", "proto-ipv6", "tcp"] } +embassy-sync = "0.5.0" +embassy-time = { version = "0.3.0" } +embedded-io-async = "0.6.1" +embedded-tls = { version = "0.17.0", default-features = false, features = ["embedded-io-adapters"] } esp-alloc = "0.3.0" -esp-backtrace = { version = "0.4.0", features = ["esp32c3", "exception-handler", "panic-handler"] } -esp-hal-common = { version = "0.11.0", features = ["esp32c3"] } -esp-hal-smartled = { version = "0.4.0", features = ["esp32c3"] } -esp-println = { version = "0.3.1", features = ["esp32c3"] } -esp32c3-hal = { version = "0.11.0", features = ["embassy", "embassy-time", "embassy-time-systick", "embedded-hal-async", "async", "direct-boot"] } -smart-leds = "0.3.0" -smart-leds-trait = "0.2.1" -static_cell = "1.0.0" +esp-backtrace = { version = "0.11.0", features = ["esp32c3", "exception-handler", "panic-handler", "println"] } +esp-hal = { version = "0.16.1", features = ["embassy", "embassy-time-timg0", "esp32c3"] } +esp-hal-smartled = { version = "0.9.0", features = ["esp32c3"] } +esp-println = { version = "0.9.1", features = ["esp32c3", "uart"] } +esp-wifi = { version = "0.4.0", features = ["embassy-net", "esp32c3", "wifi"] } +heapless = { version = "0.8.0", features = ["portable-atomic", "portable-atomic-unsafe-assume-single-core"] } +mqttrust = "0.6.0" +rust-mqtt = { version = "0.3.0", default-features = false } +smart-leds = "0.4.0" +static_cell = { version = "2.0.0", features = ["nightly"] } + +[profile.dev.package.esp-wifi] +opt-level = 2 diff --git a/flake.nix b/flake.nix index cebec0e..c2b5417 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,8 @@ combine [ minimal.rustc minimal.cargo + stable.rust-src + stable.rustfmt targets.riscv32imc-unknown-none-elf.latest.rust-std # ESP32-C3 RISC-V targets.riscv32imac-unknown-none-elf.latest.rust-std # ESP32-C3 RISC-V \w atomic emulation ]; @@ -39,7 +41,6 @@ ]; doCheck = true; - RUSTFLAGS="-C link-arg=-Tlinkall.x -C force-frame-pointers"; # CARGO_UNSTABLE_BUILD_STD = "true"; "CARGO_TARGET_${pkgs.lib.toUpper CARGO_BUILD_TARGET}_LINKER" = "riscv32-none-elf-gcc"; "CARGO_TARGET_${pkgs.lib.toUpper CARGO_BUILD_TARGET}_RUNNER" = "espflash --monitor"; diff --git a/src/main.rs b/src/main.rs index fa7d9f4..4cdbf49 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,32 +7,61 @@ #![no_main] #![feature(type_alias_impl_trait)] #![feature(trait_alias)] +#![feature(generic_arg_infer)] extern crate alloc; +use core::mem::{self, MaybeUninit}; + use alloc::boxed::Box; use embassy_executor::Executor; +use embassy_net::{Config, DhcpConfig, Ipv4Address, Stack, StackResources}; +use embassy_sync::blocking_mutex::raw::NoopRawMutex; +use embassy_sync::blocking_mutex::NoopMutex; +use embassy_sync::mutex::Mutex; use embassy_time::{Duration, Timer}; -use esp32c3_hal::{ - clock::ClockControl, embassy, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc, IO, -}; use esp_alloc::EspHeap; use esp_backtrace as _; -use esp_hal_common::Rmt; -use esp_hal_common::{dma::TxChannel, gdma::Channel0}; -use esp_hal_smartled::smartLedAdapter; +use esp_hal::adc::{AdcPin, Attenuation, ADC}; +use esp_hal::clock::CpuClock; +use esp_hal::gpio::{ + Analog, AnalogPin, AnyPin, GpioPin, OpenDrain, Output, OutputSignal, PushPull, +}; +use esp_hal::peripherals::{Peripherals, ADC1, ADC2, TIMG0}; +use esp_hal::systimer::SystemTimer; +use esp_hal::{adc::AdcConfig, clock::ClockControl}; +use esp_hal::{embassy, prelude::*, rmt, Rmt, Rng, Rtc, IO}; +use esp_hal_smartled::SmartLedsAdapter; use esp_hal_smartled::*; -use smart_leds::SmartLedsWrite; -use smart_leds_trait::{RGB, RGBW, RGB8, White, RGBA}; -use static_cell::StaticCell; +use esp_println::println; +use esp_wifi::wifi::{get_random, ClientConfiguration, Configuration}; +use esp_wifi::wifi::{WifiController, WifiDevice, WifiEvent, WifiStaDevice, WifiState}; +use esp_wifi::{initialize as initialize_wifi, EspWifiInitFor}; +use smart_leds::{SmartLedsWrite, RGB8}; +use static_cell::{make_static, StaticCell}; + +mod mqtt; #[global_allocator] static ALLOCATOR: EspHeap = EspHeap::empty(); +const SSID: Option<&str> = option_env!("WIFI_SSID"); +const PASSWORD: Option<&str> = option_env!("WIFI_PASSWORD"); + +pub type NetworkStack = &'static Stack>; + +fn init_heap() { + const HEAP_SIZE: usize = 32 * 1024; + static mut HEAP: MaybeUninit<[u8; HEAP_SIZE]> = MaybeUninit::uninit(); + + unsafe { + ALLOCATOR.init(HEAP.as_mut_ptr() as *mut u8, HEAP_SIZE); + } +} trait MySmartLed { fn set_color(&mut self, color: RGB8); } -impl, const CH: u8, const BUFFER_SIZE: usize> MySmartLed - for SmartLedsAdapter +impl MySmartLed + for SmartLedsAdapter { fn set_color(&mut self, color: RGB8) { if let Err(err) = self.write([color].into_iter()) { @@ -45,77 +74,254 @@ impl, const CH: u8, const BUFFER_SIZE: us async fn blink(mut led: Box) { loop { esp_println::println!("Bing!"); - for r in 0u8..255 { - Timer::after(Duration::from_millis(500)).await; - esp_println::println!("Bing! {r}"); - let color = RGB8::new(r, r, r); - led.set_color(color); + let scale = 4; + for r in 0..(255 / scale) { + Timer::after(Duration::from_millis(1)).await; + for g in 0..(255 / scale) { + Timer::after(Duration::from_millis(1)).await; + for b in 0..(255 / scale) { + Timer::after(Duration::from_millis(1)).await; + let color = RGB8::new( + (r * scale % 255) as _, + (g * scale % 255) as _, + (b * scale % 255) as _, + ); + led.set_color(color); + } + } } } } +async fn async_read( + mut fun: impl FnMut() -> nb::Result, + interval: Duration, +) -> Result { + loop { + match (fun()) { + Err(nb::Error::WouldBlock) => Timer::after(interval).await, + Err(nb::Error::Other(e)) => return Err(e), + Ok(val) => return Ok(val), + } + } +} + +/// https://docs.espressif.com/projects/esp-idf/en/v4.4/esp32c3/api-reference/peripherals/adc.html +fn adc_voltage(d_out: u16, att: Attenuation) -> u16 { + let scale = match att { + Attenuation::Attenuation0dB => 800, + Attenuation::Attenuation6dB => 1350, + Attenuation::Attenuation2p5dB => 1100, + Attenuation::Attenuation11dB => 2600, + }; + (d_out as u32 * scale / 4095) as u16 +} + +#[embassy_executor::task] +async fn moisture( + mut pin: AdcPin, ADC1>, + adc: &'static Mutex>, + mut supply: AnyPin>, +) { + let warmup = Duration::from_millis(100); + let submerged_in_water = 1500; + let dry = 2600; + loop { + supply.set_high().unwrap(); + Timer::after(warmup).await; + let pin_value: u16 = { + let mut adc1 = adc.lock().await; + async_read(|| adc1.read(&mut pin), Duration::from_millis(10)).await + } + .unwrap(); + + supply.set_low(); + // Vout = Dout * Vmax / Dmax + let milli_volt = adc_voltage(pin_value, Attenuation::Attenuation11dB) as u32; + let moisture = ((milli_volt.checked_sub(submerged_in_water).unwrap_or(0)) + << 8 / (dry - submerged_in_water)) + >> 8; + esp_println::println!("moisture: {moisture}%, v_s: {milli_volt}"); + Timer::after(Duration::from_secs(10) - warmup).await; + } +} + +#[embassy_executor::task] +async fn battery_monitor( + mut vbat_in: AdcPin, ADC1>, + adc: &'static Mutex>, +) { + loop { + let v_out = adc_voltage( + { + let mut adc1 = adc.lock().await; + async_read(|| adc1.read(&mut vbat_in), Duration::from_millis(10)).await + } + .unwrap(), + Attenuation::Attenuation11dB, + ); + // account for 50:50 voltage divider + let v_bat = v_out * 2; + println!("V_bat: {}", v_bat); + + Timer::after(Duration::from_secs(15)).await; + } +} static EXECUTOR: StaticCell = StaticCell::new(); + #[entry] fn main() -> ! { esp_println::println!("Init!"); - const HEAP_SIZE: usize = 2 * 1024; - - extern "C" { - static _sheap: u8; - static _heap_size: u8; - } - unsafe { - let heap_bottom = &_sheap as *const u8 as usize; - let heap_size = &_heap_size as *const u8 as usize; - ALLOCATOR.init(heap_bottom as *mut u8, 1024); - } + init_heap(); let peripherals = Peripherals::take(); let mut system = peripherals.SYSTEM.split(); - let clocks = ClockControl::boot_defaults(system.clock_control).freeze(); + let clocks = ClockControl::configure(system.clock_control, CpuClock::Clock160MHz).freeze(); - let mut rtc = Rtc::new(peripherals.RTC_CNTL); - let timer_group0 = TimerGroup::new( - peripherals.TIMG0, - &clocks, - &mut system.peripheral_clock_control, - ); - let mut wdt0 = timer_group0.wdt; - let timer_group1 = TimerGroup::new( - peripherals.TIMG1, - &clocks, - &mut system.peripheral_clock_control, - ); - let mut wdt1 = timer_group1.wdt; + let mut rtc = Rtc::new(peripherals.LPWR); + let mut timer_group0 = esp_hal::timer::TimerGroup::new(peripherals.TIMG0, &clocks); + let timer_group1 = esp_hal::timer::TimerGroup::new(peripherals.TIMG1, &clocks); + { + let mut wdt0 = &mut timer_group0.wdt; + let mut wdt1 = timer_group1.wdt; - // Disable watchdog timers - rtc.swd.disable(); - rtc.rwdt.disable(); - wdt0.disable(); - wdt1.disable(); + // Disable watchdog timers + rtc.swd.disable(); + rtc.rwdt.disable(); + wdt0.disable(); + wdt1.disable(); + } + let timer = SystemTimer::new(peripherals.SYSTIMER).alarm0; - embassy::init( - &clocks, - esp32c3_hal::systimer::SystemTimer::new(peripherals.SYSTIMER), - ); + let mut rng = Rng::new(peripherals.RNG); - let io = IO::new(peripherals.GPIO, peripherals.IO_MUX); - let rmt = Rmt::new( - peripherals.RMT, - 80u32.MHz(), - &mut system.peripheral_clock_control, + let mut seed = [0u8; 8]; // very random, very secure seed + rng.read(&mut seed).expect("random seed"); + + let wifi_init = initialize_wifi( + EspWifiInitFor::Wifi, + timer, + rng, + system.radio_clock_control, &clocks, ) .unwrap(); + let wifi = peripherals.WIFI; + let (wifi_interface, controller) = + esp_wifi::wifi::new_with_mode(&wifi_init, wifi, WifiStaDevice).unwrap(); - let mut led = ::new(rmt.channel0, io.pins.gpio7); + let mut hostname = heapless::String::<_>::new(); + hostname.push_str("esp32c3"); + let config = Config::dhcpv4({ + let mut dhcp = DhcpConfig::default(); + dhcp.hostname = Some(hostname); + dhcp + }); + // Init network stack + let stack = &*make_static!(Stack::new( + wifi_interface, + config, + make_static!(StackResources::<3>::new()), + u64::from_le_bytes(seed) + )); + + embassy::init(&clocks, timer_group0); + + let io = IO::new(peripherals.GPIO, peripherals.IO_MUX); + let rmt = Rmt::new(peripherals.RMT, 80u32.MHz(), &clocks).unwrap(); + + let rmt_buffer = smartLedBuffer!(1); + let mut led = SmartLedsAdapter::new(rmt.channel0, io.pins.gpio7, rmt_buffer, &clocks); led.set_color(RGB8::new(0, 255, 255)); let led: Box = Box::new(led); + let mut adc1_config = AdcConfig::new(); + let pin = adc1_config.enable_pin(io.pins.gpio4.into_analog(), Attenuation::Attenuation11dB); + let mut vbat_in = + adc1_config.enable_pin(io.pins.gpio3.into_analog(), Attenuation::Attenuation11dB); + let moisture_sensor_suppy_pin = io.pins.gpio5.into_push_pull_output().degrade(); + + let adc1: &'static Mutex> = + make_static!(Mutex::new(ADC::::new(peripherals.ADC1, adc1_config))); + let executor = EXECUTOR.init(Executor::new()); executor.run(move |spawner| { - spawner.spawn(blink(led)).ok(); + if let (Some(ssid), Some(psk)) = (SSID.as_ref(), PASSWORD.as_ref()) { + spawner + .spawn(wifi_connection(controller, ssid, psk)) + .unwrap(); + spawner.spawn(net_task(&stack)).unwrap(); + spawner.spawn(ip_task(&stack)).unwrap(); + } + spawner.spawn(blink(led)).unwrap(); + spawner + .spawn(moisture(pin, adc1, moisture_sensor_suppy_pin.into())) + .unwrap(); + spawner.spawn(battery_monitor(vbat_in, adc1)).unwrap(); }) } + +#[embassy_executor::task] +async fn wifi_connection( + mut controller: WifiController<'static>, + ssid: &'static str, + psk: &'static str, +) { + println!("start connection task"); + println!("Device capabilities: {:?}", controller.get_capabilities()); + loop { + match esp_wifi::wifi::get_wifi_state() { + WifiState::StaConnected => { + // wait until we're no longer connected + controller.wait_for_event(WifiEvent::StaDisconnected).await; + Timer::after(Duration::from_millis(5000)).await + } + _ => {} + } + if !matches!(controller.is_started(), Ok(true)) { + let client_config = Configuration::Client(ClientConfiguration { + ssid: ssid.try_into().unwrap(), + password: psk.try_into().unwrap(), + ..Default::default() + }); + controller.set_configuration(&client_config).unwrap(); + println!("Starting wifi"); + controller.start().await.unwrap(); + println!("Wifi started!"); + } + println!("About to connect..."); + + match controller.connect().await { + Ok(_) => println!("Wifi connected!"), + Err(e) => { + println!("Failed to connect to wifi: {e:?}"); + Timer::after(Duration::from_millis(5000)).await + } + } + } +} + +#[embassy_executor::task] +async fn ip_task(stack: NetworkStack) { + loop { + if stack.is_link_up() { + break; + } + Timer::after(Duration::from_millis(500)).await; + } + println!("Waiting to get IP address..."); + loop { + if let Some(config) = stack.config_v4() { + println!("Got IP: {}", config.address); + break; + } + Timer::after(Duration::from_millis(500)).await; + } +} + +#[embassy_executor::task] +async fn net_task(stack: NetworkStack) { + stack.run().await +} diff --git a/src/mqtt.rs b/src/mqtt.rs new file mode 100644 index 0000000..d6bbb0a --- /dev/null +++ b/src/mqtt.rs @@ -0,0 +1,11 @@ +use embassy_net::tcp::TcpSocket; +use embassy_time::Duration; + +use crate::NetworkStack; + +async fn send_message(stack: NetworkStack, message: &[u8]) { + let mut rx_buffer = [0; 4096]; + let mut tx_buffer = [0; 4096]; + let mut socket = TcpSocket::new(stack, &mut rx_buffer, &mut tx_buffer); + socket.set_timeout(Some(Duration::from_secs(10))); +}