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

View File

@@ -5,22 +5,22 @@ edition = "2024"
[dependencies] [dependencies]
defmt = { version = "1.0.1" } defmt = { version = "1.0.1" }
eframe = { version = "0.32.0"} eframe = { version = "0.33.3"}
egui_plot = "0.33.0" egui_plot = "0.34.0"
egui_dock = "0.17.0" egui_dock = "0.18.0"
egui_extras = "0.32.3" egui_extras = "0.33.3"
log = "0.4.27" log = "0.4.29"
simple_logger = "5.0.0" simple_logger = "5.0.0"
atomic_float = "1.1.0" atomic_float = "1.1.0"
chrono = { version = "0.4.42" } chrono = { version = "0.4.43" }
rfd = { version = "0.16.0", features = ["tokio"] } rfd = { version = "0.17.2" }
[dependencies.bioz-icd-rs] [dependencies.bioz-icd-rs]
path = "../bioz-icd-rs" path = "../bioz-icd-rs"
features = ["use-std"] features = ["use-std"]
[dependencies.postcard-rpc] [dependencies.postcard-rpc]
version = "0.11.15" version = "0.12.1"
features = [ features = [
"use-std", "use-std",
"raw-nusb", "raw-nusb",
@@ -32,7 +32,7 @@ version = "0.2.5"
features = ["derive", "heapless_v0_8"] features = ["derive", "heapless_v0_8"]
[dependencies.tokio] [dependencies.tokio]
version = "1.37.0" version = "1.49.0"
features = [ features = [
"rt-multi-thread", "rt-multi-thread",
"macros", "macros",
@@ -47,7 +47,7 @@ version = "5.4.4"
name = "Bio-Z App" name = "Bio-Z App"
identifier = "bioz-host-rs" identifier = "bioz-host-rs"
icon = ["bundle/bio-z.icns"] icon = ["bundle/bio-z.icns"]
version = "0.1.0" version = "0.1.1"
copyright = "Hubald Verzijl" copyright = "Hubald Verzijl"
category = "Developer Tool" category = "Developer Tool"
long_description = "App belonging to the Bio-Z setup." 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 - Data logging to `.csv` files
- Day and night display modes - Day and night display modes
- Control via on-screen buttons or keyboard shortcuts - Control via on-screen buttons or keyboard shortcuts
- Adding custom markers at specific timepoints
## How to Use This Software ## How to Use This Software
1. Install the Rust toolchain and run the software using: 1. Install the Rust toolchain and run the software using:

View File

@@ -12,7 +12,7 @@ use chrono::Local;
use atomic_float::AtomicF32; use atomic_float::AtomicF32;
use tokio::{sync::mpsc::{Sender}}; 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_plot::{Corner, GridInput, GridMark, Legend, Line, Plot, PlotPoint, Points};
use egui_dock::{DockArea, DockState, Style}; use egui_dock::{DockArea, DockState, Style};
use egui_extras::{TableBuilder, Column}; 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 periods_per_dft_sweep: Arc<Mutex<(Vec<u32>, Option<Vec<f32>>)>>,
pub gui_logging_state: Arc<Mutex<LoggingStates>>, pub gui_logging_state: Arc<Mutex<LoggingStates>>,
log_filename: String, log_filename: String,
log_marker_modal: bool,
log_marker: String,
} }
struct TabViewer { struct TabViewer {
@@ -123,6 +125,12 @@ impl TabViewer {
*lead_mode = LEAD_MODES[index]; *lead_mode = LEAD_MODES[index];
info!("Lead Mode setting changed!"); 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| { ui.add_enabled_ui(!*on, |ui| {
@@ -251,6 +259,12 @@ impl TabViewer {
*lead_mode = LEAD_MODES[index]; *lead_mode = LEAD_MODES[index];
info!("Lead Mode setting changed!"); 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| { ui.add_enabled_ui(!*on, |ui| {
@@ -404,6 +418,7 @@ impl TabViewer {
ui.label("R: Reset view/plots"); ui.label("R: Reset view/plots");
ui.label("S: Toggle settings"); ui.label("S: Toggle settings");
ui.label("L: Toggle logging"); ui.label("L: Toggle logging");
ui.label("A: Add marker (when logging)");
ui.label("CMD-W: Close window"); ui.label("CMD-W: Close window");
} }
} }
@@ -542,7 +557,9 @@ impl App {
periods_per_dft, periods_per_dft,
periods_per_dft_sweep, periods_per_dft_sweep,
gui_logging_state: Arc::new(Mutex::new(LoggingStates::Idle)), 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 // 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(); ui.separator();
if ui.add_enabled(connected, toggle_start_stop(&mut *self.on.lock().unwrap())).changed() { let on = *self.on.lock().unwrap();
self.update_start_stop();
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(); ui.separator();
if ui.add_enabled(connected, Button::new("Reset view")).clicked() { if ui.add_enabled(connected, Button::new("Reset view")).clicked() {
@@ -620,33 +654,83 @@ impl eframe::App for App {
ui.separator(); ui.separator();
ui.add_enabled(connected, Label::new("Logging:"));
let gui_logging_state = *self.gui_logging_state.lock().unwrap(); let gui_logging_state = *self.gui_logging_state.lock().unwrap();
let (color, signal) = match gui_logging_state { let mut logging_enabled = !matches!(gui_logging_state, LoggingStates::Idle);
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 button = Button::new( if ui.add_enabled(connected, toggle_start_stop(&mut logging_enabled)).changed() {
RichText::new("Logging") let signal = match gui_logging_state {
.strong() LoggingStates::Idle => LoggingSignal::StartFileLogging(self.log_filename.clone()),
.color(Color32::WHITE) LoggingStates::Starting | LoggingStates::Logging => LoggingSignal::StopFileLogging,
).fill(color) };
.corner_radius(5.0)
.frame(true);
if ui.add(button).clicked() {
self.log_tx.try_send(signal).unwrap_or_else(|e| { self.log_tx.try_send(signal).unwrap_or_else(|e| {
error!("Failed to send logging toggle signal: {:?}", 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.separator();
ui.add_enabled_ui(gui_logging_state == LoggingStates::Idle, |ui| { ui.add_enabled_ui(gui_logging_state == LoggingStates::Idle, |ui| {
ui.label("Log filename:"); 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 // Spacer to push the LED to the right
@@ -691,6 +775,12 @@ impl eframe::App for App {
self.tab_active = TabActive::Single; self.tab_active = TabActive::Single;
*self.on.lock().unwrap() = false; *self.on.lock().unwrap() = false;
self.update_start_stop(); 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"); info!("Switched to Single tab");
} }
} }
@@ -699,6 +789,12 @@ impl eframe::App for App {
self.tab_active = TabActive::Sweep; self.tab_active = TabActive::Sweep;
*self.on.lock().unwrap() = false; *self.on.lock().unwrap() = false;
self.update_start_stop(); 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"); info!("Switched to Sweep tab");
} }
} }
@@ -725,7 +821,8 @@ impl eframe::App for App {
// Check if the file name field is focused // Check if the file name field is focused
// If it is, we don't want to trigger shortcuts // 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"))); 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 // Space to start/stop measurement
if ctx.input(|i| i.key_pressed(Key::Space)) if ctx.input(|i| i.key_pressed(Key::Space))
@@ -746,6 +843,11 @@ impl eframe::App for App {
self.reset_view(); 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 // Enable/disable GUI logging
if ctx.input(|i| i.key_pressed(egui::Key::L)) { if ctx.input(|i| i.key_pressed(egui::Key::L)) {
let gui_logging_enabled = *self.gui_logging_state.lock().unwrap(); 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 simple_logger::SimpleLogger;
use log::info; use log::info;
use tokio::runtime::Runtime; use tokio::runtime::Runtime;
@@ -69,9 +72,11 @@ async fn main() {
}); });
// Run the GUI in the main thread. // 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( let _ = eframe::run_native(
"Impedance Visualizer [egui + tokio] - Hubald Verzijl - 2025", "Impedance Visualizer [egui + tokio] - Hubald Verzijl - 2025",
eframe::NativeOptions::default(), native_options,
Box::new(|_cc| Ok(Box::new(app))), Box::new(|_cc| Ok(Box::new(app))),
); );
} }

View File

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

View File

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