diff --git a/Cargo.lock b/Cargo.lock index 576db28..c4f90c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,15 +71,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "atomic-polyfill" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" -dependencies = [ - "critical-section", -] - [[package]] name = "autocfg" version = "1.5.1" @@ -159,12 +150,6 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.12.0" @@ -201,7 +186,7 @@ checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures", - "rand_core 0.10.1", + "rand_core", ] [[package]] @@ -219,45 +204,12 @@ dependencies = [ "thiserror", ] -[[package]] -name = "cobs" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea6d1b751c55bd9c0dda7d4ff752074e98f4765ae969664648bd193bb326d15" -dependencies = [ - "thiserror", -] - -[[package]] -name = "cobs" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd93fd2c1b27acd030440c9dbd9d14c1122aad622374fe05a670b67a4bc034be" -dependencies = [ - "heapless 0.9.3", - "thiserror", -] - -[[package]] -name = "cobs-acc" -version = "0.1.0" -source = "git+https://github.com/jamesmunns/ergot#8d7db27e030564a048eb16c90080ae6730d14e11" -dependencies = [ - "cobs 0.4.0", -] - [[package]] name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" -[[package]] -name = "const-fnv1a-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" - [[package]] name = "const-init" version = "1.0.0" @@ -302,7 +254,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", - "rand_core 0.10.1", + "rand_core", ] [[package]] @@ -466,88 +418,6 @@ dependencies = [ "syn", ] -[[package]] -name = "document-features" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" -dependencies = [ - "litrs", -] - -[[package]] -name = "embassy-executor-timer-queue" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc328bf943af66b80b98755db9106bf7e7471b0cf47dc8559cd9a6be504cc9c" - -[[package]] -name = "embassy-futures" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" - -[[package]] -name = "embassy-time" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b0c143ec626e821d4d90da51a2bd91d559d6c442b7c74a47d368c9e23d97a" -dependencies = [ - "cfg-if", - "critical-section", - "document-features", - "embassy-time-driver", - "embassy-time-queue-utils", - "embedded-hal 0.2.7", - "embedded-hal 1.0.0", - "embedded-hal-async", - "futures-core", -] - -[[package]] -name = "embassy-time-driver" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9" -dependencies = [ - "document-features", -] - -[[package]] -name = "embassy-time-queue-utils" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168297bf80aaf114b3c9ad589bf38b01b3009b9af7f97cd18086c5bbf96f5693" -dependencies = [ - "embassy-executor-timer-queue", - "heapless 0.9.3", -] - -[[package]] -name = "embedded-hal" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" -dependencies = [ - "nb 0.1.3", - "void", -] - -[[package]] -name = "embedded-hal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" - -[[package]] -name = "embedded-hal-async" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" -dependencies = [ - "embedded-hal 1.0.0", -] - [[package]] name = "embedded-io" version = "0.4.0" @@ -583,36 +453,6 @@ dependencies = [ "log", ] -[[package]] -name = "ergot" -version = "0.12.0" -source = "git+https://github.com/jamesmunns/ergot#8d7db27e030564a048eb16c90080ae6730d14e11" -dependencies = [ - "bbqueue", - "cobs 0.3.0", - "cobs-acc", - "const-fnv1a-hash", - "cordyceps", - "critical-section", - "embassy-futures", - "embassy-time", - "futures-io", - "heapless 0.9.3", - "log", - "maitake-sync", - "mutex", - "pin-project", - "portable-atomic", - "postcard", - "postcard-schema", - "rand 0.9.5", - "rand_core 0.9.5", - "serde", - "tokio", - "tokio-util", - "web-time", -] - [[package]] name = "errno" version = "0.3.14" @@ -776,18 +616,6 @@ dependencies = [ "windows-result", ] -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", -] - [[package]] name = "getrandom" version = "0.4.3" @@ -796,51 +624,8 @@ checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", -] - -[[package]] -name = "hash32" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder", -] - -[[package]] -name = "heapless" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" -dependencies = [ - "atomic-polyfill", - "hash32 0.2.1", - "rustc_version", - "serde", - "spin", - "stable_deref_trait", -] - -[[package]] -name = "heapless" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" -dependencies = [ - "hash32 0.3.1", - "serde_core", - "stable_deref_trait", + "r-efi", + "rand_core", ] [[package]] @@ -963,7 +748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ "crypto-common", - "rand_core 0.10.1", + "rand_core", ] [[package]] @@ -987,21 +772,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "litrs" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - [[package]] name = "log" version = "0.4.33" @@ -1079,7 +849,7 @@ dependencies = [ "kem", "module-lattice", "pkcs8", - "rand_core 0.10.1", + "rand_core", "sha3", "zeroize", ] @@ -1096,16 +866,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "mutex" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23bf5944734b7a5d1bd0a9b594213dd04de471fd3d3a1bfce672913dd72d606" -dependencies = [ - "critical-section", - "mutex-traits", -] - [[package]] name = "mutex-traits" version = "1.0.1" @@ -1118,21 +878,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24e0cc5e2c585acbd15c5ce911dff71e1f4d5313f43345873311c4f5efd741cc" -[[package]] -name = "nb" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" -dependencies = [ - "nb 1.1.0", -] - -[[package]] -name = "nb" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" - [[package]] name = "nix" version = "0.29.0" @@ -1255,11 +1000,10 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ - "cobs 0.3.0", + "cobs", "defmt", "embedded-io 0.4.0", "embedded-io 0.6.1", - "heapless 0.7.17", "serde", ] @@ -1280,20 +1024,10 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9475666d89f42231a0a57da32d5f6ca7f9b5cd4c335ea1fe8f3278215b7a21ff" dependencies = [ - "heapless 0.9.3", "postcard-derive", "serde", ] -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - [[package]] name = "proc-macro2" version = "1.0.106" @@ -1312,28 +1046,12 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - [[package]] name = "r-efi" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "rand" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" -dependencies = [ - "rand_chacha", - "rand_core 0.9.5", -] - [[package]] name = "rand" version = "0.10.2" @@ -1341,27 +1059,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", + "getrandom", + "rand_core", ] [[package]] @@ -1399,15 +1098,6 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - [[package]] name = "rustversion" version = "1.0.23" @@ -1420,18 +1110,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - [[package]] name = "serde" version = "1.0.228" @@ -1532,15 +1210,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "spin" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" -dependencies = [ - "lock_api", -] - [[package]] name = "spki" version = "0.8.0" @@ -1551,12 +1220,6 @@ dependencies = [ "der", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - [[package]] name = "strsim" version = "0.11.1" @@ -1674,20 +1337,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite", - "tokio", -] - [[package]] name = "tracing" version = "0.1.44" @@ -1773,7 +1422,7 @@ version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ - "getrandom 0.4.3", + "getrandom", "js-sys", "serde_core", "wasm-bindgen", @@ -1785,27 +1434,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasip2" -version = "1.0.4+wasi-0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "wasm-bindgen" version = "0.2.126" @@ -1857,16 +1491,14 @@ version = "0.1.0" dependencies = [ "aead", "bluer", - "cobs-acc", "env_logger", - "ergot", "futures-concurrency", "futures-lite", - "getrandom 0.4.3", + "getrandom", "jiff", "log", "postcard", - "rand 0.10.2", + "rand", "serde", "tokio", "water-pod-common", @@ -1880,30 +1512,17 @@ version = "0.1.0" dependencies = [ "aead", "bbqueue", - "cobs 0.5.1", - "cobs-acc", "defmt", - "ergot", "jiff", "log", "postcard", "postcard-schema", - "rand_core 0.10.1", + "rand_core", "serde", "tokio", "wharrgarbl", ] -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "wharrgarbl" version = "0.1.0" @@ -1913,7 +1532,7 @@ dependencies = [ "ctutils", "hybrid-array", "ml-kem", - "rand_core 0.10.1", + "rand_core", "wharrgarbl-neko", "wharrgarbl-utils", "zeroize", @@ -2049,12 +1668,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - [[package]] name = "zerocopy" version = "0.8.54" diff --git a/Cargo.toml b/Cargo.toml index 14d7d13..a619b2c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,8 +25,6 @@ bluer = { version = "0.17.4", features = ["full"] } winnow = "1" futures-lite = "2.6.1" jiff = "0.2.32" -ergot = { git = "https://github.com/jamesmunns/ergot", features = ["tokio-std"] } -cobs-acc = { git = "https://github.com/jamesmunns/ergot", package = "cobs-acc" } rand = { version = "0.10" } futures-concurrency = "7.7.1" postcard = { version = "1", default-features = false, features = ["alloc"] } diff --git a/src/main.rs b/src/main.rs index 24a0ba7..4310848 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,14 +2,14 @@ mod scan; use std::{ io::{Cursor, ErrorKind}, - time::Duration, + time::{Duration, Instant}, }; use bluer::l2cap::{SocketAddr, Stream, stream::OwnedReadHalf}; use rand::rng; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, - time::sleep, + time::{sleep, timeout}, }; use water_pod_common::{Accumulator, AccumulatorResult, Encrypted, Pairing, Request, Response}; use wharrgarbl::{ @@ -41,19 +41,32 @@ async fn main() -> Result<(), std::io::Error> { let addr_type = device.address_type().await?; let target_sa = SocketAddr::new(device.address(), addr_type, SPSM_L2CAP_WATER); log::info!("Connecting..."); - let conn = Stream::connect(target_sa).await?; + let conn = loop { + let now = Instant::now(); + match timeout(Duration::from_secs(6), Stream::connect(target_sa)).await { + Ok(res) => break res, + Err(_) => { + if now.elapsed() >= Duration::from_secs(30) { + log::info!("BUH, try again later"); + return Ok(()); + } + } + } + }?; let server = NekoServerHandshake128::new(None); let send_mtu = conn.as_ref().send_mtu()?; + let recv_mtu = conn.as_ref().recv_mtu()?; log::info!("SETTINGS: {:?}", conn.as_ref().conn_info()); - log::info!("Stream Recv MTU: {:?}", conn.as_ref().recv_mtu()); + log::info!("Stream Recv MTU: {:?}", recv_mtu); log::info!("Stream Send MTU: {:?}", send_mtu); log::info!("Stream PHY: {:?}", conn.as_ref().phy()); + log::info!("Stream sec: {:?}", conn.as_ref().security()); let (mut reader, mut writer) = conn.into_split(); - let mut raw_buf = vec![0u8; 251]; + let mut raw_buf = vec![0u8; recv_mtu as usize]; let pair: Pairing = cobs_read(&mut reader, &mut raw_buf).await?; diff --git a/water-pod-common/Cargo.toml b/water-pod-common/Cargo.toml index 3cdc4d6..110408a 100644 --- a/water-pod-common/Cargo.toml +++ b/water-pod-common/Cargo.toml @@ -14,10 +14,7 @@ wharrgarbl = { git = "https://tangled.org/sachy.dev/wharrgarbl", package = "whar rand_core = { version = "0.10", default-features = false } tokio = { version = "1", default-features = false, optional = true } bbqueue = "0.7.0" -postcard-schema = { version = "0.2.5", features = ["alloc"] } -ergot = { git = "https://github.com/jamesmunns/ergot" } -cobs-acc = { git = "https://github.com/jamesmunns/ergot", package = "cobs-acc" } -cobs = { version = "0.5.1", default-features = false, features = ["alloc"] } +postcard-schema = { version = "0.2.5", features = ["alloc", "derive"] } log = { version = "0.4", optional = true } [features] diff --git a/water-pod-common/src/lib.rs b/water-pod-common/src/lib.rs index a08cf96..1510f60 100644 --- a/water-pod-common/src/lib.rs +++ b/water-pod-common/src/lib.rs @@ -3,7 +3,6 @@ extern crate alloc; use alloc::{boxed::Box, vec::Vec}; -use ergot::{endpoint, topic}; use jiff::{SignedDuration, Timestamp}; use postcard::accumulator::{CobsAccumulator, FeedResult}; use rand_core::CryptoRng; @@ -13,9 +12,6 @@ use wharrgarbl::{ transport::{AeadTransport, RecvState, SendState}, }; -topic!(YeetTopic, u32, "topic/yeet"); -endpoint!(SyncEndpoint, TimeSyncMs, TimeSyncMs, "req/sync"); - #[derive(Debug, serde::Serialize, serde::Deserialize, postcard_schema::Schema)] #[cfg_attr(feature = "defmt", derive(defmt::Format))] pub enum Request {