diff --git a/Cargo.lock b/Cargo.lock index b1f925a..7695627 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,7 +29,7 @@ dependencies = [ [[package]] name = "alvr_common" version = "21.0.0-dev01" -source = "git+https://github.com/alvr-org/ALVR.git#cf6af694d08f5cdb79e3d56e4c5f3bce3f06f5e9" +source = "git+https://github.com/alvr-org/ALVR.git#b07641103954000013824d4f881361403de64789" dependencies = [ "anyhow", "backtrace", @@ -46,7 +46,7 @@ dependencies = [ [[package]] name = "alvr_events" version = "21.0.0-dev01" -source = "git+https://github.com/alvr-org/ALVR.git#cf6af694d08f5cdb79e3d56e4c5f3bce3f06f5e9" +source = "git+https://github.com/alvr-org/ALVR.git#b07641103954000013824d4f881361403de64789" dependencies = [ "alvr_common", "alvr_packets", @@ -58,7 +58,7 @@ dependencies = [ [[package]] name = "alvr_filesystem" version = "21.0.0-dev01" -source = "git+https://github.com/alvr-org/ALVR.git#cf6af694d08f5cdb79e3d56e4c5f3bce3f06f5e9" +source = "git+https://github.com/alvr-org/ALVR.git#b07641103954000013824d4f881361403de64789" dependencies = [ "dirs", "once_cell", @@ -67,7 +67,7 @@ dependencies = [ [[package]] name = "alvr_packets" version = "21.0.0-dev01" -source = "git+https://github.com/alvr-org/ALVR.git#cf6af694d08f5cdb79e3d56e4c5f3bce3f06f5e9" +source = "git+https://github.com/alvr-org/ALVR.git#b07641103954000013824d4f881361403de64789" dependencies = [ "alvr_common", "alvr_session", @@ -78,7 +78,7 @@ dependencies = [ [[package]] name = "alvr_session" version = "21.0.0-dev01" -source = "git+https://github.com/alvr-org/ALVR.git#cf6af694d08f5cdb79e3d56e4c5f3bce3f06f5e9" +source = "git+https://github.com/alvr-org/ALVR.git#b07641103954000013824d4f881361403de64789" dependencies = [ "alvr_common", "alvr_filesystem", @@ -148,10 +148,28 @@ dependencies = [ ] [[package]] -name = "atomic-waker" -version = "1.1.2" +name = "aquamarine" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +checksum = "a941c39708478e8eea39243b5983f1c42d2717b3620ee91f4a52115fd02ac43f" +dependencies = [ + "itertools 0.9.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] [[package]] name = "autocfg" @@ -159,6 +177,109 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "autocxx" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54119c5e38d82c13a66cf6c6e6d089ff61c2a8f956b61f50485fd636e8f64656" +dependencies = [ + "aquamarine", + "autocxx-macro", + "cxx", + "moveit", +] + +[[package]] +name = "autocxx-bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d81238f7571a7fe1743bebbfaf218ad9aeceaec0f1f25c74b2d3f42b16fa17ea" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.72", +] + +[[package]] +name = "autocxx-build" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "903e016de6be8ef8eb1bdc71b0f7988519c057281a762f9ecb57e0d8a145e03c" +dependencies = [ + "autocxx-engine", + "env_logger 0.9.3", + "indexmap", + "syn 2.0.72", +] + +[[package]] +name = "autocxx-engine" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a25218b648277c080a939f40ccd99bdacdd6789aa44f8135d48d363acc15191" +dependencies = [ + "aquamarine", + "autocxx-bindgen", + "autocxx-parser", + "cc", + "cxx-gen", + "indexmap", + "indoc", + "itertools 0.10.5", + "log", + "miette", + "once_cell", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustversion", + "serde_json", + "syn 2.0.72", + "tempfile", + "thiserror", + "version_check", +] + +[[package]] +name = "autocxx-macro" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fe757787d219845e5d521d1d98d4f3f296b52f586e4eaedbc84ee813f976e0e" +dependencies = [ + "autocxx-parser", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "autocxx-parser" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4512e25df8158477d071ee789768c31891095e77b1b767c7bcdb3b48513d8e6c" +dependencies = [ + "indexmap", + "itertools 0.10.5", + "log", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 2.0.72", + "thiserror", +] + [[package]] name = "backtrace" version = "0.3.73" @@ -221,7 +342,7 @@ checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -232,15 +353,24 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" [[package]] name = "cc" -version = "1.1.0" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" + +[[package]] +name = "cexpr" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] [[package]] name = "cfg-if" @@ -248,6 +378,27 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "colorchoice" version = "1.0.1" @@ -287,14 +438,10 @@ dependencies = [ ] [[package]] -name = "core-foundation" -version = "0.9.4" +name = "convert_case" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation-sys" @@ -327,6 +474,47 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +[[package]] +name = "cxx" +version = "1.0.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "273dcfd3acd4e1e276af13ed2a43eea7001318823e7a726a6b3ed39b4acc0b82" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-gen" +version = "0.7.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "749d9ac61b735e0d15b041225ad97a6f74b4bdf9f9dc98469553ca6109f57a56" +dependencies = [ + "codespan-reporting", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839fcd5e43464614ffaa989eaf1c139ef1f0c51672a1ed08023307fa1b909ccd" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2c1c1776b986979be68bb2285da855f8d8a35851a769fca8740df7c3d07877" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "darling" version = "0.20.10" @@ -348,7 +536,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.72", ] [[package]] @@ -359,7 +547,20 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.72", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.72", ] [[package]] @@ -404,6 +605,27 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "enumset" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "env_filter" version = "0.1.0" @@ -414,6 +636,19 @@ dependencies = [ "regex", ] +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "env_logger" version = "0.11.3" @@ -427,12 +662,6 @@ dependencies = [ "log", ] -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "errno" version = "0.3.9" @@ -466,21 +695,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -546,7 +760,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -598,9 +812,9 @@ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "glam" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" +checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" dependencies = [ "serde", ] @@ -611,30 +825,11 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "h2" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" @@ -642,6 +837,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.9" @@ -661,9 +865,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", @@ -703,7 +907,6 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2", "http", "http-body", "httparse", @@ -714,39 +917,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" -dependencies = [ - "futures-util", - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-util" version = "0.1.6" @@ -795,12 +965,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "equivalent", + "autocfg", "hashbrown", + "serde", ] [[package]] @@ -826,6 +997,12 @@ dependencies = [ "log", ] +[[package]] +name = "indoc" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" + [[package]] name = "instant" version = "0.1.13" @@ -847,6 +1024,33 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -874,6 +1078,16 @@ version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + [[package]] name = "libredox" version = "0.1.3" @@ -884,6 +1098,15 @@ dependencies = [ "libc", ] +[[package]] +name = "link-cplusplus" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" +dependencies = [ + "cc", +] + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -908,9 +1131,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "mdns-sd" -version = "0.10.5" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8031297470465389c1349c399b927505d0cc4503be7a997c3541765bca82b4d" +checksum = "807457e493076539ff8f202806f9dc2eaa9f13f69701da7ed38eec7a9afd1616" dependencies = [ "flume", "if-addrs", @@ -925,6 +1148,29 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "mime" version = "0.3.17" @@ -958,20 +1204,12 @@ dependencies = [ ] [[package]] -name = "native-tls" -version = "0.2.12" +name = "moveit" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87d7335204cb6ef7bd647fa6db0be3e4d7aa25b5823a7aa030027ddf512cefba" dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "cxx", ] [[package]] @@ -984,6 +1222,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "normpath" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5831952a9476f2fed74b77d74182fa5ddc4d21c72ec45a333b250e3ed0272804" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "ntapi" version = "0.4.1" @@ -999,7 +1246,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", ] @@ -1024,50 +1271,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "openssl" -version = "0.10.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "option-ext" version = "0.2.0" @@ -1082,7 +1285,7 @@ dependencies = [ "alvr_events", "anyhow", "colored", - "env_logger", + "env_logger 0.11.3", "glam", "glob", "indicatif", @@ -1090,6 +1293,7 @@ dependencies = [ "log", "mdns-sd", "once_cell", + "ovr_overlay", "regex", "reqwest", "rosc", @@ -1101,6 +1305,32 @@ dependencies = [ "websocket-lite", ] +[[package]] +name = "ovr_overlay" +version = "0.0.0" +source = "git+https://github.com/galister/ovr_overlay_oyasumi.git#bd03e5bf886f84d438aad95da5c5cc28725013a8" +dependencies = [ + "byteorder", + "derive_more", + "enumset", + "lazy_static", + "log", + "ovr_overlay_sys", + "slice-of-array", + "thiserror", +] + +[[package]] +name = "ovr_overlay_sys" +version = "0.0.0" +source = "git+https://github.com/galister/ovr_overlay_oyasumi.git#bd03e5bf886f84d438aad95da5c5cc28725013a8" +dependencies = [ + "autocxx", + "autocxx-build", + "cxx", + "normpath", +] + [[package]] name = "parking_lot" version = "0.12.3" @@ -1153,7 +1383,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -1168,12 +1398,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - [[package]] name = "polling" version = "2.8.0" @@ -1192,9 +1416,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "ppv-lite86" @@ -1202,6 +1426,40 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.72", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro2" version = "1.0.86" @@ -1272,9 +1530,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags 2.6.0", ] @@ -1331,30 +1589,23 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", "http", "http-body", "http-body-util", "hyper", - "hyper-rustls", - "hyper-tls", "hyper-util", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "system-configuration", "tokio", - "tokio-native-tls", "tower-service", "url", "wasm-bindgen", @@ -1363,21 +1614,6 @@ dependencies = [ "winreg", ] -[[package]] -name = "ring" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", -] - [[package]] name = "rosc" version = "0.10.1" @@ -1395,56 +1631,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.23.11" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4828ea528154ae444e5a642dbb7d5623354030dc9822b83fd9bb79683c7399d0" -dependencies = [ - "once_cell", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "rustls-pemfile" -version = "2.1.2" +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "base64 0.22.1", - "rustls-pki-types", + "semver", ] [[package]] -name = "rustls-pki-types" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" - -[[package]] -name = "rustls-webpki" -version = "0.102.5" +name = "rustix" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1459,44 +1670,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "security-framework" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "1.0.23" @@ -1523,7 +1702,7 @@ checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -1567,7 +1746,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -1581,9 +1760,15 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" @@ -1603,6 +1788,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slice-of-array" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f120bb98cb4cb0dab21c882968c3cbff79dd23b46f07b1cf5c25044945ce84" + [[package]] name = "smallvec" version = "1.13.2" @@ -1653,20 +1844,25 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 2.0.72", ] [[package]] -name = "subtle" -version = "2.6.1" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] name = "syn" -version = "2.0.70" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -1694,27 +1890,6 @@ dependencies = [ "windows", ] -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tempfile" version = "3.10.1" @@ -1727,24 +1902,33 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -1764,9 +1948,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" dependencies = [ "backtrace", "bytes", @@ -1789,28 +1973,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls", - "rustls-pki-types", - "tokio", + "syn 2.0.72", ] [[package]] @@ -1905,12 +2068,6 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - [[package]] name = "url" version = "2.5.2" @@ -1929,10 +2086,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -name = "vcpkg" -version = "0.2.15" +name = "version_check" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "want" @@ -1970,7 +2127,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.72", "wasm-bindgen-shared", ] @@ -2004,7 +2161,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2049,10 +2206,8 @@ dependencies = [ "base64 0.13.1", "bytes", "futures", - "native-tls", "rand", "tokio", - "tokio-native-tls", "tokio-util", "url", "websocket-codec", @@ -2074,6 +2229,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -2247,9 +2411,3 @@ dependencies = [ "cfg-if", "windows-sys 0.48.0", ] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index e8ab22e..496cf22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,13 +5,16 @@ edition = "2021" [dependencies] env_logger = "0.11.3" -glam = "0.27.0" +glam = "0.28.0" glob = "0.3.1" log = "0.4.19" -mdns-sd = "0.10.5" +mdns-sd = "0.11.1" once_cell = "1.18.0" regex = "1.10.2" -reqwest = { version = "0.12.3", features = ["blocking"] } +reqwest = { version = "0.12.3", features = [ + "blocking", + "charset", +], default-features = false } rosc = "0.10.1" serde = { version = "1.0.188", features = ["derive", "rc"] } serde_json = "1.0.107" @@ -19,8 +22,9 @@ strum = { version = "0.26.2", features = ["derive"] } tokio = { version = "1.32.0", features = ["full"] } alvr_events = { git = "https://github.com/alvr-org/ALVR.git", optional = true } alvr_common = { git = "https://github.com/alvr-org/ALVR.git", optional = true } +ovr_overlay = { git = "https://github.com/galister/ovr_overlay_oyasumi.git", optional = true } sysinfo = { version = "0.30.0", optional = true } -websocket-lite = { version = "0.5.2", optional = true } +websocket-lite = { version = "0.5.2", optional = true, default-features = false } anyhow = "1.0.82" indicatif = "0.17.8" colored = "2.1.0" @@ -36,3 +40,4 @@ alvr = [ ] wivrn = [] babble = [] +openvr = ["dep:ovr_overlay"] diff --git a/src/core/ext_openvr.rs b/src/core/ext_openvr.rs new file mode 100644 index 0000000..5028a60 --- /dev/null +++ b/src/core/ext_openvr.rs @@ -0,0 +1,253 @@ +use std::{ + f32::consts::PI, + sync::Arc, + time::{Duration, Instant}, +}; + +use super::{bundle::AvatarBundle, AppState}; +use colored::{Color, Colorize}; +use glam::{vec3, Affine3A, Quat, Vec3A}; +use once_cell::sync::Lazy; +use ovr_overlay::{ + sys::{ + ETrackedDeviceClass, ETrackingResult, ETrackingUniverseOrigin, EVRApplicationType, + EVREventType, HmdMatrix34_t, + }, + system::SystemManager, + Context, TrackedDeviceIndex, +}; +use rosc::{OscBundle, OscType}; + +pub struct ExtOpenVr { + devices: TrackedDevices, + context: Option, + next_device_update: Instant, + next_init_attempt: Instant, + head: Option, + head_y: f32, + floor_y: f32, + frames: u32, +} + +static OPENVR_ON: Lazy> = Lazy::new(|| format!("{}", "OPENVR".color(Color::Green)).into()); +static OPENVR_OFF: Lazy> = Lazy::new(|| format!("{}", "OPENVR".color(Color::Red)).into()); + +const FEET_Y: f32 = 0.10; +const HEAD_Y: f32 = -0.25; + +static TRACKER_ADJUST: Lazy = Lazy::new(|| Affine3A::from_rotation_x(PI * 0.5)); + +type TrackedDevices = [TrackedDevice; 8]; + +#[derive(Default)] +struct TrackedDevice { + serial: String, + active: bool, + pos: Vec3A, +} + +impl ExtOpenVr { + pub fn new() -> Self { + Self { + next_device_update: Instant::now(), + next_init_attempt: Instant::now(), + context: None, + devices: Default::default(), + head: None, + head_y: f32::MIN, + floor_y: f32::MAX, + frames: 0, + } + } + + pub fn step(&mut self, state: &mut AppState, bundle: &mut OscBundle) { + if self.context.is_none() { + if self.next_init_attempt > Instant::now() { + state.status.add_item(OPENVR_OFF.clone()); + return; + } + + let app_type = EVRApplicationType::VRApplication_Background; + let Ok(context) = ovr_overlay::Context::init(app_type) else { + self.next_init_attempt = Instant::now() + Duration::from_secs(15); + log::debug!("OpenVR: server unavailable"); + state.status.add_item(OPENVR_OFF.clone()); + return; + }; + self.context = Some(context); + } + + let context = self.context.as_mut().unwrap(); + let mut system_mgr = context.system_mngr(); + + while let Some(event) = system_mgr.poll_next_event() { + match event.event_type { + EVREventType::VREvent_Quit => { + log::warn!("OpenVR: shutting down"); + unsafe { context.shutdown() }; + self.context = None; + self.next_init_attempt = Instant::now() + Duration::from_secs(15); + state.status.add_item(OPENVR_OFF.clone()); + return; + } + EVREventType::VREvent_TrackedDeviceActivated + | EVREventType::VREvent_TrackedDeviceDeactivated + | EVREventType::VREvent_TrackedDeviceUpdated => { + self.next_device_update = Instant::now(); + } + _ => {} + } + } + state.status.add_item(OPENVR_ON.clone()); + + if self.next_device_update <= Instant::now() { + log::debug!("OpenVR: TrackedDevice update"); + update_devices(&mut system_mgr, &mut self.devices); + self.next_device_update = Instant::now() + Duration::from_secs(30); + } + + let device_tracking = system_mgr.get_device_to_absolute_tracking_pose( + ETrackingUniverseOrigin::TrackingUniverseStanding, + state.status.last_frame_time, + ); + for (idx, device) in self.devices.iter_mut().enumerate() { + if !device.active { + continue; + } + + let tracking = device_tracking.get(idx).unwrap(); + + if !tracking.bPoseIsValid + || !tracking.bDeviceIsConnected + || !matches!( + tracking.eTrackingResult, + ETrackingResult::TrackingResult_Running_OK + ) + { + continue; + } + + let affine = tracking.mDeviceToAbsoluteTracking.to_affine() * *TRACKER_ADJUST; + + if self.frames < 90 { + self.floor_y = self.floor_y.min(affine.translation.y - FEET_Y); + + if affine.translation.y > self.floor_y + 1.6 && self.head_y < affine.translation.y { + self.head_y = affine.translation.y; + self.head = Some(idx); + } + + continue; + } + + let mut p = affine.translation; + let quat = Quat::from_affine3(&affine); + let (ry, rx, rz) = quat.to_euler(glam::EulerRot::YXZ); + let deg = vec3(rx.to_degrees(), ry.to_degrees(), rz.to_degrees()); + + let (addr_pos, addr_rot) = if self.head.is_some_and(|head| head == idx) { + p += affine.y_axis * HEAD_Y; + ( + "/tracking/trackers/head/position".into(), + "/tracking/trackers/head/rotation".into(), + ) + } else { + ( + format!("/tracking/trackers/{idx}/position"), + format!("/tracking/trackers/{idx}/rotation"), + ) + }; + + bundle.send_tracking( + &addr_pos, + vec![ + OscType::Float(p.x), + OscType::Float(p.y - self.floor_y), + OscType::Float(p.z), + ], + ); + + bundle.send_tracking( + &addr_rot, + vec![ + OscType::Float(deg.x), + OscType::Float(deg.y), + OscType::Float(deg.z), + ], + ); + } + self.frames += 1; + if self.frames == 90 { + let head_str = self + .head + .and_then(|idx| self.devices.get(idx)) + .map(|dev| dev.serial.clone()); + + log::info!( + "OpenVR: Calibration complete.\n head: {:?}\n floor_y: {:.2}", + head_str, + self.floor_y + ); + } + } +} + +fn update_devices(system: &mut SystemManager, devices: &mut [TrackedDevice; 8]) { + for (idx, device) in devices.iter_mut().enumerate() { + let dev_idx = TrackedDeviceIndex::new(idx as _).unwrap(); // safe + if !system.is_tracked_device_connected(dev_idx) { + device.active = false; + continue; + } + if let Ok(serial) = system.get_tracked_device_property::( + dev_idx, + ovr_overlay::sys::ETrackedDeviceProperty::Prop_SerialNumber_String, + ) { + device.serial = serial; + } + + let class = system.get_tracked_device_class(dev_idx); + match class { + ETrackedDeviceClass::TrackedDeviceClass_HMD + | ETrackedDeviceClass::TrackedDeviceClass_TrackingReference + | ETrackedDeviceClass::TrackedDeviceClass_Controller => { + device.active = false; + log::debug!("OpenVR: Not a tracker: {}", &device.serial); + continue; + } + ETrackedDeviceClass::TrackedDeviceClass_GenericTracker => {} + _ => { + device.active = false; + log::debug!("OpenVR: Invalid device: {}", &device.serial); + continue; + } + } + + if !device.active { + log::info!("OpenVR: New tracker: {}", &device.serial); + device.active = true; + } + + if let Ok(soc) = system.get_tracked_device_property::( + dev_idx, + ovr_overlay::sys::ETrackedDeviceProperty::Prop_DeviceBatteryPercentage_Float, + ) { + log::info!("OpenVR: {} is at {}%", device.serial, (soc * 100.0) as i32) + } + } +} + +pub trait Affine3AConvert { + fn to_affine(&self) -> Affine3A; +} + +impl Affine3AConvert for HmdMatrix34_t { + fn to_affine(&self) -> Affine3A { + Affine3A::from_cols_array_2d(&[ + [self.m[0][0], self.m[1][0], -self.m[2][0]], + [self.m[0][1], self.m[1][1], -self.m[2][1]], + [-self.m[0][2], -self.m[1][2], self.m[2][2]], + [self.m[0][3], self.m[1][3], -self.m[2][3]], + ]) + } +} diff --git a/src/core/mod.rs b/src/core/mod.rs index 2db331b..d751475 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -26,6 +26,9 @@ mod ext_tracking; mod folders; mod watchdog; +#[cfg(feature = "openvr")] +mod ext_openvr; + pub mod status; pub const PARAM_PREFIX: &str = "/avatar/parameters/"; @@ -51,6 +54,8 @@ pub struct AvatarOsc { ext_storage: ext_storage::ExtStorage, ext_gogo: ext_gogo::ExtGogo, ext_tracking: ext_tracking::ExtTracking, + #[cfg(feature = "openvr")] + ext_openvr: ext_openvr::ExtOpenVr, multi: MultiProgress, } @@ -76,6 +81,9 @@ impl AvatarOsc { let ext_tracking = ext_tracking::ExtTracking::new(); let ext_oscjson = ext_oscjson::ExtOscJson::new(); + #[cfg(feature = "openvr")] + let ext_openvr = ext_openvr::ExtOpenVr::new(); + AvatarOsc { osc_port, upstream, @@ -84,6 +92,8 @@ impl AvatarOsc { ext_storage, ext_gogo, ext_tracking, + #[cfg(feature = "openvr")] + ext_openvr, multi, } } @@ -235,6 +245,9 @@ impl AvatarOsc { self.ext_autopilot .step(state, &self.ext_tracking, &mut bundle); + #[cfg(feature = "openvr")] + self.ext_openvr.step(state, &mut bundle); + if let Some(packet) = bundle.content.first() { if let OscPacket::Message(..) = packet { rosc::encoder::encode(packet) diff --git a/src/core/status.rs b/src/core/status.rs index 4dc2dd1..e0f0d23 100644 --- a/src/core/status.rs +++ b/src/core/status.rs @@ -10,6 +10,7 @@ pub struct StatusBar { fps_counter: VecDeque, fps: f32, start: Instant, + pub last_frame_time: f32, } impl StatusBar { @@ -26,11 +27,15 @@ impl StatusBar { recv_counter: VecDeque::new(), fps_counter: VecDeque::new(), start: Instant::now(), + last_frame_time: 0f32, fps: 1f32, } } pub fn trip_fps_counter(&mut self) { + if let Some(last) = self.fps_counter.back() { + self.last_frame_time = last.elapsed().as_secs_f32(); + } self.fps_counter.push_back(Instant::now()); while let Some(time) = self.fps_counter.front() {