From cc92c82ac9f9c5ada5dcbda421d9f5d1e5a6b262 Mon Sep 17 00:00:00 2001 From: Empire Phoenix Date: Sun, 26 Apr 2026 19:46:46 +0200 Subject: [PATCH] Fix incorrect `spawn` function call and update dependencies - Corrected usage of `spawner.spawn` by fixing misplaced error propagation. - Updated `Cargo.lock` with new and upgraded dependencies, including `base64`, `darling`, and `smoltcp` upgrades. --- Hardware/Controller_Case/flap_v2.3mf | Bin 0 -> 4467 bytes Software/MainBoard/rust/Cargo.lock | 670 ++++++++++++------ Software/MainBoard/rust/Cargo.toml | 50 +- Software/MainBoard/rust/src/hal/esp.rs | 381 +++++----- Software/MainBoard/rust/src/hal/mod.rs | 36 +- Software/MainBoard/rust/src/main.rs | 8 +- .../MainBoard/rust/src/webserver/post_json.rs | 6 +- 7 files changed, 696 insertions(+), 455 deletions(-) create mode 100644 Hardware/Controller_Case/flap_v2.3mf diff --git a/Hardware/Controller_Case/flap_v2.3mf b/Hardware/Controller_Case/flap_v2.3mf new file mode 100644 index 0000000000000000000000000000000000000000..7b1a3dac2e2ba2830aeeedd5c88e057de73e0a26 GIT binary patch literal 4467 zcmZ`-c{r5q_n$GwHe}Dfy|TvGDZA`sUqi^gmt`hor({jUD3P6P*~VZH8Y9`V4cW6K zWF*@l{OVip@49;5@ArAG=RWtj?{m&|-=A}yKR(A;A4Dt)0078-d;ma8NKyUy?}rA! z0FcrUlXCIB?c(YK{m%#l&;Z7a{$mQrr}`yJ>}FDVb!o%xFP(KsihW(w$FalxI`XcVuy~gB)2@2G0S&Aqylr-OaY=a*c~m!-+#wgg9Qyhm z3wk|F(FwSAD-U%t=_d8pS3E)T3@+cUGU(PjfpSA%F+^=n z+=`riom*OY3eW2BV?sYd^=$0@&fX8CxAeR3x+oq`RU3&dZ-qA8xSeAb$Q-*i z<`%v6Y;L9h^^q97w`{A^w+XV;WbZR%TUTqe4LWM$I(WrZN&oasps+^as;XhXTiu+9 zVcCA-zSxa(%klzQML$J)NhhIi>{cMKylmwo^@izf!$Cap*2V`#wv4-xq5KXa_Dp3x z9;hi#xp67yW(&5O9IR_2LR0}%7dOzaz`If7q7((;N(jueKzTKd{v|PYqyUUEgZZ~HCb;vOu zAc8tbZREUu%F@T^fRdm<`XR}bI+_ynrI24%YCZ2!;&?cnd~=$$H#QHP9u~dxUg9xj zqMn*A-KvAd6L?@UkLL=w^sXjK3Qde+vK#$Lyz&%L6=pzn{NG;>xs&*D` zha|>bnhrv0izBd+Vy-uYs>t4jvGhOUS!YR_sP?6cbyGE z^v(Q+d5dHO$p7YW|C3J`xrEJ-EDPz%wht3#oJ5A2BPj7 zmb$KgOAl&o50nwr6{=dGQOGUjdpybNuLKLp6F^nx8mwvNGF-xK`-iVSx&c$k!32E{AQqCVm45n3=5(#8lJl>op3;=7fZON~O-v&J-@~yc%PW7boq6^)|*JxC1j)8Lr`+ePOhh(2L*vv;?+4bK9HyI1;g^)I~~B zw7uScrQJuBm%Z9ccJ(;eSofLwJH;_G?1aMS{m+u~V2ZnCk z=Y39pza496#iGBsPF&%=oG+GNOtum<;tr_;7_ZW?%A86(8Fv(X!dtV0*$GI5j8fXH3EJ$Q^O{kk$ z6WPI>69B-9_#|uY%&AG|s1yx2qelfAfN&|#40SGPy;;YgMg@st^B;6{ubzBq4LT&!>YMi0a-$7|(%&OjWipUC^))CX2Kn`I=I8ltIu}Nd0(AaY ziKs3r7tyyJdK{f}%@hoLH)4;u_ecbTOzMbBIbY5!^e5fDUUw_x$KY`j|!jK8JCPxRvBHC!n%LpY0;nYrRF-*iY9Hs6-+hOy0Ng zrbqr}PYtKdI-Cj`HKGHc%x6RjJAj3WdGlMrF;zqpqBQwwEOz^|F+PZoPS*Jc*Z{&f zyARcHea_oj_bM-<=wt4nKqYht)o5sy-(*x==q0ZLw#ox&X93n`9ZCZslNPwj&`VOz zw4b*;r*5LbSTjm~CzlVIeEd$b+uWGiSjoPGp2nkE;Cj?CcNG=-F9LTIYEy|QxIAZ5 zCUz2fgllzjuNu~96B8`$p=;Q;Z#H@Wz#rbgb40&=@A8#}-?%6;lR!j_9}K!IE*C)D z3Vg7EclARUziGF(^r5UdoP{V#N601_iEV?gZd5BI$1i08f%w`=)e|MaYMOLKWj3S8 zs=B57`qm}Y_SOXb$8wEw2tz*O>3Y4Hdm^FP${wEsgG#PVtb~yGRIC*|@r{;0o`gQ5 z1VSh`OSQe3OM;oK!$PQZ*;u9CY4==EBjJkk^ZNjVgB^gj2aHvZi0xDvSb~kduCfgL z_&Wu|zr6ZJ)d~ci*u=6HLo~kTKJP(HLc6pUSZX|!IY#aaxuso@*a7!>n5?#WUcT!2 z08-O!iSGbzejRRMsC|Cyhrcg=K}p14nhZCXas}cTDLd=0A*nJ18DN)5;2R2tCM-%2 z5&1_E7^|f4JYlL**1|7u$zH)*e5fFibS^C4l@K6Hbpd z#iJ)KU2qJ3?DJ&_QT4fM37Lh=Pa*FHv!=Sthr+0GlOTakyxAdF-pU_;mun4fdHx=y zQ_YOcKH(3RQV>yIA&6Ff*>eMjbNubmR;ciSA5II02#Z$VkSR2&tbp(@6 z5E`{koI>pNCA%xz<$_+%!)IXFjTQm= z)TrvcZ=Z-99MZN;hb36jbq@n;!7A+lw#ZOMK3F!nUb+)#kU`B2xOpwECGAyR7G)dm z;>DK?4=7FRR}|x=WTIn>KvQ>g0Q!~r?%HqVhpkjpS9Hh}VHx03r+TzB>lG=J#D?nTbC~<&1JY)wyBxUnG%qme_uT5k% zzs~2_2Hn543Z~c=r^tHYp(7e?BXu*9f_yxi0b&(F=EU@Qb?=MyR{`-nD+W)HWuD{L z&?3iG&!qSr%*A>S<5y2rsmNDo6XSOly~q|X$EYqp@-FgX;w-o}*xpORnQX89!j@1jB8#LWkRB#36b;dA)fWN9JZ}|Nqz*FHq0D( z=u?awiT}o`KR9_kpGvp5h0=kFS<}p~`CIL+{em_UA>w4Yi-WAQk#v^xx2lw%OmK&^Xwqh* z)pa_9b4MC8DwEq5uf*k29Jn_|?R+0g>fsro$MR?rloC3zB{l8Zk3URzWOqI^(WJPr zKvwD9>&|=Yjc4g)CaqEBf|U3TacT^jW=0K>RmPDf>p0>jT+yfA4yi8ZR1Q|YMn)>K zoi9QQn&@uhB7xxC#$i~{J@T%y-Up69pWWO~jU z{Tx5I1*@r2P`C6Pf{e1Ck(Tg=Zi%&(?WT?5a2F+!3@1)eQqgMTq)5EZbJfW==qP}9 zF$dtp^g=)|v=0FRdJmqjVmwG2F;mT7bU<9SVQf~#o#5Pw4BaS+ogULTq*h;;s54p@ zC~HU=>Dag&pz+k7oSF&#l$d$<@T+f{W3@Kmg?fP6n9`beEFcBN+>*CgAA3ifbBl0; zs&2CYoAV*0qpOC$BbeHlojs3&2=|##B7unih=wK-b%Z^-m)D1UbKc4nF+OnqZF0Bj z^n=8A%BfwE@hAXmR22lJ3Su7Nk9!M;8}NuD{;FLH=gmgL)Wo8s*D`3p`eyW{eueFzTAyi;%dWX*UD@f~U|q)ZI}FwYrOKu9CZ_RA$?5 z+ZbA`3rO}`X;m>mx&S#P7f@IeoQ5u|>_6UT;34P4j=zl-R2I%00N9sFYN+CaZtXp5 zX1~XX3>i}@pQ&iI;^zjMsy$VgoY8ELH#ADc^bh1V9PnHd>)8#F?Uxxn9;lNZm;a(7 z$Ypa!WjrW(h}EEt9ENGydr5d`GLN)h9`{rqdz&NFJVZSC+@?l8iGXhS{+fcdtAxs7 zVe)kK@#CaJ>8b29xR!Vz&D8r3L+5=NW8+>|X(QS}e?k_BTh96$GRP0e90FW@0>z*| z$DdF^fWI(m_zjioqd|&pahkYciVpQD^xSyNL+1A29pUikG{4B&BOYDNg?UjyLC(8w z2hN}Fgie{v3YB&#fL(di(xf_A?8+S9ZH1DSEqjGDkCscho2tZJBJ}Zr!-sA?%D!%7 zS=LP&@TF1NCif_rgT&Xbm3LOBrH3#GD1}DU7DkX9$4+-?ya>yIEQ?yEO!#>r`^;7n z2ShJFS*<#GphbgB^ ze>Vk~|J4-u?E?5`Sf7MM x{a*W9QvOamnCAceNPo^~X@BWIw~h6|BtJFKkN2njPxJtQ{{skmANc?P literal 0 HcmV?d00001 diff --git a/Software/MainBoard/rust/Cargo.lock b/Software/MainBoard/rust/Cargo.lock index 20cba2d..eadc66f 100644 --- a/Software/MainBoard/rust/Cargo.lock +++ b/Software/MainBoard/rust/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + [[package]] name = "allocator-api2" version = "0.3.1" @@ -61,6 +70,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bincode" version = "2.0.1" @@ -113,6 +128,15 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "bumpalo" version = "3.19.0" @@ -207,6 +231,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" +[[package]] +name = "cordyceps" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" +dependencies = [ + "loom", + "tracing", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -264,6 +298,16 @@ dependencies = [ "darling_macro 0.21.3", ] +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + [[package]] name = "darling_core" version = "0.20.11" @@ -291,6 +335,19 @@ dependencies = [ "syn 2.0.110", ] +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.110", +] + [[package]] name = "darling_macro" version = "0.20.11" @@ -313,6 +370,17 @@ dependencies = [ "syn 2.0.110", ] +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote", + "syn 2.0.110", +] + [[package]] name = "delegate" version = "0.13.4" @@ -339,6 +407,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ + "block-buffer", "crypto-common", ] @@ -348,6 +417,26 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eb8886ecca3498d7a9dab291fc7c9dc293c7b35a74d60065a9ba0d510f5d39f" +[[package]] +name = "docsplay" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8547ea80db62c5bb9d7796fcce5e6e07d1136bdc1a02269095061e806758fab4" +dependencies = [ + "docsplay-macros", +] + +[[package]] +name = "docsplay-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11772ed3eb3db124d826f3abeadf5a791a557f62c19b123e3f07288158a71fdd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.110", +] + [[package]] name = "document-features" version = "0.2.12" @@ -369,32 +458,32 @@ dependencies = [ [[package]] name = "edge-dhcp" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ccd3a181a33c710e07c3f04623d7a11e9969b1e44a7276ead7873b049720cb" +checksum = "2e0b32c831ced877a78378312fe0b6f7cdd5759f3ba272578f582ff9bba5291d" dependencies = [ "edge-nal", "edge-raw", "embassy-futures", - "embassy-time 0.4.0", - "heapless 0.8.0", + "embassy-time", + "heapless 0.9.2", "num_enum", - "rand_core 0.6.4", + "rand_core 0.9.3", ] [[package]] name = "edge-http" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f9b24aa48b6e43e6316a02bed8291f8a856cb6d4e63a2f533d35d74d04141d" +checksum = "7b983fa8c1e7fa8a104583f0798fecdda484b9976b4638b0b6d309cd0a87720e" dependencies = [ - "base64", + "base64 0.22.1", "edge-nal", "embassy-futures", "embassy-sync 0.7.2", - "embassy-time 0.4.0", - "embedded-io-async 0.6.1", - "heapless 0.8.0", + "embassy-time", + "embedded-io-async 0.7.0", + "heapless 0.9.2", "httparse", "log", "sha1_smol", @@ -402,32 +491,32 @@ dependencies = [ [[package]] name = "edge-nal" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac19c3edcdad839c71cb919cd09a632d9915d630760b37f0b74290188c08f248" +checksum = "f3c7d7163586cb9d457a34561a644aa957ce870226729bf6c9c8beeaead7e0d8" dependencies = [ - "embassy-time 0.4.0", - "embedded-io-async 0.6.1", + "embassy-time", + "embedded-io-async 0.7.0", ] [[package]] name = "edge-nal-embassy" -version = "0.6.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252f89adf4f0016631977bec3ba50d768263a3a9fa9f023b4087088a619568ce" +checksum = "7f66d0fa7b3b11c25646fae5dc15f3f3830c6127c39743cf2d54ba96110a5330" dependencies = [ "edge-nal", "embassy-futures", - "embassy-net", - "embedded-io-async 0.6.1", - "heapless 0.8.0", + "embassy-net 0.8.0", + "embedded-io-async 0.7.0", + "heapless 0.9.2", ] [[package]] name = "edge-raw" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6207c84e9bc8df8ef3c155196df290f2a51f010bd60c2e78366e51979988bdb5" +checksum = "466dfce9c2172a4e947b81b556f1f07a86029fbac679e323cfb66c738cc2faea" [[package]] name = "eeprom24x" @@ -441,13 +530,13 @@ dependencies = [ [[package]] name = "embassy-embedded-hal" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8" +checksum = "b0641612053b2f34fc250bb63f6630ae75de46e02ade7f457268447081d709ce" dependencies = [ "embassy-futures", "embassy-hal-internal", - "embassy-sync 0.7.2", + "embassy-sync 0.8.0", "embedded-hal 0.2.7", "embedded-hal 1.0.0", "embedded-hal-async", @@ -458,10 +547,11 @@ dependencies = [ [[package]] name = "embassy-executor" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06070468370195e0e86f241c8e5004356d696590a678d47d6676795b2e439c6b" +checksum = "5d0d3b15c9d7dc4fec1d8cb77112472fb008b3b28c51ad23838d83587a6d2f1e" dependencies = [ + "cordyceps", "critical-section", "document-features", "embassy-executor-macros", @@ -471,9 +561,9 @@ dependencies = [ [[package]] name = "embassy-executor-macros" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfdddc3a04226828316bf31393b6903ee162238576b1584ee2669af215d55472" +checksum = "d11a246f53de5f97a387f40ac24726817cd0b6f833e7603baac784f29d6ff276" dependencies = [ "darling 0.20.11", "proc-macro2", @@ -495,29 +585,46 @@ checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" [[package]] name = "embassy-hal-internal" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" +checksum = "7f10ce10a4dfdf6402d8e9bd63128986b96a736b1a0a6680547ed2ac55d55dba" dependencies = [ "num-traits", ] [[package]] name = "embassy-net" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558a231a47e7d4a06a28b5278c92e860f1200f24821d2f365a2f40fe3f3c7b2" +checksum = "71f0aa32082b7df00164f485322d6edab59122c9718b363b07ec23424c2c06a0" dependencies = [ "document-features", "embassy-net-driver", "embassy-sync 0.7.2", - "embassy-time 0.5.0", - "embedded-io-async 0.6.1", + "embassy-time", + "embedded-io-async 0.7.0", "embedded-nal-async", "heapless 0.8.0", "log", "managed", - "smoltcp", + "smoltcp 0.12.0", +] + +[[package]] +name = "embassy-net" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "347bc855bdbdf50ed9c5a1d80e8204badb0ba149b8732dde38e1e9708ed9d313" +dependencies = [ + "document-features", + "embassy-net-driver", + "embassy-sync 0.8.0", + "embassy-time", + "embedded-io-async 0.7.0", + "embedded-nal-async", + "heapless 0.9.2", + "managed", + "smoltcp 0.13.0", ] [[package]] @@ -552,30 +659,28 @@ dependencies = [ "futures-core", "futures-sink", "heapless 0.8.0", +] + +[[package]] +name = "embassy-sync" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bbd85cf5a5ae56bdf26f618364af642d1d0a4e245cdd75cd9aabda382f65a81" +dependencies = [ + "cfg-if", + "critical-section", + "embedded-io-async 0.7.0", + "futures-core", + "futures-sink", + "heapless 0.9.2", "log", ] [[package]] name = "embassy-time" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" -dependencies = [ - "cfg-if", - "critical-section", - "document-features", - "embassy-time-driver", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "futures-util", -] - -[[package]] -name = "embassy-time" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa65b9284d974dad7a23bb72835c4ec85c0b540d86af7fc4098c88cff51d65" +checksum = "592b0c143ec626e821d4d90da51a2bd91d559d6c442b7c74a47d368c9e23d97a" dependencies = [ "cfg-if", "critical-section", @@ -590,9 +695,9 @@ dependencies = [ [[package]] name = "embassy-time-driver" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0a244c7dc22c8d0289379c8d8830cae06bb93d8f990194d0de5efb3b5ae7ba6" +checksum = "6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9" dependencies = [ "document-features", ] @@ -682,11 +787,11 @@ dependencies = [ [[package]] name = "embedded-nal-async" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76959917cd2b86f40a98c28dd5624eddd1fa69d746241c8257eac428d83cb211" +checksum = "eb5a1bd585135d302f8f6d7de329310938093da6271b37a6c94b8798795c0c6d" dependencies = [ - "embedded-io-async 0.6.1", + "embedded-io-async 0.7.0", "embedded-nal", ] @@ -744,9 +849,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "esp-alloc" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "641e43d6a60244429117ef2fa7a47182120c7561336ea01f6fb08d634f46bae1" +checksum = "46ced060d4085858283df950b80a4da2348e1707d7d07b1e966308582dae79f5" dependencies = [ "allocator-api2", "cfg-if", @@ -760,9 +865,9 @@ dependencies = [ [[package]] name = "esp-backtrace" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3318413fb566c7227387f67736cf70cd74d80a11f2bb31c7b95a9eb48d079669" +checksum = "37950e24b2dfd98f1581102d1798281d4d9547af881e6bffc2c2b534c026ec8f" dependencies = [ "cfg-if", "document-features", @@ -776,9 +881,9 @@ dependencies = [ [[package]] name = "esp-bootloader-esp-idf" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a56964ab5479ac20c9cf76fa3b0d3f2233b20b5d8554e81ef5d65f63c20567" +checksum = "35ffc117c3a9859835d89d0e90f5ee9886ce2264a71a849a7a22ab5308f6653c" dependencies = [ "cfg-if", "document-features", @@ -794,9 +899,9 @@ dependencies = [ [[package]] name = "esp-config" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102871054f8dd98202177b9890cb4b71d0c6fe1f1413b7a379a8e0841fc2473c" +checksum = "4d9b92fd9cfb0b4f8f1b6219b9763269a335571e307b014903b8201619374b80" dependencies = [ "document-features", "esp-metadata-generated", @@ -807,9 +912,9 @@ dependencies = [ [[package]] name = "esp-hal" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54786287c0a61ca0f78cb0c338a39427551d1be229103b4444591796c579e093" +checksum = "6af8fa8216bc126941bd43b5a200a50eab16e43881ccd0dd0b6792f4a82805f0" dependencies = [ "bitfield", "bitflags 2.10.0", @@ -821,7 +926,7 @@ dependencies = [ "document-features", "embassy-embedded-hal", "embassy-futures", - "embassy-sync 0.7.2", + "embassy-sync 0.8.0", "embedded-can", "embedded-hal 1.0.0", "embedded-hal-async", @@ -849,6 +954,7 @@ dependencies = [ "nb 1.1.0", "paste", "portable-atomic", + "rand_core 0.10.1", "rand_core 0.6.4", "rand_core 0.9.3", "riscv", @@ -860,9 +966,9 @@ dependencies = [ [[package]] name = "esp-hal-procmacros" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e025a7a7a0affdb4ff913b5c4494aef96ee03d085bf83c27453ae3a71d50da6" +checksum = "6aebfabb2c21bec45e575e4f6cb6bb7aa8e1b33e7ac45b5dffa0f9d33ff59105" dependencies = [ "document-features", "object", @@ -875,31 +981,33 @@ dependencies = [ [[package]] name = "esp-metadata-generated" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a93e39c8ad8d390d248dc7b9f4b59a873f313bf535218b8e2351356972399e3" +checksum = "42c2ee95b945a4780796e4359e72c033aed3b45073880e8029458f538532db8a" [[package]] name = "esp-phy" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1facf348e1e251517278fc0f5dc134e95e518251f5796cfbb532ca226a29bf" +checksum = "e7c0a29815cd105ae1a02f3d0c6e7aafda9504a41effae17fac4c3f827719228" dependencies = [ "cfg-if", "document-features", + "embassy-sync 0.8.0", "esp-config", "esp-hal", "esp-metadata-generated", "esp-sync", - "esp-wifi-sys", + "esp-wifi-sys-esp32c6", + "esp32c6", "log", ] [[package]] name = "esp-println" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a30e6c9fbcc01c348d46706fef8131c7775ab84c254a3cd65d0cd3f6414d592" +checksum = "42dee1e9ac7c3539bf6464db1707b0edd7557168f98278cf3c84fe70e63c6ce6" dependencies = [ "document-features", "esp-metadata-generated", @@ -910,14 +1018,16 @@ dependencies = [ [[package]] name = "esp-radio" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c4de2f8907b73c9b891fbda65286a86d34fced4b856f36a7896c211f2f265" +checksum = "23fbff98b06a96b6ce3791ecec5c668524052a068e23aacd23afe17ddba844ce" dependencies = [ "allocator-api2", "cfg-if", + "docsplay", "document-features", "embassy-net-driver", + "embassy-sync 0.8.0", "embedded-io 0.6.1", "embedded-io 0.7.1", "embedded-io-async 0.6.1", @@ -931,7 +1041,14 @@ dependencies = [ "esp-phy", "esp-radio-rtos-driver", "esp-sync", - "esp-wifi-sys", + "esp-wifi-sys-esp32", + "esp-wifi-sys-esp32c2", + "esp-wifi-sys-esp32c3", + "esp-wifi-sys-esp32c6", + "esp-wifi-sys-esp32h2", + "esp-wifi-sys-esp32s2", + "esp-wifi-sys-esp32s3", + "esp32c6", "heapless 0.9.2", "instability", "log", @@ -943,15 +1060,20 @@ dependencies = [ [[package]] name = "esp-radio-rtos-driver" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "543bc31d1851afd062357e7810c1a9633f282fd3993583499a841ab497cbca6c" +checksum = "0bd75cd9073a90ffaa53db0bf17df7dc14164f2407a6ff36c725d2d1f78ff494" +dependencies = [ + "cfg-if", + "esp-sync", + "portable-atomic", +] [[package]] name = "esp-riscv-rt" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502744a5b1e7268d27fd2a4e56ad45efe42ead517d6c517a6961540de949b0ee" +checksum = "66a814ae91452de56a5e74f69aebfee40579511756837d3774a56fd24cf0ab79" dependencies = [ "document-features", "riscv", @@ -960,26 +1082,27 @@ dependencies = [ [[package]] name = "esp-rom-sys" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd66cccc6dd2d13e9f33668a57717ab14a6d217180ec112e6be533de93e7ecbf" +checksum = "eae852ccb08971155023d1371c96d5490cbc26860f06aee2d629ef73f1a890c3" dependencies = [ "cfg-if", "document-features", "esp-metadata-generated", + "esp32c6", ] [[package]] name = "esp-rtos" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ec711c8d06e79c67b75d01595539e86b0aac209643af98ca87a12250428b3" +checksum = "551f90766e1527edaa0c91e8d559e9e2a60397b545e93357ac61fb31845e5712" dependencies = [ "allocator-api2", "cfg-if", "document-features", "embassy-executor", - "embassy-sync 0.7.2", + "embassy-sync 0.8.0", "embassy-time-driver", "embassy-time-queue-utils", "esp-config", @@ -987,15 +1110,18 @@ dependencies = [ "esp-hal-procmacros", "esp-metadata-generated", "esp-radio-rtos-driver", + "esp-rom-sys", "esp-sync", "portable-atomic", + "riscv", + "xtensa-lx", ] [[package]] name = "esp-storage" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1495fc1f5549bdd840b52d9ceb201746200e1620d2636f46958c11e765623b80" +checksum = "4cf2b3f00c9f94b27c62a4f5296b19470c3a083c687c8146e554a459f9bee596" dependencies = [ "document-features", "embedded-storage", @@ -1008,96 +1134,143 @@ dependencies = [ [[package]] name = "esp-sync" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44974639b4e88914f83fe60d2832c00276657d7d857628fdfc966cc7302e8a8" +checksum = "b4736bfbbb9e3f6353344e14fc61b6d18d3b877c3286914cf8c0a037be0ed224" dependencies = [ "cfg-if", "document-features", "embassy-sync 0.6.2", "embassy-sync 0.7.2", + "embassy-sync 0.8.0", "esp-metadata-generated", "riscv", "xtensa-lx", ] [[package]] -name = "esp-wifi-sys" -version = "0.8.1" +name = "esp-wifi-sys-esp32" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b6544f6f0cb86169d1f93ba2101a8d50358a040c5043676ed86b793e09b12c" +checksum = "2556f38f5292d9735d4e156e276815fc001c9a0a2be0544a575c5fb867129d24" +dependencies = [ + "log", +] + +[[package]] +name = "esp-wifi-sys-esp32c2" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b3eb3435dae84de611d4384639e61eed862818223e93fa70c525cb6a70127f" +dependencies = [ + "log", +] + +[[package]] +name = "esp-wifi-sys-esp32c3" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b290846b53db9a3965866964260220b67f2c41cc2dbc0b377e7136239fe168a7" +dependencies = [ + "log", +] + +[[package]] +name = "esp-wifi-sys-esp32c6" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57649401fc2f906a16e2268de88693724a125adcd0eba89b594a157affcee2d5" +dependencies = [ + "log", +] + +[[package]] +name = "esp-wifi-sys-esp32h2" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cf1be2e311f4b4e75b5507c6b007ffc3fcb8c6cb57f83cc6a9569ecdcf58484" +dependencies = [ + "log", +] + +[[package]] +name = "esp-wifi-sys-esp32s2" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a9a7f1bc51e7026c3012cda4f11d8799e5e0c0bb3be85797462219def6c26e" +dependencies = [ + "log", +] + +[[package]] +name = "esp-wifi-sys-esp32s3" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8321f44b57d8112cbd8607cc83b85783b9195289acb45532728e3e229e7786" dependencies = [ - "anyhow", "log", ] [[package]] name = "esp32" -version = "0.39.0" +version = "0.40.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b76170a463d18f888a1ad258031901036fd827a9ef126733053ba5f8739fb0c8" +checksum = "5726e07689249d1a2cb7c492077bc424837fb68a64f7eb5d46569325352e9428" dependencies = [ - "critical-section", "vcell", ] [[package]] name = "esp32c2" -version = "0.28.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e62cf8932966b8d445b6f1832977b468178f0a84effb2e9fda89f60c24d45aa3" +checksum = "5ef0b623533bbaa37e348c18b6b41cfd5b47c3cb64a4b9e44f0295941d62aa2e" dependencies = [ - "critical-section", "vcell", ] [[package]] name = "esp32c3" -version = "0.31.0" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356af3771d0d6536c735bf71136594f4d1cbb506abf6e0c51a6639e9bf4e7988" +checksum = "21e89ed62cf6c043a6d29c520b02a13b359ec8a75d67b65d4330ed717d15fe97" dependencies = [ - "critical-section", "vcell", ] [[package]] name = "esp32c6" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5e511df672d79cd63365c92045135e01ba952b6bddd25b660baff5e1110f6b" +checksum = "c58f34ff2633968c12125efc7f4f8f101078d5d34c7cb60eab82268db20986f9" dependencies = [ - "critical-section", "vcell", ] [[package]] name = "esp32h2" -version = "0.18.0" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4a50bbd1380931e095e0973b9b12f782a9c481f2edf1f7c42e7eb4ff736d6d" +checksum = "c5bab026020ed4606ce113b6fde598dbc48f7eefcc46e9469ece77cc2b1aa4be" dependencies = [ - "critical-section", "vcell", ] [[package]] name = "esp32s2" -version = "0.30.0" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98574d4c577fbe888fe3e6df7fc80d25a05624d9998f7d7de1500ae21fcca78f" +checksum = "d0ad6f21cdf6ec7b06b7f7e0fbe51f0d975fd6a5fa67c3f8a5a910d3981af531" dependencies = [ - "critical-section", "vcell", ] [[package]] name = "esp32s3" -version = "0.34.0" +version = "0.35.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1810d8ee4845ef87542af981e38eb80ab531d0ef1061e1486014ab7af74c337a" +checksum = "8b4b8c4e4d9f187553ecdb7173edec7b2deb2beea106eedefecdb1654b8ee25a" dependencies = [ - "critical-section", "vcell", ] @@ -1164,6 +1337,21 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +[[package]] +name = "generator" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows-link", + "windows-result", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1219,7 +1407,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" dependencies = [ "hash32 0.3.1", - "serde", "stable_deref_trait", ] @@ -1239,12 +1426,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - [[package]] name = "httparse" version = "1.10.1" @@ -1312,11 +1493,11 @@ dependencies = [ [[package]] name = "instability" -version = "0.3.9" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" +checksum = "5eb2d60ef19920a3a9193c3e371f726ec1dafc045dac788d0fb3704272458971" dependencies = [ - "darling 0.20.11", + "darling 0.23.0", "indoc", "proc-macro2", "quote", @@ -1363,6 +1544,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "lib-bms-protocol" version = "0.1.0" @@ -1410,6 +1597,19 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "managed" version = "0.8.0" @@ -1417,24 +1617,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" [[package]] -name = "mcutie" -version = "0.3.0" -source = "git+https://github.com/empirephoenix/mcutie.git#b25aac28221db1c098634ad705a9860d0b19d140" +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "embassy-futures", - "embassy-net", - "embassy-sync 0.7.2", - "embassy-time 0.5.0", - "embedded-io 0.6.1", - "embedded-io-async 0.6.1", - "heapless 0.7.17", - "hex", - "log", - "mqttrs", - "once_cell", - "pin-project", - "serde", - "serde-json-core", + "regex-automata", ] [[package]] @@ -1452,15 +1640,6 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "mqttrs" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62fc2b40eee1386c55479d534ec95a668e0562d54c6d1dc83bb1962469fec8a7" -dependencies = [ - "heapless 0.7.17", -] - [[package]] name = "nb" version = "0.1.3" @@ -1477,14 +1656,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" [[package]] -name = "no-panic" -version = "0.1.36" +name = "nu-ansi-term" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f967505aabc8af5752d098c34146544a43684817cdba8f9725b292530cabbf53" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.110", + "windows-sys", ] [[package]] @@ -1557,10 +1734,6 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "onewire" @@ -1637,26 +1810,6 @@ dependencies = [ "siphasher", ] -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.110", -] - [[package]] name = "pin-project-lite" version = "0.2.16" @@ -1689,9 +1842,9 @@ dependencies = [ "eeprom24x", "embassy-embedded-hal", "embassy-executor", - "embassy-net", - "embassy-sync 0.7.2", - "embassy-time 0.5.0", + "embassy-net 0.8.0", + "embassy-sync 0.8.0", + "embassy-time", "embedded-can", "embedded-hal 1.0.0", "embedded-savegame", @@ -1709,10 +1862,8 @@ dependencies = [ "ina219", "lib-bms-protocol", "log", - "mcutie", "measurements", "nb 1.1.0", - "no-panic", "onewire", "option-lock", "pca9535", @@ -1807,6 +1958,12 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "regex" version = "1.12.2" @@ -1823,6 +1980,8 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] @@ -1933,6 +2092,12 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -1955,17 +2120,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-json-core" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b81787e655bd59cecadc91f7b6b8651330b2be6c33246039a65e5cd6f4e0828" -dependencies = [ - "heapless 0.8.0", - "ryu", - "serde", -] - [[package]] name = "serde_core" version = "1.0.228" @@ -2018,6 +2172,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -2030,6 +2193,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + [[package]] name = "smoltcp" version = "0.12.0" @@ -2043,6 +2212,19 @@ dependencies = [ "managed", ] +[[package]] +name = "smoltcp" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac729b0a77bd092a3f06ddaddc59fe0d67f48ba0de45a9abe707c2842c7f8767" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "cfg-if", + "heapless 0.9.2", + "managed", +] + [[package]] name = "sntpc" version = "0.6.1" @@ -2050,7 +2232,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d84c42dedf8b01d52b62272684741866938260e74b9e58851f680b2a92854b" dependencies = [ "cfg-if", - "embassy-net", + "embassy-net 0.9.1", "log", ] @@ -2126,7 +2308,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50" dependencies = [ - "base64", + "base64 0.13.1", "proc-macro2", "quote", "syn 1.0.109", @@ -2164,6 +2346,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + [[package]] name = "time" version = "0.3.44" @@ -2227,6 +2418,67 @@ dependencies = [ "winnow", ] +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.110", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + [[package]] name = "typenum" version = "1.19.0" @@ -2274,6 +2526,12 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vcell" version = "0.1.3" @@ -2452,9 +2710,9 @@ dependencies = [ [[package]] name = "xtensa-lx-rt" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8709f037fb123fe7ff146d2bce86f9dc0dfc53045c016bfd9d703317b6502845" +checksum = "409a9b4629d429e995cde4dfbd9fe562ccae66f7624514e200733fc5d0ea8905" dependencies = [ "document-features", "xtensa-lx", diff --git a/Software/MainBoard/rust/Cargo.toml b/Software/MainBoard/rust/Cargo.toml index 2bc8ad7..5a69d8e 100644 --- a/Software/MainBoard/rust/Cargo.toml +++ b/Software/MainBoard/rust/Cargo.toml @@ -46,42 +46,34 @@ canapi = { path = "../../Shared/canapi" } # Platform and ESP-specific runtime/boot/runtime utilities log = "0.4.28" -esp-bootloader-esp-idf = { version = "0.4.0", features = ["esp32c6", "log-04"] } -esp-hal = { version = "1.0.0", features = ["esp32c6", "log-04"] } -esp-rtos = { version = "0.2.0", features = ["esp32c6", "embassy", "esp-radio"] } -esp-backtrace = { version = "0.18.1", features = ["esp32c6", "panic-handler", "println", "colors", "custom-halt"] } -esp-println = { version = "0.16.1", features = ["esp32c6", "log-04", "auto"] } -esp-storage = { version = "0.8.1", features = ["esp32c6"] } -esp-radio = { version = "0.17.0", features = ["esp32c6", "log-04", "wifi", "unstable"] } -esp-alloc = { version = "0.9.0", features = ["esp32c6", "internal-heap-stats"] } +esp-bootloader-esp-idf = { version = "0.5.0", features = ["esp32c6", "log-04"] } +esp-hal = { version = "1.1.0", features = ["esp32c6", "log-04"] } +esp-rtos = { version = "0.3.0", features = ["esp32c6", "embassy", "esp-radio"] } +esp-backtrace = { version = "0.19.0", features = ["esp32c6", "panic-handler", "println", "colors", "custom-halt"] } +esp-println = { version = "0.17.0", features = ["esp32c6", "log-04", "auto"] } +esp-storage = { version = "0.9.0", features = ["esp32c6"] } +esp-radio = { version = "0.18.0", features = ["esp32c6", "log-04", "wifi", "unstable"] } +esp-alloc = { version = "0.10.0", features = ["esp32c6", "internal-heap-stats"] } # Async runtime (Embassy core) -embassy-executor = { version = "0.9.1", features = ["log", "nightly"] } -embassy-time = { version = "0.5.0", features = ["log"], default-features = false } -embassy-sync = { version = "0.7.2", features = ["log"] } +embassy-executor = { version = "0.10.0", features = ["log", "nightly"] } +embassy-time = { version = "0.5.1", features = ["log"], default-features = false } +embassy-sync = { version = "0.8.0", features = ["log"] } # Networking and protocol stacks -embassy-net = { version = "0.7.1", features = [ - "dhcpv4", - "log", - "medium-ethernet", - "tcp", - "udp", - "proto-ipv4", - "dns" -] } +embassy-net = { version = "0.8.0", features = ["dhcpv4", "log", "medium-ethernet", "tcp", "udp", "proto-ipv4", "dns", "proto-ipv6"] } sntpc = { version = "0.6.1", default-features = false, features = ["log", "embassy-socket", "embassy-socket-ipv6"] } -edge-dhcp = "0.6.0" -edge-nal = "0.5.0" -edge-nal-embassy = "0.6.0" -edge-http = { version = "0.6.1", features = ["log"] } +edge-dhcp = "0.7.0" +edge-nal = "0.6.0" +edge-nal-embassy = "0.8.1" +edge-http = { version = "0.7.0", features = ["log"] } -esp32c6 = { version = "0.22.0" } +esp32c6 = { version = "0.23.2" } # Hardware abstraction traits and HAL adapters embedded-hal = "1.0.0" embedded-storage = "0.3.1" -embassy-embedded-hal = "0.5.0" +embassy-embedded-hal = "0.6.0" embedded-can = "0.4.1" nb = "1.1.0" @@ -118,12 +110,6 @@ async-trait = "0.1.89" option-lock = { version = "0.3.1", default-features = false } measurements = "0.11.1" -# Project-specific -mcutie = { version = "0.3.0", default-features = false, features = ["log", "homeassistant"] } -no-panic = "0.1.36" - -[patch.crates-io] -mcutie = { git = 'https://github.com/empirephoenix/mcutie.git' } #bq34z100 = { path = "../../bq34z100_rust" } [build-dependencies] diff --git a/Software/MainBoard/rust/src/hal/esp.rs b/Software/MainBoard/rust/src/hal/esp.rs index 5dfd2f4..d2a339d 100644 --- a/Software/MainBoard/rust/src/hal/esp.rs +++ b/Software/MainBoard/rust/src/hal/esp.rs @@ -15,7 +15,7 @@ use core::sync::atomic::Ordering; use embassy_executor::Spawner; use embassy_net::dns::DnsQueryType; use embassy_net::udp::{PacketMetadata, UdpSocket}; -use embassy_net::{DhcpConfig, Ipv4Cidr, Runner, Stack, StackResources, StaticConfigV4}; +use embassy_net::{DhcpConfig, IpAddress, Ipv4Cidr, Runner, Stack, StackResources, StaticConfigV4}; use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embassy_sync::mutex::Mutex; use embassy_sync::once_lock::OnceLock; @@ -34,17 +34,17 @@ use esp_hal::system::software_reset; use esp_hal::uart::Uart; use esp_hal::Blocking; use esp_println::println; -use esp_radio::wifi::{ - AccessPointConfig, AccessPointInfo, AuthMethod, ClientConfig, ModeConfig, ScanConfig, - ScanTypeConfig, WifiController, WifiDevice, WifiStaState, -}; +use esp_radio::wifi::ap::{AccessPointConfig, AccessPointInfo}; +use esp_radio::wifi::scan::{ScanConfig, ScanTypeConfig}; +use esp_radio::wifi::sta::StationConfig; +use esp_radio::wifi::{AuthenticationMethod, Config, Interface, WifiController}; use log::{error, info, warn}; -use mcutie::{ - Error, McutieBuilder, McutieReceiver, McutieTask, MqttMessage, PublishDisplay, Publishable, - QoS, Topic, -}; +// pub use mcutie::{ +// Error, McutieBuilder, McutieReceiver, McutieTask, MqttMessage, PublishDisplay, Publishable, +// QoS, Topic, +// }; use portable_atomic::AtomicBool; -use sntpc::{get_time, NtpContext, NtpTimestampGenerator}; +use sntpc::{get_time, NtpContext, NtpTimestampGenerator, NtpUdpSocket}; #[esp_hal::ram(unstable(rtc_fast), unstable(persistent))] static mut LAST_WATERING_TIMESTAMP: [i64; PLANT_COUNT] = [0; PLANT_COUNT]; @@ -69,6 +69,39 @@ struct Timestamp { stamp: DateTime, } +struct EmbassyNtpSocket<'a, 'b> { + socket: &'a UdpSocket<'b>, +} + +impl<'a, 'b> EmbassyNtpSocket<'a, 'b> { + fn new(socket: &'a UdpSocket<'b>) -> Self { + Self { socket } + } +} + +impl NtpUdpSocket for EmbassyNtpSocket<'_, '_> { + async fn send_to(&self, buf: &[u8], addr: SocketAddr) -> sntpc::Result { + self.socket + .send_to(buf, addr) + .await + .map_err(|_| sntpc::Error::Network)?; + Ok(buf.len()) + } + + async fn recv_from(&self, buf: &mut [u8]) -> sntpc::Result<(usize, SocketAddr)> { + let (len, metadata) = self + .socket + .recv_from(buf) + .await + .map_err(|_| sntpc::Error::Network)?; + let addr = match metadata.endpoint.addr { + IpAddress::Ipv4(ip) => IpAddr::V4(ip), + IpAddress::Ipv6(ip) => IpAddr::V6(ip), + }; + Ok((len, SocketAddr::new(addr, metadata.endpoint.port))) + } +} + // Minimal esp-idf equivalent for gpio_hold on esp32c6 via ROM functions extern "C" { fn gpio_pad_hold(gpio_num: u32); @@ -103,8 +136,8 @@ pub struct Esp<'a> { pub savegame: SavegameManager, pub rng: Rng, //first starter (ap or sta will take these) - pub interface_sta: Option>, - pub interface_ap: Option>, + pub interface_sta: Option>, + pub interface_ap: Option>, pub controller: Arc>>, pub boot_button: Input<'a>, @@ -248,6 +281,7 @@ impl Esp<'_> { socket.bind(123).context("Could not bind UDP socket")?; let context = NtpContext::new(Timestamp::default()); + let ntp_socket = EmbassyNtpSocket::new(&socket); let ntp_addrs = stack .dns_query(NTP_SERVER, DnsQueryType::A) @@ -263,7 +297,7 @@ impl Esp<'_> { let mut counter = 0; loop { let addr: IpAddr = ntp.into(); - let timeout = get_time(SocketAddr::from((addr, 123)), &socket, context) + let timeout = get_time(SocketAddr::from((addr, 123)), &ntp_socket, context) .with_timeout(Duration::from_millis((_max_wait_ms / 10) as u64)) .await; @@ -291,10 +325,10 @@ impl Esp<'_> { let mut lock = self.controller.try_lock()?; info!("start wifi scan lock"); let scan_config = ScanConfig::default().with_scan_type(ScanTypeConfig::Active { - min: Default::default(), - max: Default::default(), + min: esp_hal::time::Duration::from_millis(0), + max: esp_hal::time::Duration::from_millis(0), }); - let rv = lock.scan_with_config_async(scan_config).await?; + let rv = lock.scan_async(&scan_config).await?; info!("end wifi scan lock"); Ok(rv) } @@ -382,15 +416,13 @@ impl Esp<'_> { let stack = mk_static!(Stack, stack); let client_config = - ModeConfig::AccessPoint(AccessPointConfig::default().with_ssid(ssid.clone())); + Config::AccessPoint(AccessPointConfig::default().with_ssid(ssid.clone())); self.controller.lock().await.set_config(&client_config)?; - println!("start new"); - self.controller.lock().await.start()?; println!("start net task"); - spawner.spawn(net_task(runner)).ok(); + spawner.spawn(net_task(runner)?); println!("run dhcp"); - spawner.spawn(run_dhcp(*stack, gw_ip_addr)).ok(); + spawner.spawn(run_dhcp(*stack, gw_ip_addr)?); loop { if stack.is_link_up() { @@ -450,52 +482,28 @@ impl Esp<'_> { ); let stack = mk_static!(Stack, stack); - let client_config = ClientConfig::default() + let auth_method = if password.is_empty() { + AuthenticationMethod::None + } else { + AuthenticationMethod::Wpa2Personal + }; + let client_config = StationConfig::default() .with_ssid(ssid) - .with_auth_method(AuthMethod::Wpa2Personal) + .with_auth_method(auth_method) .with_password(password); self.controller .lock() .await - .set_config(&ModeConfig::Client(client_config))?; - spawner.spawn(net_task(runner)).ok(); - self.controller.lock().await.start_async().await?; - - let res = async { - loop { - let state = esp_radio::wifi::sta_state(); - if state == WifiStaState::Started { - self.controller.lock().await.connect()?; - break; - } - Timer::after(Duration::from_millis(500)).await; - } - Ok::<(), FatError>(()) - } - .with_timeout(Duration::from_millis(max_wait as u64 * 1000)) - .await; - - if res.is_err() { - bail!("Timeout waiting for wifi sta ready") - } - - let res = async { - loop { - let state = esp_radio::wifi::sta_state(); - if state == WifiStaState::Connected { - break; - } - Timer::after(Duration::from_millis(500)).await; - } - Ok::<(), FatError>(()) - } - .with_timeout(Duration::from_millis(max_wait as u64 * 1000)) - .await; - - if res.is_err() { - bail!("Timeout waiting for wifi sta connected") - } + .set_config(&Config::Station(client_config))?; + spawner.spawn(net_task(runner)?); + self.controller + .lock() + .await + .connect_async() + .with_timeout(Duration::from_millis(max_wait as u64 * 1000)) + .await + .context("Timeout waiting for wifi sta connected")??; let res = async { while !stack.is_link_up() { @@ -670,62 +678,62 @@ impl Esp<'_> { let round_trip_topic = format!("{base_topic}/internal/roundtrip"); let stay_alive_topic = format!("{base_topic}/stay_alive"); - let mut builder: McutieBuilder<'_, String, PublishDisplay, 0> = - McutieBuilder::new(stack, "plant ctrl", mqtt_url); - if let (Some(mqtt_user), Some(mqtt_password)) = ( - network_config.mqtt_user.as_ref(), - network_config.mqtt_password.as_ref(), - ) { - builder = builder.with_authentication(mqtt_user, mqtt_password); - info!("With authentification"); - } - - let lwt = Topic::General(last_will_topic); - let lwt = mk_static!(Topic, lwt); - let lwt = lwt.with_display("lost").retain(true).qos(QoS::AtLeastOnce); - builder = builder.with_last_will(lwt); - //TODO make configurable - builder = builder.with_device_id("plantctrl"); - - let builder: McutieBuilder<'_, String, PublishDisplay, 2> = builder - .with_subscriptions([ - Topic::General(round_trip_topic.clone()), - Topic::General(stay_alive_topic.clone()), - ]); - - let keep_alive = Duration::from_secs(60 * 60 * 2).as_secs() as u16; - let (receiver, task) = builder.build(keep_alive); - - spawner.spawn(mqtt_incoming_task( - receiver, - round_trip_topic.clone(), - stay_alive_topic.clone(), - ))?; - spawner.spawn(mqtt_runner(task))?; - - log(LogMessage::StayAlive, 0, 0, "", &stay_alive_topic); - - log(LogMessage::MqttInfo, 0, 0, "", mqtt_url); - + // let mut builder: McutieBuilder<'_, String, PublishDisplay, 0> = + // McutieBuilder::new(stack, "plant ctrl", mqtt_url); + // if let (Some(mqtt_user), Some(mqtt_password)) = ( + // network_config.mqtt_user.as_ref(), + // network_config.mqtt_password.as_ref(), + // ) { + // builder = builder.with_authentication(mqtt_user, mqtt_password); + // info!("With authentification"); + // } + // + // let lwt = Topic::General(last_will_topic); + // let lwt = mk_static!(Topic, lwt); + // let lwt = lwt.with_display("lost").retain(true).qos(QoS::AtLeastOnce); + // builder = builder.with_last_will(lwt); + // //TODO make configurable + // builder = builder.with_device_id("plantctrl"); + // + // let builder: McutieBuilder<'_, String, PublishDisplay, 2> = builder + // .with_subscriptions([ + // Topic::General(round_trip_topic.clone()), + // Topic::General(stay_alive_topic.clone()), + // ]); + // + // let keep_alive = Duration::from_secs(60 * 60 * 2).as_secs() as u16; + // let (receiver, task) = builder.build(keep_alive); + // + // spawner.spawn(mqtt_incoming_task( + // receiver, + // round_trip_topic.clone(), + // stay_alive_topic.clone(), + // )?); + // spawner.spawn(mqtt_runner(task)?); + // + // log(LogMessage::StayAlive, 0, 0, "", &stay_alive_topic); + // + // log(LogMessage::MqttInfo, 0, 0, "", mqtt_url); + // let mqtt_timeout = 15000; - let res = async { - while !MQTT_CONNECTED_EVENT_RECEIVED.load(Ordering::Relaxed) { - crate::hal::PlantHal::feed_watchdog(); - Timer::after(Duration::from_millis(100)).await; - } - Ok::<(), FatError>(()) - } - .with_timeout(Duration::from_millis(mqtt_timeout as u64)) - .await; - - if res.is_err() { - bail!("Timeout waiting MQTT connect event") - } - - let _ = Topic::General(round_trip_topic.clone()) - .with_display("online_text") - .publish() - .await; + // let res = async { + // while !MQTT_CONNECTED_EVENT_RECEIVED.load(Ordering::Relaxed) { + // crate::hal::PlantHal::feed_watchdog(); + // Timer::after(Duration::from_millis(100)).await; + // } + // Ok::<(), FatError>(()) + // } + // .with_timeout(Duration::from_millis(mqtt_timeout as u64)) + // .await; + // + // if res.is_err() { + // bail!("Timeout waiting MQTT connect event") + // } + // + // let _ = Topic::General(round_trip_topic.clone()) + // .with_display("online_text") + // .publish() + // .await; let res = async { while !MQTT_ROUND_TRIP_RECEIVED.load(Ordering::Relaxed) { @@ -759,36 +767,36 @@ impl Esp<'_> { let full_topic = format!("{base_topic}{subtopic}"); loop { - let result = Topic::General(full_topic.as_str()) - .with_display(message) - .retain(true) - .publish() - .await; - match result { - Ok(()) => return Ok(()), - Err(err) => { - let retry = match err { - Error::IOError => false, - Error::TimedOut => true, - Error::TooLarge => false, - Error::PacketError => false, - Error::Invalid => false, - }; - if !retry { - bail!( - "Error during mqtt send on topic {} with message {:#?} error is {:?}", - &full_topic, - message, - err - ); - } - info!( - "Retransmit for {} with message {:#?} error is {:?} retrying {}", - &full_topic, message, err, retry - ); - Timer::after(Duration::from_millis(100)).await; - } - } + // let result = Topic::General(full_topic.as_str()) + // .with_display(message) + // .retain(true) + // .publish() + // .await; + // match result { + // Ok(()) => return Ok(()), + // Err(err) => { + // let retry = match err { + // Error::IOError => false, + // Error::TimedOut => true, + // Error::TooLarge => false, + // Error::PacketError => false, + // Error::Invalid => false, + // }; + // if !retry { + // bail!( + // "Error during mqtt send on topic {} with message {:#?} error is {:?}", + // &full_topic, + // message, + // err + // ); + // } + // info!( + // "Retransmit for {} with message {:#?} error is {:?} retrying {}", + // &full_topic, message, err, retry + // ); + // Timer::after(Duration::from_millis(100)).await; + // } + // } } } pub(crate) async fn mqtt_publish(&mut self, subtopic: &str, message: &str) { @@ -813,60 +821,59 @@ impl Esp<'_> { } #[embassy_executor::task] -async fn mqtt_runner( - task: McutieTask<'static, String, PublishDisplay<'static, String, &'static str>, 2>, +async fn mqtt_runner(//task: McutieTask<'static, String, PublishDisplay<'static, String, &'static str>, 2>, ) { - task.run().await; + //task.run().await; } #[embassy_executor::task] async fn mqtt_incoming_task( - receiver: McutieReceiver, + //receiver: McutieReceiver, round_trip_topic: String, stay_alive_topic: String, ) { loop { - let message = receiver.receive().await; - match message { - MqttMessage::Connected => { - info!("Mqtt connected"); - MQTT_CONNECTED_EVENT_RECEIVED.store(true, Ordering::Relaxed); - } - MqttMessage::Publish(topic, payload) => match topic { - Topic::DeviceType(_type_topic) => {} - Topic::Device(_device_topic) => {} - Topic::General(topic) => { - let subtopic = topic.as_str(); - - if subtopic.eq(round_trip_topic.as_str()) { - MQTT_ROUND_TRIP_RECEIVED.store(true, Ordering::Relaxed); - } else if subtopic.eq(stay_alive_topic.as_str()) { - let value = payload.eq_ignore_ascii_case("true".as_ref()) - || payload.eq_ignore_ascii_case("1".as_ref()); - let a = match value { - true => 1, - false => 0, - }; - log(LogMessage::MqttStayAliveRec, a, 0, "", ""); - MQTT_STAY_ALIVE.store(value, Ordering::Relaxed); - } else { - log(LogMessage::UnknownTopic, 0, 0, "", &topic); - } - } - }, - MqttMessage::Disconnected => { - MQTT_CONNECTED_EVENT_RECEIVED.store(false, Ordering::Relaxed); - info!("Mqtt disconnected"); - } - MqttMessage::HomeAssistantOnline => { - info!("Home assistant is online"); - } - } + //let message = receiver.receive().await; + // match message { + // MqttMessage::Connected => { + // info!("Mqtt connected"); + // MQTT_CONNECTED_EVENT_RECEIVED.store(true, Ordering::Relaxed); + // } + // MqttMessage::Publish(topic, payload) => match topic { + // Topic::DeviceType(_type_topic) => {} + // Topic::Device(_device_topic) => {} + // Topic::General(topic) => { + // let subtopic = topic.as_str(); + // + // if subtopic.eq(round_trip_topic.as_str()) { + // MQTT_ROUND_TRIP_RECEIVED.store(true, Ordering::Relaxed); + // } else if subtopic.eq(stay_alive_topic.as_str()) { + // let value = payload.eq_ignore_ascii_case("true".as_ref()) + // || payload.eq_ignore_ascii_case("1".as_ref()); + // let a = match value { + // true => 1, + // false => 0, + // }; + // log(LogMessage::MqttStayAliveRec, a, 0, "", ""); + // MQTT_STAY_ALIVE.store(value, Ordering::Relaxed); + // } else { + // log(LogMessage::UnknownTopic, 0, 0, "", &topic); + // } + // } + // }, + // MqttMessage::Disconnected => { + // MQTT_CONNECTED_EVENT_RECEIVED.store(false, Ordering::Relaxed); + // info!("Mqtt disconnected"); + // } + // MqttMessage::HomeAssistantOnline => { + // info!("Home assistant is online"); + // } + // } } } #[embassy_executor::task(pool_size = 2)] -async fn net_task(mut runner: Runner<'static, WifiDevice<'static>>) { +async fn net_task(mut runner: Runner<'static, Interface<'static>>) { runner.run().await; } diff --git a/Software/MainBoard/rust/src/hal/mod.rs b/Software/MainBoard/rust/src/hal/mod.rs index 68b087d..1150916 100644 --- a/Software/MainBoard/rust/src/hal/mod.rs +++ b/Software/MainBoard/rust/src/hal/mod.rs @@ -95,7 +95,6 @@ use esp_hal::system::reset_reason; use esp_hal::timer::timg::{MwdtStage, TimerGroup, Wdt}; use esp_hal::uart::Uart; use esp_hal::Blocking; -use esp_radio::{init, Controller}; use esp_storage::FlashStorage; use log::{info, warn}; use portable_atomic::AtomicBool; @@ -280,19 +279,11 @@ impl PlantHal { let wake_gpio1 = peripherals.GPIO1; let rng = Rng::new(); - let esp_wifi_ctrl = &*mk_static!( - Controller<'static>, - init().map_err(|e| FatError::String { - error: format!("Could not init wifi controller: {:?}", e) - })? - ); - let (controller, interfaces) = - esp_radio::wifi::new(esp_wifi_ctrl, peripherals.WIFI, Default::default()).map_err( - |e| FatError::String { - error: format!("Could not init wifi: {:?}", e), - }, - )?; + let (controller, interfaces) = esp_radio::wifi::new(peripherals.WIFI, Default::default()) + .map_err(|e| FatError::String { + error: format!("Could not init wifi: {:?}", e), + })?; let pcnt_module = Pcnt::new(peripherals.PCNT); @@ -349,16 +340,13 @@ impl PlantHal { .context("No OTA data partition found")? ); - let ota_data = mk_static!( - FlashRegion>, - ota_data.as_embedded_storage(mk_static!( - RmwNorFlashStorage<&mut MutexFlashStorage>, - RmwNorFlashStorage::new(flash_storage_2, mk_static!([u8; 4096], [0_u8; 4096])) - )) - ); + let mut ota_data = ota_data.as_embedded_storage(mk_static!( + RmwNorFlashStorage<&mut MutexFlashStorage>, + RmwNorFlashStorage::new(flash_storage_2, mk_static!([u8; 4096], [0_u8; 4096])) + )); - let state_0 = ota_state(AppPartitionSubType::Ota0, ota_data); - let state_1 = ota_state(AppPartitionSubType::Ota1, ota_data); + let state_0 = ota_state(AppPartitionSubType::Ota0, &mut ota_data); + let state_1 = ota_state(AppPartitionSubType::Ota1, &mut ota_data); let mut ota = Ota::new(ota_data, 2)?; let running = get_current_slot(&pt, &mut ota)?; let target = next_partition(running)?; @@ -411,8 +399,8 @@ impl PlantHal { error: "Uart creation failed".to_string(), })?; - let ap = interfaces.ap; - let sta = interfaces.sta; + let ap = interfaces.access_point; + let sta = interfaces.station; let mut esp = Esp { savegame, rng, diff --git a/Software/MainBoard/rust/src/main.rs b/Software/MainBoard/rust/src/main.rs index bf26924..33e45dc 100644 --- a/Software/MainBoard/rust/src/main.rs +++ b/Software/MainBoard/rust/src/main.rs @@ -317,7 +317,7 @@ async fn safe_main(spawner: Spawner) -> FatResult<()> { let reboot_now = Arc::new(AtomicBool::new(false)); let stack_val = stack.take(); if let Some(s) = stack_val { - spawner.spawn(http_server(reboot_now.clone(), s))?; + spawner.spawn(http_server(reboot_now.clone(), s)?); } else { bail!("Network stack missing, hard abort") } @@ -673,7 +673,7 @@ async fn safe_main(spawner: Spawner) -> FatResult<()> { if stay_alive { let reboot_now = Arc::new(AtomicBool::new(false)); if let Some(s) = stack.take() { - spawner.spawn(http_server(reboot_now.clone(), s))?; + spawner.spawn(http_server(reboot_now.clone(), s)?); wait_infinity(board, WaitType::MqttConfig, reboot_now.clone(), timezone).await; } else { bail!("Network Stack missing, hard abort"); @@ -690,7 +690,7 @@ async fn safe_main(spawner: Spawner) -> FatResult<()> { Timer::after_millis(5000).await; board.board_hal.get_esp().set_restart_to_conf(false); - let _ = board + board .board_hal .deep_sleep(1000 * 1000 * 60 * deep_sleep_duration_minutes as u64) .await; @@ -1282,7 +1282,7 @@ use embassy_time::WithTimeout; async fn main(spawner: Spawner) -> ! { // intialize embassy crate::log::INTERCEPTOR.init(); - spawner.must_spawn(crate::log::log_task()); + spawner.spawn(log::log_task().unwrap()); //force init here! match BOARD_ACCESS.init( PlantHal::create() diff --git a/Software/MainBoard/rust/src/webserver/post_json.rs b/Software/MainBoard/rust/src/webserver/post_json.rs index b6afff5..0220c54 100644 --- a/Software/MainBoard/rust/src/webserver/post_json.rs +++ b/Software/MainBoard/rust/src/webserver/post_json.rs @@ -3,11 +3,13 @@ use crate::fat_error::FatResult; use crate::hal::Detection; use crate::webserver::read_up_to_bytes_from_request; use crate::{do_secure_pump, BOARD_ACCESS}; +use alloc::borrow::ToOwned; use alloc::string::{String, ToString}; use alloc::vec::Vec; use chrono::DateTime; use edge_http::io::server::Connection; use edge_nal::io::{Read, Write}; +use esp_radio::wifi::ap::AccessPointInfo; use log::info; use serde::{Deserialize, Serialize}; @@ -40,10 +42,10 @@ pub(crate) async fn wifi_scan( let mut board = BOARD_ACCESS.get().await.lock().await; info!("start wifi scan"); let mut ssids: Vec = Vec::new(); - let scan_result = board.board_hal.get_esp().wifi_scan().await?; + let scan_result: Vec = board.board_hal.get_esp().wifi_scan().await?; scan_result .iter() - .for_each(|s| ssids.push(s.ssid.to_string())); + .for_each(|s| ssids.push(s.ssid.as_str().to_owned())); let ssid_json = serde_json::to_string(&SSIDList { ssids })?; info!("Sending ssid list {}", &ssid_json); Ok(Some(ssid_json))