Merge pull request #2 from hubaldv/restructure

Restructure
This commit is contained in:
Hubald
2026-02-12 18:38:41 +01:00
committed by GitHub
7 changed files with 310 additions and 321 deletions

436
Cargo.lock generated
View File

@@ -20,15 +20,15 @@ checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169"
[[package]]
name = "accesskit"
version = "0.19.0"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e25ae84c0260bdf5df07796d7cc4882460de26a2b406ec0e6c42461a723b271b"
checksum = "cf203f9d3bd8f29f98833d1fbef628df18f759248a547e7e01cfbf63cda36a99"
[[package]]
name = "accesskit_atspi_common"
version = "0.12.0"
version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29bd41de2e54451a8ca0dd95ebf45b54d349d29ebceb7f20be264eee14e3d477"
checksum = "890d241cf51fc784f0ac5ac34dfc847421f8d39da6c7c91a0fcc987db62a8267"
dependencies = [
"accesskit",
"accesskit_consumer",
@@ -40,23 +40,23 @@ dependencies = [
[[package]]
name = "accesskit_consumer"
version = "0.28.0"
version = "0.31.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bfae7c152994a31dc7d99b8eeac7784a919f71d1b306f4b83217e110fd3824c"
checksum = "db81010a6895d8707f9072e6ce98070579b43b717193d2614014abd5cb17dd43"
dependencies = [
"accesskit",
"hashbrown",
"hashbrown 0.15.4",
]
[[package]]
name = "accesskit_macos"
version = "0.20.0"
version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692dd318ff8a7a0ffda67271c4bd10cf32249656f4e49390db0b26ca92b095f2"
checksum = "a0089e5c0ac0ca281e13ea374773898d9354cc28d15af9f0f7394d44a495b575"
dependencies = [
"accesskit",
"accesskit_consumer",
"hashbrown",
"hashbrown 0.15.4",
"objc2 0.5.2",
"objc2-app-kit 0.2.2",
"objc2-foundation 0.2.2",
@@ -64,9 +64,9 @@ dependencies = [
[[package]]
name = "accesskit_unix"
version = "0.15.0"
version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5f7474c36606d0fe4f438291d667bae7042ea2760f506650ad2366926358fc8"
checksum = "301e55b39cfc15d9c48943ce5f572204a551646700d0e8efa424585f94fec528"
dependencies = [
"accesskit",
"accesskit_atspi_common",
@@ -82,13 +82,13 @@ dependencies = [
[[package]]
name = "accesskit_windows"
version = "0.27.0"
version = "0.29.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70a042b62c9c05bf7b616f015515c17d2813f3ba89978d6f4fc369735d60700a"
checksum = "d2d63dd5041e49c363d83f5419a896ecb074d309c414036f616dc0b04faca971"
dependencies = [
"accesskit",
"accesskit_consumer",
"hashbrown",
"hashbrown 0.15.4",
"static_assertions",
"windows 0.61.3",
"windows-core 0.61.2",
@@ -96,9 +96,9 @@ dependencies = [
[[package]]
name = "accesskit_winit"
version = "0.27.0"
version = "0.29.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c1f0d3d13113d8857542a4f8d1a1c24d1dc1527b77aee8426127f4901588708"
checksum = "c8cfabe59d0eaca7412bfb1f70198dd31e3b0496fee7e15b066f9c36a1a140a0"
dependencies = [
"accesskit",
"accesskit_macos",
@@ -108,15 +108,6 @@ dependencies = [
"winit",
]
[[package]]
name = "addr2line"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [
"gimli",
]
[[package]]
name = "adler2"
version = "2.0.1"
@@ -161,7 +152,7 @@ dependencies = [
"log",
"ndk",
"ndk-context",
"ndk-sys 0.6.0+11769913",
"ndk-sys",
"num_enum",
"thiserror 1.0.69",
]
@@ -228,29 +219,6 @@ dependencies = [
"libloading",
]
[[package]]
name = "ashpd"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df"
dependencies = [
"async-fs",
"async-net",
"enumflags2",
"futures-channel",
"futures-util",
"rand 0.9.2",
"raw-window-handle",
"serde",
"serde_repr",
"tokio",
"url",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"zbus",
]
[[package]]
name = "async-broadcast"
version = "0.7.2"
@@ -289,17 +257,6 @@ dependencies = [
"slab",
]
[[package]]
name = "async-fs"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5"
dependencies = [
"async-lock",
"blocking",
"futures-lite",
]
[[package]]
name = "async-io"
version = "2.5.0"
@@ -329,17 +286,6 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "async-net"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7"
dependencies = [
"async-io",
"blocking",
"futures-lite",
]
[[package]]
name = "async-process"
version = "2.4.0"
@@ -481,21 +427,6 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "backtrace"
version = "0.3.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
dependencies = [
"addr2line",
"cfg-if",
"libc",
"miniz_oxide",
"object",
"rustc-demangle",
"windows-targets 0.52.6",
]
[[package]]
name = "bioz-host-rs"
version = "0.1.0"
@@ -553,9 +484,6 @@ name = "bitflags"
version = "2.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
dependencies = [
"serde",
]
[[package]]
name = "block"
@@ -704,9 +632,9 @@ dependencies = [
[[package]]
name = "chrono"
version = "0.4.42"
version = "0.4.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118"
dependencies = [
"iana-time-zone",
"js-sys",
@@ -825,7 +753,7 @@ checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
dependencies = [
"bitflags 1.3.2",
"core-foundation 0.9.4",
"core-graphics-types",
"core-graphics-types 0.1.3",
"foreign-types",
"libc",
]
@@ -841,6 +769,17 @@ dependencies = [
"libc",
]
[[package]]
name = "core-graphics-types"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
dependencies = [
"bitflags 2.9.4",
"core-foundation 0.10.1",
"libc",
]
[[package]]
name = "crc32fast"
version = "1.5.0"
@@ -987,9 +926,9 @@ dependencies = [
[[package]]
name = "ecolor"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94bdf37f8d5bd9aa7f753573fdda9cf7343afa73dd28d7bfe9593bd9798fc07e"
checksum = "71ddb8ac7643d1dba1bb02110e804406dd459a838efcb14011ced10556711a8e"
dependencies = [
"bytemuck",
"emath",
@@ -997,9 +936,9 @@ dependencies = [
[[package]]
name = "eframe"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14d1c15e7bd136b309bd3487e6ffe5f668b354cd9768636a836dd738ac90eb0b"
checksum = "457481173e6db5ca9fa2be93a58df8f4c7be639587aeb4853b526c6cf87db4e6"
dependencies = [
"ahash",
"bytemuck",
@@ -1026,16 +965,15 @@ dependencies = [
"wasm-bindgen-futures",
"web-sys",
"web-time",
"winapi",
"windows-sys 0.59.0",
"windows-sys 0.61.2",
"winit",
]
[[package]]
name = "egui"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d5d0306cd61ca75e29682926d71f2390160247f135965242e904a636f51c0dc"
checksum = "6a9b567d356674e9a5121ed3fedfb0a7c31e059fe71f6972b691bcd0bfc284e3"
dependencies = [
"accesskit",
"ahash",
@@ -1051,9 +989,9 @@ dependencies = [
[[package]]
name = "egui-wgpu"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c12eca13293f8eba27a32aaaa1c765bfbf31acd43e8d30d5881dcbe5e99ca0c7"
checksum = "5e4d209971c84b2352a06174abdba701af1e552ce56b144d96f2bd50a3c91236"
dependencies = [
"ahash",
"bytemuck",
@@ -1062,7 +1000,7 @@ dependencies = [
"epaint",
"log",
"profiling",
"thiserror 1.0.69",
"thiserror 2.0.17",
"type-map",
"web-time",
"wgpu",
@@ -1071,16 +1009,18 @@ dependencies = [
[[package]]
name = "egui-winit"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f95d0a91f9cb0dc2e732d49c2d521ac8948e1f0b758f306fb7b14d6f5db3927f"
checksum = "ec6687e5bb551702f4ad10ac428bab12acf9d53047ebb1082d4a0ed8c6251a29"
dependencies = [
"accesskit_winit",
"ahash",
"arboard",
"bytemuck",
"egui",
"log",
"objc2 0.5.2",
"objc2-foundation 0.2.2",
"objc2-ui-kit",
"profiling",
"raw-window-handle",
"smithay-clipboard",
@@ -1091,9 +1031,9 @@ dependencies = [
[[package]]
name = "egui_dock"
version = "0.17.0"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baa7ef4e24fccd35639705ba68a58a5713c19b15a2cd426c0a26901b5954882c"
checksum = "2fd0f689738efbd4afb811433b873379c6a8f3af48f2d296d9849fe70ee021d6"
dependencies = [
"duplicate",
"egui",
@@ -1102,9 +1042,9 @@ dependencies = [
[[package]]
name = "egui_extras"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dddbceddf39805fc6c62b1f7f9c05e23590b40844dc9ed89c6dc6dbc886e3e3b"
checksum = "d01d34e845f01c62e3fded726961092e70417d66570c499b9817ab24674ca4ed"
dependencies = [
"ahash",
"egui",
@@ -1116,11 +1056,10 @@ dependencies = [
[[package]]
name = "egui_glow"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc7037813341727937f9e22f78d912f3e29bc3c46e2f40a9e82bb51cbf5e4cfb"
checksum = "6420863ea1d90e750f75075231a260030ad8a9f30a7cef82cdc966492dc4c4eb"
dependencies = [
"ahash",
"bytemuck",
"egui",
"glow",
@@ -1134,9 +1073,9 @@ dependencies = [
[[package]]
name = "egui_plot"
version = "0.33.0"
version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524318041a8ea90c81c738e8985f8ad9e3f9bed636b03c2ff37b218113ed5121"
checksum = "33233ffc010fd450381805bbbebecbbb82f077de7712ddc439f0b20effd42db7"
dependencies = [
"ahash",
"egui",
@@ -1145,9 +1084,9 @@ dependencies = [
[[package]]
name = "emath"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45fd7bc25f769a3c198fe1cf183124bf4de3bd62ef7b4f1eaf6b08711a3af8db"
checksum = "491bdf728bf25ddd9ad60d4cf1c48588fa82c013a2440b91aa7fc43e34a07c32"
dependencies = [
"bytemuck",
]
@@ -1219,9 +1158,9 @@ dependencies = [
[[package]]
name = "epaint"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63adcea970b7a13094fe97a36ab9307c35a750f9e24bf00bb7ef3de573e0fddb"
checksum = "009d0dd3c2163823a0abdb899451ecbc78798dec545ee91b43aff1fa790bab62"
dependencies = [
"ab_glyph",
"ahash",
@@ -1237,9 +1176,9 @@ dependencies = [
[[package]]
name = "epaint_default_fonts"
version = "0.32.3"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1537accc50c9cab5a272c39300bdd0dd5dca210f6e5e8d70be048df9596e7ca2"
checksum = "5c4fbe202b6578d3d56428fa185cdf114a05e49da05f477b3c7f0fbb221f1862"
[[package]]
name = "equivalent"
@@ -1315,6 +1254,12 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "foldhash"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "foreign-types"
version = "0.5.0"
@@ -1489,12 +1434,6 @@ dependencies = [
"wasi 0.14.2+wasi-0.2.4",
]
[[package]]
name = "gimli"
version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "gl_generator"
version = "0.14.0"
@@ -1623,7 +1562,7 @@ checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
dependencies = [
"bitflags 2.9.4",
"gpu-descriptor-types",
"hashbrown",
"hashbrown 0.15.4",
]
[[package]]
@@ -1670,7 +1609,16 @@ version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
dependencies = [
"foldhash",
"foldhash 0.1.5",
]
[[package]]
name = "hashbrown"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
dependencies = [
"foldhash 0.2.0",
]
[[package]]
@@ -1883,7 +1831,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
dependencies = [
"equivalent",
"hashbrown",
"hashbrown 0.15.4",
]
[[package]]
@@ -1896,17 +1844,6 @@ dependencies = [
"mach2",
]
[[package]]
name = "io-uring"
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
dependencies = [
"bitflags 2.9.4",
"cfg-if",
"libc",
]
[[package]]
name = "itoa"
version = "1.0.15"
@@ -2052,9 +1989,9 @@ dependencies = [
[[package]]
name = "log"
version = "0.4.28"
version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "loom"
@@ -2080,15 +2017,17 @@ dependencies = [
[[package]]
name = "maitake-sync"
version = "0.1.2"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6816ab14147f80234c675b80ed6dc4f440d8a1cefc158e766067aedb84c0bcd5"
checksum = "748f86d9befd480b602c3bebc9ef30dbf2f3dfc8acc4a73d07b90f0117e6de3f"
dependencies = [
"cordyceps",
"loom",
"mutex-traits",
"mycelium-bitfield",
"pin-project",
"portable-atomic",
"tracing",
]
[[package]]
@@ -2135,13 +2074,13 @@ dependencies = [
[[package]]
name = "metal"
version = "0.31.0"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e"
checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605"
dependencies = [
"bitflags 2.9.4",
"block",
"core-graphics-types",
"core-graphics-types 0.2.0",
"foreign-types",
"log",
"objc",
@@ -2201,6 +2140,12 @@ dependencies = [
"winapi",
]
[[package]]
name = "mutex-traits"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3929f2b5633d29cf7b6624992e5f3c1e9334f1193423e12d17be4faf678cde3f"
[[package]]
name = "mycelium-bitfield"
version = "0.1.5"
@@ -2209,25 +2154,26 @@ checksum = "24e0cc5e2c585acbd15c5ce911dff71e1f4d5313f43345873311c4f5efd741cc"
[[package]]
name = "naga"
version = "25.0.1"
version = "27.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632"
checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8"
dependencies = [
"arrayvec",
"bit-set",
"bitflags 2.9.4",
"cfg-if",
"cfg_aliases",
"codespan-reporting",
"half",
"hashbrown",
"hashbrown 0.16.1",
"hexf-parse",
"indexmap",
"libm",
"log",
"num-traits",
"once_cell",
"rustc-hash 1.1.0",
"spirv",
"strum",
"thiserror 2.0.17",
"unicode-ident",
]
@@ -2241,7 +2187,7 @@ dependencies = [
"bitflags 2.9.4",
"jni-sys",
"log",
"ndk-sys 0.6.0+11769913",
"ndk-sys",
"num_enum",
"raw-window-handle",
"thiserror 1.0.69",
@@ -2253,15 +2199,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
[[package]]
name = "ndk-sys"
version = "0.5.0+25.2.9519653"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
dependencies = [
"jni-sys",
]
[[package]]
name = "ndk-sys"
version = "0.6.0+11769913"
@@ -2670,15 +2607,6 @@ dependencies = [
"objc2-foundation 0.2.2",
]
[[package]]
name = "object"
version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.21.3"
@@ -2786,7 +2714,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
"phf_shared",
"rand 0.8.5",
"rand",
]
[[package]]
@@ -2901,6 +2829,15 @@ version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
[[package]]
name = "portable-atomic-util"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
dependencies = [
"portable-atomic",
]
[[package]]
name = "postcard"
version = "1.1.3"
@@ -2927,12 +2864,12 @@ dependencies = [
[[package]]
name = "postcard-rpc"
version = "0.11.15"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7e1944dfb9859e440511700c442edce3eacd5862f90f5a9997d004bd3553f3b"
checksum = "d1b0f9cc8bd8f38f5893fb7f07626b1c8722b3166ead66cfb14b5c5d5352822c"
dependencies = [
"cobs 0.4.0",
"heapless 0.8.0",
"heapless 0.9.1",
"maitake-sync",
"nusb",
"portable-atomic",
@@ -2974,15 +2911,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
]
[[package]]
name = "presser"
version = "0.3.1"
@@ -3088,27 +3016,7 @@ version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"rand_core 0.6.4",
]
[[package]]
name = "rand"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
"rand_chacha",
"rand_core 0.9.3",
]
[[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.3",
"rand_core",
]
[[package]]
@@ -3117,15 +3025,6 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
[[package]]
name = "rand_core"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
"getrandom",
]
[[package]]
name = "range-alloc"
version = "0.1.4"
@@ -3208,34 +3107,31 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
[[package]]
name = "rfd"
version = "0.16.0"
version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672"
checksum = "20dafead71c16a34e1ff357ddefc8afc11e7d51d6d2b9fbd07eaa48e3e540220"
dependencies = [
"ashpd",
"block2 0.6.2",
"dispatch2",
"js-sys",
"libc",
"log",
"objc2 0.6.3",
"objc2-app-kit 0.3.1",
"objc2-core-foundation",
"objc2-foundation 0.3.1",
"percent-encoding",
"pollster",
"raw-window-handle",
"urlencoding",
"wasm-bindgen",
"wasm-bindgen-futures",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"web-sys",
"windows-sys 0.60.2",
"windows-sys 0.61.2",
]
[[package]]
name = "rustc-demangle"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
[[package]]
name = "rustc-hash"
version = "1.1.0"
@@ -3558,28 +3454,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
[[package]]
name = "strum"
version = "0.26.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
dependencies = [
"strum_macros",
]
[[package]]
name = "strum_macros"
version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
dependencies = [
"heck",
"proc-macro2",
"quote",
"rustversion",
"syn",
]
[[package]]
name = "syn"
version = "2.0.104"
@@ -3754,29 +3628,24 @@ dependencies = [
[[package]]
name = "tokio"
version = "1.47.1"
version = "1.49.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86"
dependencies = [
"backtrace",
"bytes",
"io-uring",
"libc",
"mio",
"pin-project-lite",
"signal-hook-registry",
"slab",
"socket2",
"tokio-macros",
"tracing",
"windows-sys 0.59.0",
"windows-sys 0.61.2",
]
[[package]]
name = "tokio-macros"
version = "2.5.0"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [
"proc-macro2",
"quote",
@@ -3954,15 +3823,8 @@ dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
"serde",
]
[[package]]
name = "urlencoding"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
[[package]]
name = "utf8_iter"
version = "1.0.4"
@@ -4230,15 +4092,16 @@ checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3"
[[package]]
name = "wgpu"
version = "25.0.2"
version = "27.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9"
checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77"
dependencies = [
"arrayvec",
"bitflags 2.9.4",
"cfg-if",
"cfg_aliases",
"document-features",
"hashbrown",
"hashbrown 0.16.1",
"js-sys",
"log",
"naga",
@@ -4258,17 +4121,18 @@ dependencies = [
[[package]]
name = "wgpu-core"
version = "25.0.2"
version = "27.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500"
checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7"
dependencies = [
"arrayvec",
"bit-set",
"bit-vec",
"bitflags 2.9.4",
"bytemuck",
"cfg_aliases",
"document-features",
"hashbrown",
"hashbrown 0.16.1",
"indexmap",
"log",
"naga",
@@ -4289,36 +4153,36 @@ dependencies = [
[[package]]
name = "wgpu-core-deps-apple"
version = "25.0.0"
version = "27.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d"
checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-core-deps-emscripten"
version = "25.0.0"
version = "27.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445"
checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-core-deps-windows-linux-android"
version = "25.0.0"
version = "27.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46"
checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-hal"
version = "25.0.2"
version = "27.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f968767fe4d3d33747bbd1473ccd55bf0f6451f55d733b5597e67b5deab4ad17"
checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce"
dependencies = [
"android_system_properties",
"arrayvec",
@@ -4329,13 +4193,13 @@ dependencies = [
"bytemuck",
"cfg-if",
"cfg_aliases",
"core-graphics-types",
"core-graphics-types 0.2.0",
"glow",
"glutin_wgl_sys",
"gpu-alloc",
"gpu-allocator",
"gpu-descriptor",
"hashbrown",
"hashbrown 0.16.1",
"js-sys",
"khronos-egl",
"libc",
@@ -4343,11 +4207,13 @@ dependencies = [
"log",
"metal",
"naga",
"ndk-sys 0.5.0+25.2.9519653",
"ndk-sys",
"objc",
"once_cell",
"ordered-float",
"parking_lot",
"portable-atomic",
"portable-atomic-util",
"profiling",
"range-alloc",
"raw-window-handle",
@@ -4363,9 +4229,9 @@ dependencies = [
[[package]]
name = "wgpu-types"
version = "25.0.0"
version = "27.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc"
checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb"
dependencies = [
"bitflags 2.9.4",
"bytemuck",
@@ -5077,7 +4943,6 @@ dependencies = [
"ordered-stream",
"serde",
"serde_repr",
"tokio",
"tracing",
"uds_windows",
"windows-sys 0.59.0",
@@ -5234,7 +5099,6 @@ dependencies = [
"endi",
"enumflags2",
"serde",
"url",
"winnow",
"zvariant_derive",
"zvariant_utils",

View File

@@ -5,22 +5,22 @@ edition = "2024"
[dependencies]
defmt = { version = "1.0.1" }
eframe = { version = "0.32.0"}
egui_plot = "0.33.0"
egui_dock = "0.17.0"
egui_extras = "0.32.3"
log = "0.4.27"
eframe = { version = "0.33.3"}
egui_plot = "0.34.0"
egui_dock = "0.18.0"
egui_extras = "0.33.3"
log = "0.4.29"
simple_logger = "5.0.0"
atomic_float = "1.1.0"
chrono = { version = "0.4.42" }
rfd = { version = "0.16.0", features = ["tokio"] }
chrono = { version = "0.4.43" }
rfd = { version = "0.17.2" }
[dependencies.bioz-icd-rs]
path = "../bioz-icd-rs"
features = ["use-std"]
[dependencies.postcard-rpc]
version = "0.11.15"
version = "0.12.1"
features = [
"use-std",
"raw-nusb",
@@ -32,7 +32,7 @@ version = "0.2.5"
features = ["derive", "heapless_v0_8"]
[dependencies.tokio]
version = "1.37.0"
version = "1.49.0"
features = [
"rt-multi-thread",
"macros",
@@ -47,7 +47,7 @@ version = "5.4.4"
name = "Bio-Z App"
identifier = "bioz-host-rs"
icon = ["bundle/bio-z.icns"]
version = "0.1.0"
version = "0.1.1"
copyright = "Hubald Verzijl"
category = "Developer Tool"
long_description = "App belonging to the Bio-Z setup."

View File

@@ -7,6 +7,7 @@ This repository contains Rust-based software for communicating with a custom-bui
- Data logging to `.csv` files
- Day and night display modes
- Control via on-screen buttons or keyboard shortcuts
- Adding custom markers at specific timepoints
## How to Use This Software
1. Install the Rust toolchain and run the software using:

View File

@@ -12,7 +12,7 @@ use chrono::Local;
use atomic_float::AtomicF32;
use tokio::{sync::mpsc::{Sender}};
use eframe::egui::{self, Button, CollapsingHeader, Color32, ComboBox, DragValue, Id, Key, Label, Layout, Modifiers, RichText, TextEdit, Widget};
use eframe::egui::{self, Button, CollapsingHeader, Color32, ComboBox, DragValue, Id, Key, Label, Layout, Modal, Modifiers, RichText, TextEdit, Widget};
use egui_plot::{Corner, GridInput, GridMark, Legend, Line, Plot, PlotPoint, Points};
use egui_dock::{DockArea, DockState, Style};
use egui_extras::{TableBuilder, Column};
@@ -70,6 +70,8 @@ pub struct App {
pub periods_per_dft_sweep: Arc<Mutex<(Vec<u32>, Option<Vec<f32>>)>>,
pub gui_logging_state: Arc<Mutex<LoggingStates>>,
log_filename: String,
log_marker_modal: bool,
log_marker: String,
}
struct TabViewer {
@@ -123,6 +125,12 @@ impl TabViewer {
*lead_mode = LEAD_MODES[index];
info!("Lead Mode setting changed!");
}
// Show lead configuration
match *lead_mode {
BioImpedanceLeadMode::TwoLead => ui.label("Drive/sense: Electrode+ (CE0), Electrode- (AIN1)"),
BioImpedanceLeadMode::FourLead => ui.label("Drive: I+ (CE0), I- (AIN1) | Sense: V+ (AIN2), V- (AIN3)"),
}
});
});
ui.add_enabled_ui(!*on, |ui| {
@@ -251,6 +259,12 @@ impl TabViewer {
*lead_mode = LEAD_MODES[index];
info!("Lead Mode setting changed!");
}
// Show lead configuration
match *lead_mode {
BioImpedanceLeadMode::TwoLead => ui.label("Drive/sense: Electrode+ (CE0), Electrode- (AIN1)"),
BioImpedanceLeadMode::FourLead => ui.label("Drive: I+ (CE0), I- (AIN1) | Sense: V+ (AIN2), V- (AIN3)"),
}
});
});
ui.add_enabled_ui(!*on, |ui| {
@@ -404,6 +418,7 @@ impl TabViewer {
ui.label("R: Reset view/plots");
ui.label("S: Toggle settings");
ui.label("L: Toggle logging");
ui.label("A: Add marker (when logging)");
ui.label("CMD-W: Close window");
}
}
@@ -542,7 +557,9 @@ impl App {
periods_per_dft,
periods_per_dft_sweep,
gui_logging_state: Arc::new(Mutex::new(LoggingStates::Idle)),
log_filename: format!("log_{}.csv", Local::now().format("%Y%m%d"))
log_filename: format!("log_{}_single.csv", Local::now().format("%Y%m%d")),
log_marker_modal: false,
log_marker: String::new(),
};
// For testing purposes, populate the Bode plot with a sample low-pass filter response
@@ -608,10 +625,27 @@ impl eframe::App for App {
ui.separator();
if ui.add_enabled(connected, toggle_start_stop(&mut *self.on.lock().unwrap())).changed() {
self.update_start_stop();
let on = *self.on.lock().unwrap();
let (color, text) = match on {
true => (Color32::DARK_RED, "Stop"),
false => (Color32::DARK_GREEN, "Start"),
};
let start_stop_button = Button::new(
RichText::new(text)
.strong()
.color(Color32::WHITE)
).fill(color)
.corner_radius(5.0)
.min_size(egui::vec2(45.0, 0.0))
.frame(true);
if ui.add_enabled(connected, start_stop_button).clicked() {
*self.on.lock().unwrap() = !on;
self.update_start_stop();
}
ui.separator();
if ui.add_enabled(connected, Button::new("Reset view")).clicked() {
@@ -620,33 +654,83 @@ impl eframe::App for App {
ui.separator();
ui.add_enabled(connected, Label::new("Logging:"));
let gui_logging_state = *self.gui_logging_state.lock().unwrap();
let (color, signal) = match gui_logging_state {
LoggingStates::Idle => (Color32::DARK_RED, LoggingSignal::StartFileLogging(self.log_filename.clone())),
LoggingStates::Starting => (Color32::from_rgb(204, 153, 0), LoggingSignal::StopFileLogging),
LoggingStates::Logging => (Color32::DARK_GREEN, LoggingSignal::StopFileLogging),
};
let mut logging_enabled = !matches!(gui_logging_state, LoggingStates::Idle);
let button = Button::new(
RichText::new("Logging")
.strong()
.color(Color32::WHITE)
).fill(color)
.corner_radius(5.0)
.frame(true);
if ui.add_enabled(connected, toggle_start_stop(&mut logging_enabled)).changed() {
let signal = match gui_logging_state {
LoggingStates::Idle => LoggingSignal::StartFileLogging(self.log_filename.clone()),
LoggingStates::Starting | LoggingStates::Logging => LoggingSignal::StopFileLogging,
};
if ui.add(button).clicked() {
self.log_tx.try_send(signal).unwrap_or_else(|e| {
error!("Failed to send logging toggle signal: {:?}", e);
});
};
ui.separator();
ui.add_enabled_ui(on && logging_enabled, |ui| {
if Button::new("Add marker").corner_radius(5.0).min_size(egui::vec2(20.0, 0.0)).ui(ui).on_hover_text("Add a marker to the current time series plots").clicked() {
self.log_marker_modal = true;
}
});
if self.log_marker_modal {
if Modal::new(Id::new("modal_marker"))
.show(ctx, |ui| {
ui.vertical_centered(|ui| {
ui.heading("Add marker");
ui.add_space(16.0);
// Input field for marker
let text_edit_response = TextEdit::singleline(&mut self.log_marker)
.desired_width(100.0)
.id(Id::new("marker_field"))
.hint_text("Marker name")
.ui(ui);
ui.add_space(16.0);
// Centered Add button
let add_clicked = Button::new("Add")
.corner_radius(5.0)
.min_size(egui::vec2(80.0, 30.0))
.ui(ui)
.clicked();
// Check for Enter key in the TextEdit
let enter_pressed = text_edit_response.lost_focus() && ui.input(|i| i.key_pressed(egui::Key::Enter));
if add_clicked || enter_pressed {
info!("Adding marker: {}", self.log_marker);
self.log_tx.try_send(LoggingSignal::AddMarker(self.log_marker.clone())).unwrap_or_else(|e| {
error!("Failed to send logging marker signal: {:?}", e);
});
self.log_marker = String::new();
ui.close();
}
// Request focus on the text edit when the modal opens
text_edit_response.request_focus();
});
})
.should_close()
{
self.log_marker_modal = false;
self.log_marker = String::new();
}
}
ui.separator();
ui.add_enabled_ui(gui_logging_state == LoggingStates::Idle, |ui| {
ui.label("Log filename:");
TextEdit::singleline(&mut self.log_filename).desired_width(125.0).id(Id::new("file_name_field")).ui(ui);
TextEdit::singleline(&mut self.log_filename).desired_width(150.0).id(Id::new("file_name_field")).ui(ui);
});
// Spacer to push the LED to the right
@@ -691,6 +775,12 @@ impl eframe::App for App {
self.tab_active = TabActive::Single;
*self.on.lock().unwrap() = false;
self.update_start_stop();
if *self.gui_logging_state.lock().unwrap() == LoggingStates::Logging {
self.log_tx.try_send(LoggingSignal::StopFileLogging).unwrap_or_else(|e| {
error!("Failed to send logging logging signal: {:?}", e);
});
}
self.log_filename = format!("log_{}_single.csv", Local::now().format("%Y%m%d"));
info!("Switched to Single tab");
}
}
@@ -699,6 +789,12 @@ impl eframe::App for App {
self.tab_active = TabActive::Sweep;
*self.on.lock().unwrap() = false;
self.update_start_stop();
if *self.gui_logging_state.lock().unwrap() == LoggingStates::Logging {
self.log_tx.try_send(LoggingSignal::StopFileLogging).unwrap_or_else(|e| {
error!("Failed to send logging logging signal: {:?}", e);
});
}
self.log_filename = format!("log_{}_sweep.csv", Local::now().format("%Y%m%d"));
info!("Switched to Sweep tab");
}
}
@@ -725,7 +821,8 @@ impl eframe::App for App {
// Check if the file name field is focused
// If it is, we don't want to trigger shortcuts
let file_name_field_is_focused = ctx.memory(|memory| memory.has_focus(Id::new("file_name_field")));
if !file_name_field_is_focused {
let marker_field_is_focused = ctx.memory(|memory| memory.has_focus(Id::new("marker_field")));
if !file_name_field_is_focused && !marker_field_is_focused {
// Space to start/stop measurement
if ctx.input(|i| i.key_pressed(Key::Space))
@@ -746,6 +843,11 @@ impl eframe::App for App {
self.reset_view();
}
// Toggle marker modal
if ctx.input(|i| i.key_pressed(egui::Key::A)) && *self.gui_logging_state.lock().unwrap() == LoggingStates::Logging {
self.log_marker_modal = !self.log_marker_modal;
}
// Enable/disable GUI logging
if ctx.input(|i| i.key_pressed(egui::Key::L)) {
let gui_logging_enabled = *self.gui_logging_state.lock().unwrap();

View File

@@ -1,3 +1,6 @@
use eframe::NativeOptions;
use eframe::egui::Vec2;
use simple_logger::SimpleLogger;
use log::info;
use tokio::runtime::Runtime;
@@ -69,9 +72,11 @@ async fn main() {
});
// Run the GUI in the main thread.
let mut native_options = NativeOptions::default();
native_options.viewport.inner_size = Some(Vec2::new(850.0, 600.0));
let _ = eframe::run_native(
"Impedance Visualizer [egui + tokio] - Hubald Verzijl - 2025",
eframe::NativeOptions::default(),
native_options,
Box::new(|_cc| Ok(Box::new(app))),
);
}

View File

@@ -23,6 +23,7 @@ pub async fn log_data(
gui_logging_state: Arc<Mutex<LoggingStates>>,
) {
let mut file: Option<File> = None;
let mut logging_marker = String::new();
loop {
match data.recv().await {
@@ -30,25 +31,40 @@ pub async fn log_data(
match signal {
LoggingSignal::SingleImpedance(timestamp, frequency, magnitude, phase) => {
if let Some(f) = file.as_mut() {
let _ = f
.write_all(format!("{},{},{:.3},{:.3}\n", timestamp.duration_since(UNIX_EPOCH).unwrap().as_millis(), frequency, magnitude, phase).as_bytes())
.await;
let _ = f.write_all(format!("{},{},{},{},{}\n",
timestamp.duration_since(UNIX_EPOCH).unwrap().as_millis(),
frequency,
magnitude,
phase,
logging_marker)
.as_bytes())
.await;
}
if logging_marker.len() > 0 {
logging_marker.clear();
}
}
LoggingSignal::SweepImpedance(timestamp, frequencies, magnitudes, phases) => {
if let Some(f) = file.as_mut() {
for i in 0..frequencies.len() {
let _ = f.write_all(
format!("{},{},{},{},{}\n",
format!("{},{},{},{},{},{}\n",
timestamp.duration_since(UNIX_EPOCH).unwrap().as_millis(),
frequencies[i],
magnitudes[i],
phases[i],
i // optional index
i, // optional index
logging_marker
).as_bytes()
).await;
}
}
if logging_marker.len() > 0 {
logging_marker.clear();
}
}
LoggingSignal::AddMarker(marker) => {
logging_marker = marker;
}
LoggingSignal::StartFileLogging(filename) => {
// Update global logging state

View File

@@ -14,4 +14,5 @@ pub enum LoggingSignal {
SweepImpedance(SystemTime, Vec<u32>, Vec<f32>, Vec<f32>), // frequency, magnitude, phase
StartFileLogging(String), // e.g. filename
StopFileLogging,
AddMarker(String),
}