diff --git a/.cargo/config.toml b/.cargo/config.toml index d1c8c1c..a4240eb 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,8 +1,8 @@ [target.'cfg(all(target_arch = "arm", target_os = "none"))'] -runner = "probe-run --chip RP2040" +runner = "probe-rs run --chip RP2040" [build] -target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+ +target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+ [env] DEFMT_LOG = "debug" diff --git a/Cargo.lock b/Cargo.lock index 063b6d8..2e5ddb6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" dependencies = [ "memchr", ] [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "as-slice" @@ -58,9 +58,9 @@ dependencies = [ [[package]] name = "atomic-polyfill" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c314e70d181aa6053b26e3f7fbf86d1dfff84f816a6175b967666b3506ef7289" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" dependencies = [ "critical-section", ] @@ -73,7 +73,7 @@ checksum = "58c5fc22e05ec2884db458bf307dc7b278c9428888d2b6e6fad9c0ae7804f5f6" dependencies = [ "as-slice 0.1.5", "as-slice 0.2.1", - "atomic-polyfill 1.0.2", + "atomic-polyfill 1.0.3", "stable_deref_trait", ] @@ -125,6 +125,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + [[package]] name = "bytemuck" version = "1.13.1" @@ -139,9 +145,12 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -208,9 +217,9 @@ checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff" [[package]] name = "critical-section" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" [[package]] name = "crunchy" @@ -221,7 +230,7 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "cyw43" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "atomic-polyfill 0.1.11", "cortex-m", @@ -231,7 +240,7 @@ dependencies = [ "embassy-net-driver-channel", "embassy-sync", "embassy-time", - "embedded-hal 1.0.0-alpha.10", + "embedded-hal 1.0.0-rc.1", "futures", "num_enum", ] @@ -239,7 +248,7 @@ dependencies = [ [[package]] name = "cyw43-pio" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "cyw43", "defmt", @@ -251,9 +260,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ "darling_core", "darling_macro", @@ -261,27 +270,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn 2.0.29", ] [[package]] name = "darling_macro" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn 2.0.29", ] [[package]] @@ -292,25 +301,25 @@ checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" [[package]] name = "defmt" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956673bd3cb347512bf988d1e8d89ac9a82b64f6eec54d3c01c3529dac019882" +checksum = "a8a2d011b2fee29fb7d659b83c43fce9a2cb4df453e16d441a51448e448f3f98" dependencies = [ - "bitflags", + "bitflags 1.3.2", "defmt-macros", ] [[package]] name = "defmt-macros" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4abc4821bd84d3d8f49945ddb24d029be9385ed9b77c99bf2f6296847a6a9f0" +checksum = "54f0216f6c5acb5ae1a47050a6645024e6edafc2ee32d421955eccfef12ef92e" dependencies = [ "defmt-parser", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.29", ] [[package]] @@ -377,34 +386,20 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" - -[[package]] -name = "embassy-cortex-m" -version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" -dependencies = [ - "atomic-polyfill 1.0.2", - "cfg-if", - "cortex-m", - "critical-section", - "embassy-executor", - "embassy-hal-common", - "embassy-macros", - "embassy-sync", -] +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "embassy-embedded-hal" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "embassy-futures", "embassy-sync", + "embassy-time", "embedded-hal 0.2.7", - "embedded-hal 1.0.0-alpha.10", + "embedded-hal 1.0.0-rc.1", "embedded-hal-async", "embedded-storage", "embedded-storage-async", @@ -413,10 +408,10 @@ dependencies = [ [[package]] name = "embassy-executor" -version = "0.2.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +version = "0.3.0" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ - "atomic-polyfill 1.0.2", + "atomic-polyfill 1.0.3", "cortex-m", "critical-section", "defmt", @@ -429,45 +424,46 @@ dependencies = [ [[package]] name = "embassy-futures" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "defmt", ] [[package]] -name = "embassy-hal-common" +name = "embassy-hal-internal" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ + "cortex-m", + "critical-section", "defmt", "num-traits", ] [[package]] name = "embassy-macros" -version = "0.2.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +version = "0.2.1" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.29", ] [[package]] name = "embassy-net" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "as-slice 0.2.1", - "atomic-polyfill 1.0.2", + "atomic-polyfill 1.0.3", "atomic-pool", "defmt", - "embassy-hal-common", "embassy-net-driver", "embassy-sync", "embassy-time", - "embedded-io", + "embedded-io-async", "embedded-nal-async", "futures", "generic-array 0.14.7", @@ -480,7 +476,7 @@ dependencies = [ [[package]] name = "embassy-net-driver" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "defmt", ] @@ -488,7 +484,7 @@ dependencies = [ [[package]] name = "embassy-net-driver-channel" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "embassy-futures", "embassy-net-driver", @@ -498,28 +494,28 @@ dependencies = [ [[package]] name = "embassy-rp" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ - "atomic-polyfill 1.0.2", + "atomic-polyfill 1.0.3", "cfg-if", "cortex-m", "cortex-m-rt", "critical-section", "defmt", - "embassy-cortex-m", "embassy-embedded-hal", - "embassy-executor", "embassy-futures", - "embassy-hal-common", + "embassy-hal-internal", "embassy-sync", "embassy-time", "embassy-usb-driver", "embedded-hal 0.2.7", - "embedded-hal 1.0.0-alpha.10", + "embedded-hal 1.0.0-rc.1", "embedded-hal-async", "embedded-hal-nb", "embedded-io", + "embedded-io-async", "embedded-storage", + "embedded-storage-async", "fixed", "futures", "nb 1.1.0", @@ -534,27 +530,26 @@ dependencies = [ [[package]] name = "embassy-sync" version = "0.2.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "cfg-if", "critical-section", "defmt", - "embedded-io", "futures-util", "heapless", ] [[package]] name = "embassy-time" -version = "0.1.1" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +version = "0.1.2" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ - "atomic-polyfill 1.0.2", + "atomic-polyfill 1.0.3", "cfg-if", "critical-section", "defmt", "embedded-hal 0.2.7", - "embedded-hal 1.0.0-alpha.10", + "embedded-hal 1.0.0-rc.1", "embedded-hal-async", "futures-util", "heapless", @@ -563,7 +558,7 @@ dependencies = [ [[package]] name = "embassy-usb" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "defmt", "embassy-futures", @@ -578,7 +573,7 @@ dependencies = [ [[package]] name = "embassy-usb-driver" version = "0.1.0" -source = "git+https://github.com/embassy-rs/embassy#b68cf6c5c81d2bdc373e45c6adeedb5fa1241463" +source = "git+https://github.com/embassy-rs/embassy#f8299d10f7c0387416989e00acc02d99661537fb" dependencies = [ "defmt", ] @@ -595,59 +590,69 @@ dependencies = [ [[package]] name = "embedded-hal" -version = "1.0.0-alpha.10" +version = "1.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65c4d073f5d91c66e629b216818a4c9747eeda0debedf2deda9a0a947e4e93b" +checksum = "2894bc2f0457b8ca3d6b8ab8aad64d9337583672494013457f86c5a9146c0e22" [[package]] name = "embedded-hal-async" -version = "0.2.0-alpha.1" +version = "1.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8042370aa7af48de36d5312cda14c18ed8ca6b7ce64f5a07832fedc9dc83063f" +checksum = "76a8a3517745342155b3b00895a0f78417a453fb800d97a8bf4777d5720acde9" dependencies = [ - "embedded-hal 1.0.0-alpha.10", + "embedded-hal 1.0.0-rc.1", ] [[package]] name = "embedded-hal-nb" -version = "1.0.0-alpha.2" +version = "1.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465fffd56a95bbc105c17965bca1c1d5815027b1cc6bb183bc05d04563d065c" +checksum = "257e3bb0163c69195acb0ebe0083b017b963235861d5ea9741626abdc55f39c9" dependencies = [ - "embedded-hal 1.0.0-alpha.10", + "embedded-hal 1.0.0-rc.1", "nb 1.1.0", ] [[package]] name = "embedded-io" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" +checksum = "658bbadc628dc286b9ae02f0cb0f5411c056eb7487b72f0083203f115de94060" dependencies = [ "defmt", ] [[package]] -name = "embedded-nal" -version = "0.6.0" +name = "embedded-io-async" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db9efecb57ab54fa918730f2874d7d37647169c50fa1357fecb81abee840b113" +checksum = "1394754ad749a560b25a0c70dcd2b66a450824a1311fc475bb2ccbfabe7f8414" +dependencies = [ + "defmt", + "embedded-io", +] + +[[package]] +name = "embedded-nal" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447416d161ba378782c13e82b11b267d6d2104b4913679a7c5640e7e94f96ea7" dependencies = [ "heapless", "nb 1.1.0", - "no-std-net 0.5.0", + "no-std-net", ] [[package]] name = "embedded-nal-async" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ce84f518ca912777ec143db235f4d615e3bf8d4e46d507d6ef12daf5b1df98" +checksum = "e706b5288eceaa582155b24d54e23385429402e4e99ae984f4a0a6a65b635f15" dependencies = [ - "embedded-io", + "embedded-io-async", "embedded-nal", "heapless", - "no-std-net 0.6.0", + "no-std-net", ] [[package]] @@ -681,10 +686,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] -name = "errno" -version = "0.3.1" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" dependencies = [ "errno-dragonfly", "libc", @@ -769,7 +780,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.29", ] [[package]] @@ -839,10 +850,11 @@ dependencies = [ [[package]] name = "half" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" dependencies = [ + "cfg-if", "crunchy", ] @@ -857,9 +869,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" [[package]] name = "heapless" @@ -877,9 +889,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] name = "ident_case" @@ -889,33 +901,21 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "1.9.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ - "autocfg", + "equivalent", "hashbrown", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys", -] - [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi", - "io-lifetimes", "rustix", "windows-sys", ] @@ -962,15 +962,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.146" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "lock_api" @@ -984,9 +984,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "managed" @@ -1021,12 +1021,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" -[[package]] -name = "no-std-net" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bcece43b12349917e096cddfa66107277f123e6c96a5aea78711dc601a47152" - [[package]] name = "no-std-net" version = "0.6.0" @@ -1035,9 +1029,9 @@ checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] @@ -1103,15 +1097,15 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", "indexmap", @@ -1128,9 +1122,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -1210,22 +1204,31 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.60" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.28" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + [[package]] name = "rand_core" version = "0.6.4" @@ -1238,7 +1241,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1247,7 +1250,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1263,13 +1266,25 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.4" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.2", + "regex-automata", + "regex-syntax 0.7.4", +] + +[[package]] +name = "regex-automata" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.4", ] [[package]] @@ -1280,9 +1295,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" [[package]] name = "rp" @@ -1304,18 +1319,21 @@ dependencies = [ "embassy-sync", "embassy-time", "embassy-usb", - "embedded-io", + "embedded-io-async", "heapless", "log", "panic-probe", + "rand", + "rust-mqtt", + "serde-json-core", "static_cell", ] [[package]] name = "rp-pac" -version = "4.0.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76e426cd8377db668fba1fe885028788b126b7cef91059cd478de8b076c2915" +checksum = "f30f6c4c846269293db805e9c77864ff7b923395b480550df44f0868e3765337" dependencies = [ "cortex-m", "cortex-m-rt", @@ -1330,6 +1348,16 @@ dependencies = [ "crc-any", ] +[[package]] +name = "rust-mqtt" +version = "0.1.5" +dependencies = [ + "defmt", + "embedded-io-async", + "heapless", + "rand_core", +] + [[package]] name = "rustc_version" version = "0.2.3" @@ -1345,18 +1373,17 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.18", ] [[package]] name = "rustix" -version = "0.37.19" +version = "0.38.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "9bfe0f2582b4931a45d1fa608f8a8722e8b3c7ac54dd6d5f3b3212791fedef49" dependencies = [ - "bitflags", + "bitflags 2.4.0", "errno", - "io-lifetimes", "libc", "linux-raw-sys", "windows-sys", @@ -1364,15 +1391,21 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" @@ -1385,9 +1418,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" [[package]] name = "semver-parser" @@ -1397,43 +1430,54 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.164" +version = "1.0.187" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" +checksum = "30a7fe14252655bd1e578af19f5fa00fe02fd0013b100ca6b49fde31c41bae4c" dependencies = [ "serde_derive", ] [[package]] -name = "serde_derive" -version = "1.0.164" +name = "serde-json-core" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" +checksum = "3c9e1ab533c0bc414c34920ec7e5f097101d126ed5eac1a1aac711222e0bbb33" +dependencies = [ + "heapless", + "ryu", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.187" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46b2a6ca578b3f1d4501b12f78ed4692006d79d82a1a7c561c12dbc3d625eb8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.29", ] [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "smoltcp" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9786ac45091b96f946693e05bfa4d8ca93e2d3341237d97a380107a6b38dea" +checksum = "8d2e3a36ac8fea7b94e666dfa3871063d6e0a5c9d5d4fec9a1a6b7b6760f0229" dependencies = [ - "bitflags", + "bitflags 1.3.2", "byteorder", "cfg-if", "defmt", @@ -1468,11 +1512,11 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "static_cell" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6a851e9c00ce152b2bad24e8545a6db0b8646988267a6ea966d95c6932e8a2" +checksum = "49cd323fc21eb534f903ee78d781d622099f9716c5b408ed23bcf39f8f1651c0" dependencies = [ - "atomic-polyfill 1.0.2", + "atomic-polyfill 1.0.3", ] [[package]] @@ -1507,9 +1551,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" dependencies = [ "proc-macro2", "quote", @@ -1538,22 +1582,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.29", ] [[package]] @@ -1573,9 +1617,9 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-width" @@ -1705,9 +1749,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -1720,42 +1764,42 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/Cargo.toml b/Cargo.toml index b5f3644..b072641 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ cortex-m = { version = "0.7", features = ["inline-asm"] } cortex-m-rt = "0.7" defmt = "0.3" defmt-rtt = "0.4" -embassy-executor = { git = "https://github.com/embassy-rs/embassy", features = [ +embassy-executor = { version = "0.3", features = [ "arch-cortex-m", "executor-thread", "executor-interrupt", @@ -18,7 +18,7 @@ embassy-executor = { git = "https://github.com/embassy-rs/embassy", features = [ "nightly", "integrated-timers", ] } -embassy-rp = { git = "https://github.com/embassy-rs/embassy", features = [ +embassy-rp = { version = "0.1", features = [ "defmt", "unstable-traits", "nightly", @@ -26,42 +26,60 @@ embassy-rp = { git = "https://github.com/embassy-rs/embassy", features = [ "time-driver", "critical-section-impl", ] } -embassy-time = { git = "https://github.com/embassy-rs/embassy", features = [ +embassy-time = { version = "0.1", features = [ "defmt", "unstable-traits", "defmt-timestamp-uptime", "nightly", ] } -embassy-usb = { git = "https://github.com/embassy-rs/embassy", features = [ - "defmt", -] } -embassy-net = { git = "https://github.com/embassy-rs/embassy", features = [ +embassy-usb = { version = "0.1", features = ["defmt"] } +embassy-net = { version = "0.1", features = [ "tcp", "dhcpv4", "nightly", "medium-ethernet", "defmt", ] } -embassy-sync = { git = "https://github.com/embassy-rs/embassy", features = [ +embassy-sync = { version = "0.2", features = ["defmt"] } +embassy-futures = { version = "0.1", features = ["defmt"] } +cyw43 = { git = "https://github.com/embassy-rs/embassy", features = [ "defmt", + "firmware-logs", ] } -embassy-futures = { git = "https://github.com/embassy-rs/embassy", features = [ - "defmt", -] } -cyw43 = { git = "https://github.com/embassy-rs/embassy", features = ["defmt"] } cyw43-pio = { git = "https://github.com/embassy-rs/embassy", features = [ "defmt", ] } panic-probe = { version = "0.3", features = ["print-defmt"] } -log = "0.4.17" -static_cell = { version = "1.1.0", features = ["nightly"] } +log = "0.4" +static_cell = { version = "1.1", features = ["nightly"] } heapless = { version = "0.7.16", features = ["defmt"] } -embedded-io = { version = "0.4.0", features = ["async", "defmt"] } -crc16 = "0.4.0" -dsmr5 = "0.2.2" +embedded-io-async = { version = "0.5", features = ["defmt-03"] } +crc16 = "0.4" +dsmr5 = "0.2" +rust-mqtt = { version = "0.1.5", features = [ + "defmt", + "no_std", + "tls", +], default-features = false } +rand = { version = "0.8.5", features = [ + "nightly", + "small_rng", +], default-features = false } +serde-json-core = "0.5.1" + +[patch.crates-io] +embassy-executor = { git = "https://github.com/embassy-rs/embassy" } +embassy-rp = { git = "https://github.com/embassy-rs/embassy" } +embassy-time = { git = "https://github.com/embassy-rs/embassy" } +embassy-usb = { git = "https://github.com/embassy-rs/embassy" } +embassy-net = { git = "https://github.com/embassy-rs/embassy" } +embassy-sync = { git = "https://github.com/embassy-rs/embassy" } +embassy-futures = { git = "https://github.com/embassy-rs/embassy" } + +rust-mqtt = { path = "../rust-mqtt" } [build-dependencies] -dotenvy = "0.15.7" +dotenvy = "0.15" [profile.release] debug = true diff --git a/src/main.rs b/src/main.rs index 9e468ac..97cc11d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,11 +11,12 @@ use embassy_net::{tcp::TcpSocket, Ipv4Address, Ipv4Cidr, Stack, StackResources}; use embassy_rp::{ bind_interrupts, gpio, peripherals::{DMA_CH0, PIN_23, PIN_25, PIO0, UART0}, - pio::Pio, + pio::{self, Pio}, uart::{self, BufferedUartRx, Parity}, }; +use embassy_time::{Duration, Ticker}; -use embedded_io::asynch::{Read, Write}; +use embedded_io_async::Read; use embassy_sync::{ blocking_mutex::raw::NoopRawMutex, @@ -23,12 +24,15 @@ use embassy_sync::{ }; use gpio::{Level, Output}; use heapless::Vec; +use rand::{rngs::SmallRng, RngCore, SeedableRng}; +use rust_mqtt::client::{client::MqttClient, client_config::ClientConfig}; use static_cell::make_static; use {defmt_rtt as _, panic_probe as _}; bind_interrupts!(struct Irqs { UART0_IRQ => uart::BufferedInterruptHandler; + PIO0_IRQ_0 => pio::InterruptHandler; }); #[derive(Format)] @@ -142,42 +146,11 @@ async fn main(spawner: Spawner) { spawner.spawn(uart_rx_task(rx, channel.sender())).unwrap(); - // === USB SERIAL === - // let driver = Driver::new(p.USB, Irqs); - // - // let mut config = Config::new(0xc0de, 0xcafe); - // config.manufacturer = Some("huizinga.dev"); - // config.product = Some("Raspberry Pi Pico"); - // config.serial_number = Some("123456789"); - // config.max_power = 0; - // config.max_packet_size_0 = 64; - // - // // Needed for windows compatiblilty - // config.device_class = 0xEF; - // config.device_sub_class = 0x02; - // config.device_protocol = 0x01; - // config.composite_with_iads = true; - // - // let mut builder = Builder::new( - // driver, - // config, - // singleton!([0; 256]), - // singleton!([0; 256]), - // singleton!([0; 256]), - // singleton!([0; 64]), - // ); - // - // let class = CdcAcmClass::new(&mut builder, singleton!(State::new()), 64); - // let usb = builder.build(); - // - // spawner.spawn(usb_task(usb)).unwrap(); - // spawner.spawn(echo_task(class, channel.sender())).unwrap(); - // === WIFI === // To make flashing faster for development, you may want to flash the firmwares independently // at hardcoded addresses, instead of baking them into the program with `include_bytes!`: - // probe-rs-cli download 43439A0.bin --format bin --chip RP2040 --base-address 0x10100000 - // probe-rs-cli download 43439A0_clm.bin --format bin --chip RP2040 --base-address 0x10140000 + // probe-rs download 43439A0.bin --format bin --chip RP2040 --base-address 0x10100000 + // probe-rs download 43439A0_clm.bin --format bin --chip RP2040 --base-address 0x10140000 let fw = unsafe { core::slice::from_raw_parts(0x10100000 as *const u8, 224190) }; let clm = unsafe { core::slice::from_raw_parts(0x10140000 as *const u8, 4752) }; // let fw = include_bytes!("../firmware/43439A0.bin"); @@ -186,7 +159,7 @@ async fn main(spawner: Spawner) { let pwr = Output::new(p.PIN_23, Level::Low); let cs = Output::new(p.PIN_25, Level::High); - let mut pio = Pio::new(p.PIO0); + let mut pio = Pio::new(p.PIO0, Irqs); let spi = PioSpi::new( &mut pio.common, pio.sm0, @@ -206,16 +179,23 @@ async fn main(spawner: Spawner) { .set_power_management(cyw43::PowerManagementMode::PowerSave) .await; - let ip = Ipv4Address::new(10, 0, 0, 77); + // Turn LED on while trying to connect + control.gpio_set(0, true).await; - // let config = embassy_net::Config::Dhcp(Default::default()); - let config = embassy_net::Config::Static(embassy_net::StaticConfig { + // let config = embassy_net::Config::dhcpv4(Default::default()); + let ip = Ipv4Address::new(10, 0, 0, 77); + let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { address: Ipv4Cidr::new(ip, 24), - dns_servers: Vec::new(), gateway: Some(Ipv4Address::new(10, 0, 0, 1)), + dns_servers: Vec::new(), }); - let seed = 0x51ac_3101_6468_8cdf; + let mut seed = [0; 8]; + // TODO: Make the seed actually random? + let mut rng = SmallRng::seed_from_u64(0x51ac_3101_6468_8cdf); + rng.fill_bytes(&mut seed); + let seed = u64::from_le_bytes(seed); + let stack = make_static!(Stack::new( net_device, config, @@ -241,99 +221,63 @@ async fn main(spawner: Spawner) { 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))); + let addr = (Ipv4Address::new(10, 0, 0, 2), 1883); + + while let Err(e) = socket.connect(addr).await { + warn!("Connect error: {:?}", e); + continue; + } + info!("TCP Connected!"); + + let mut config = ClientConfig::new(rust_mqtt::client::client_config::MqttVersion::MQTTv5, rng); + + config.add_username("mqtt"); + config.add_password("$x@w6t8ErHJwolSfVdkLqFUvxex5ZgeE"); + config.add_max_subscribe_qos(rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS1); + config.add_client_id("pico"); + // Leads to InsufficientBufferSize error + // config.add_will("pico/test", b"disconnected", false); + + let mut recv_buffer = [0; 4096]; + let mut write_buffer = [0; 4096]; + + let mut client = + MqttClient::<_, 5, _>::new(socket, &mut write_buffer, &mut recv_buffer, config); + + client.connect_to_broker().await.unwrap(); + info!("MQTT Connected!"); + + // Turn LED off when connected + control.gpio_set(0, false).await; + + let mut keep_alive = Ticker::every(Duration::from_secs(30)); let receiver = channel.receiver(); loop { - let mut socket = TcpSocket::new(stack, &mut rx_buffer, &mut tx_buffer); - // socket.set_timeout(Some(Duration::from_secs(10))); + match select(keep_alive.next(), receiver.receive()).await { + Either::First(_) => client.send_ping().await.unwrap(), + Either::Second(readout) => { + control.gpio_set(0, true).await; + control.gpio_set(0, false).await; - control.gpio_set(0, true).await; - let port = 1234; - info!("Listening on {}:{}...", ip, port); + let telegram = readout.to_telegram().unwrap(); + let state = dsmr5::Result::::from(&telegram).unwrap(); - if let Err(e) = socket.accept(port).await { - warn!("Accept error: {:?}", e); - continue; - } + let msg: Vec = serde_json_core::to_vec(&state).unwrap(); + info!("len: {}", msg.len()); - info!("Received connection from {:?}", socket.remote_endpoint()); - control.gpio_set(0, false).await; - - socket.write_all("Connected!\n".as_bytes()).await.unwrap(); - - loop { - match select(socket.read(&mut [0; 64]), receiver.recv()).await { - Either::First(Ok(0)) => { - warn!("Read OEF"); - break; - } - Either::First(Ok(_)) => { - // Received something over the socket, currently does nothing - } - Either::First(Err(e)) => { - warn!("Read error: {:?}", e); - } - Either::Second(readout) => { - socket.write_all(&readout.buffer).await.unwrap(); - - // let telegram = readout.to_telegram().unwrap(); - // - // debug!("checksum: {}", telegram.checksum); - // debug!("prefix: {}", telegram.prefix); - // debug!("identification: {}", telegram.identification); - // - // let state = dsmr5::Result::::from(&telegram).unwrap(); - // debug!("datetime: {}", state.datetime.unwrap().year); - // debug!("meterreadings[0]: {}", state.meterreadings[0].to.unwrap()); - // debug!("meterreadings[1]: {}", state.meterreadings[1].to.unwrap()); - // - // debug!("slave:"); - // debug!("\tdevice_type: {}", state.slaves[0].device_type.unwrap()); - // debug!( - // "\tmeter_reading: {}", - // state.slaves[0].meter_reading.as_ref().unwrap().1 - // ); - } - // Either::Second(message) => match socket.write(&message).await { - // Ok(_) => {} - // Err(e) => { - // warn!("Write error: {:?}", e); - // break; - // } - // }, + client + .send_message( + "pico/test", + &msg, + rust_mqtt::packet::v5::publish_packet::QualityOfService::QoS0, + false, + ) + .await + .unwrap(); } } } } - -// struct Disconnected; -// -// impl From for Disconnected { -// fn from(value: EndpointError) -> Self { -// match value { -// EndpointError::BufferOverflow => panic!("Buffer overflow"), -// EndpointError::Disabled => Self {}, -// } -// } -// } -// -// /// Echo back received packets -// async fn echo<'d>( -// class: &mut CdcAcmClass<'d, Driver<'d, peripherals::USB>>, -// sender: &Sender<'static, NoopRawMutex, Message, 1>, -// ) -> Result<(), Disconnected> { -// let mut buf = [0; 64]; -// loop { -// let n = class.read_packet(&mut buf).await?; -// let data = from_utf8_mut(&mut buf[..n]).unwrap(); -// -// data.make_ascii_uppercase(); -// -// sender -// .send(Message { -// data: buf, -// length: n, -// }) -// .await; -// } -// }