diff --git a/Cargo.lock b/Cargo.lock index d4dd1577..d2d888bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -17,6 +17,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -124,6 +135,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + [[package]] name = "async-broadcast" version = "0.7.0" @@ -206,7 +223,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", ] [[package]] @@ -241,7 +258,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", ] [[package]] @@ -282,6 +299,18 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bindgen" version = "0.69.4" @@ -297,9 +326,9 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", - "syn 2.0.66", + "syn 2.0.98", ] [[package]] @@ -361,17 +390,63 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" -version = "1.6.0" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.12+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" +dependencies = [ + "cc", + "libc", + "pkg-config", +] [[package]] name = "cc" -version = "1.0.98" +version = "1.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cec-rs" +version = "11.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "bef32f58383985a3bd2bed1af59acacb5820c98cb28affe31c7733e9896dd7f9" +dependencies = [ + "arrayvec 0.7.6", + "derive_builder", + "enum-repr", + "libcec-sys", + "log", + "num-traits", +] [[package]] name = "cexpr" @@ -406,6 +481,16 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clang-sys" version = "1.7.0" @@ -471,7 +556,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", ] [[package]] @@ -480,6 +565,15 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + [[package]] name = "colorchoice" version = "1.0.1" @@ -505,6 +599,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "core-foundation-sys" version = "0.8.6" @@ -545,6 +645,41 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2c43f534ea4b0b049015d00269734195e6d3f0f6635cb692251aca6f9f8b3c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e91455b86830a1c21799d94524df0845183fa55bafd9aa137b01c7d1065fa36" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29b5acf0dea37a7f66f7b25d2c5e93fd46f8f6968b1a5d7a3e02e97768afc95a" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", +] + [[package]] name = "deranged" version = "0.3.11" @@ -554,6 +689,37 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_builder" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d13202debe11181040ae9063d739fa32cfcaaebe2275fe387703460ae2365b30" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66e616858f6187ed828df7c64a6d71720d83767a7f19740b2d1b6fe6327b36e5" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58a94ace95092c5acb1e97a7e846b310cfbd499652f72297da7493f618a98d73" +dependencies = [ + "derive_builder_core", + "syn 1.0.109", +] + [[package]] name = "digest" version = "0.10.7" @@ -562,6 +728,18 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -576,6 +754,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" +[[package]] +name = "enum-repr" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad30c9c0fa1aaf1ae5010dab11f1117b15d35faf62cda4bbbc53b9987950f18" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "enumflags2" version = "0.7.9" @@ -594,7 +783,7 @@ checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", ] [[package]] @@ -712,12 +901,37 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "funty" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + [[package]] name = "futures-core" version = "0.3.30" @@ -762,8 +976,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", + "futures-io", "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", @@ -786,8 +1002,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -860,12 +1078,117 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" + [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -890,71 +1213,226 @@ dependencies = [ ] [[package]] -name = "indexmap" -version = "2.2.6" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "equivalent", - "hashbrown", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "industrial-io" -version = "0.5.2" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3948a8818efcd4e0e189df60d79b58a9f4ae20b87437b2fde4dc4ca5b520c4ed" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "clap 2.34.0", - "libiio-sys", - "nix 0.23.2", - "thiserror", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "inotify" -version = "0.10.2" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "bitflags 1.3.2", - "futures-core", - "inotify-sys", - "libc", - "tokio", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "inotify-sys" -version = "0.1.5" +name = "icu_locid_transform_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ - "libc", + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", ] [[package]] -name = "inputplumber" -version = "0.46.2" +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "clap 4.5.27", - "clap_complete", - "env_logger", - "evdev", - "glob-match", - "hidapi", - "industrial-io", - "inotify", - "log", - "mio", - "nix 0.29.0", - "packed_struct", - "procfs", + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "industrial-io" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3948a8818efcd4e0e189df60d79b58a9f4ae20b87437b2fde4dc4ca5b520c4ed" +dependencies = [ + "clap 2.34.0", + "libiio-sys", + "nix 0.23.2", + "thiserror 1.0.61", +] + +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "futures-core", + "inotify-sys", + "libc", + "tokio", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "inputplumber" +version = "0.46.2" +dependencies = [ + "cec-rs", + "clap 4.5.27", + "clap_complete", + "env_logger", + "evdev", + "glob-match", + "hidapi", + "industrial-io", + "inotify", + "log", + "mio", + "nix 0.29.0", + "packed_struct", + "procfs", "rand", "serde", "serde_yaml", "tabled", - "thiserror", + "thiserror 1.0.61", "tokio", "udev", "uhid-virt", @@ -991,6 +1469,12 @@ version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a611371471e98973dbcab4e0ec66c31a10bc356eeb4d54a0e05eac8158fe38c" +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + [[package]] name = "is_terminal_polyfill" version = "1.70.0" @@ -1012,6 +1496,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.69" @@ -1039,6 +1532,22 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +[[package]] +name = "libcec-sys" +version = "7.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a33e232feb89363e20b4f755619f68357194a667b5a67b147974b445f6ebd" +dependencies = [ + "cc", + "cfg-if", + "cmake", + "fs_extra", + "pkg-config", + "reqwest", + "target-lexicon", + "zip-extract", +] + [[package]] name = "libiio-sys" version = "0.3.1" @@ -1071,6 +1580,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -1120,6 +1635,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1319,6 +1840,35 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", + "hmac", + "password-hash", + "sha2", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -1403,7 +1953,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", ] [[package]] @@ -1441,6 +1991,58 @@ dependencies = [ "hex", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.1", + "rustls", + "socket2", + "thiserror 2.0.11", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.1", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.11", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -1524,6 +2126,64 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "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 = "rustc-demangle" version = "0.1.24" @@ -1536,6 +2196,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustix" version = "0.38.34" @@ -1549,6 +2215,49 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.23.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "ryu" version = "1.0.18" @@ -1578,7 +2287,19 @@ checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", +] + +[[package]] +name = "serde_json" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", ] [[package]] @@ -1589,7 +2310,19 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", ] [[package]] @@ -1616,6 +2349,17 @@ dependencies = [ "digest", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "shlex" version = "1.3.0" @@ -1681,6 +2425,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1693,12 +2449,24 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -1712,15 +2480,32 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "tabled" version = "0.17.0" @@ -1752,6 +2537,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tempfile" version = "3.10.1" @@ -1779,7 +2570,16 @@ version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.61", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", ] [[package]] @@ -1790,7 +2590,18 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -1826,6 +2637,31 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.37.0" @@ -1854,7 +2690,17 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", ] [[package]] @@ -1874,6 +2720,12 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.40" @@ -1893,7 +2745,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", ] [[package]] @@ -1905,6 +2757,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "typenum" version = "1.17.0" @@ -1979,6 +2837,35 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.1" @@ -2023,7 +2910,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "utf8parse", "vte_generate_state_changes", ] @@ -2038,6 +2925,15 @@ dependencies = [ "quote", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2065,10 +2961,22 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -2087,7 +2995,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2098,6 +3006,35 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2277,6 +3214,28 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "wyz" version = "0.5.1" @@ -2302,6 +3261,30 @@ dependencies = [ "winapi", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure", +] + [[package]] name = "zbus" version = "4.3.1" @@ -2344,7 +3327,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", "zvariant_utils", ] @@ -2359,6 +3342,114 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2", + "sha1", + "zstd", +] + +[[package]] +name = "zip-extract" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e109e5a291403b4c1e514d39f8a22d3f98d257e691a52bb1f16051bb1ffed63e" +dependencies = [ + "log", + "thiserror 1.0.61", + "zip", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] + [[package]] name = "zvariant" version = "4.1.1" @@ -2381,7 +3472,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", "zvariant_utils", ] @@ -2393,5 +3484,5 @@ checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.98", ] diff --git a/Cargo.toml b/Cargo.toml index 24da85d8..4d577a64 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ libiio = "*" libevdev = "*" [dependencies] +cec-rs = "11.0.2" clap = { version = "4.5.27", features = ["derive"] } clap_complete = "4.5.42" env_logger = "0.11.3" diff --git a/Makefile b/Makefile index 5bc0554d..89ead7eb 100644 --- a/Makefile +++ b/Makefile @@ -93,7 +93,7 @@ target/release/$(NAME): $(ALL_RS) Cargo.lock all: build debug ## Build release and debug builds .PHONY: run -run: setup debug ## Build and run +run: debug ## Build and run sudo LOG_LEVEL=$(LOG_LEVEL) ./target/debug/$(NAME) .PHONY: clean diff --git a/rootfs/usr/share/inputplumber/devices/60-cec.yaml b/rootfs/usr/share/inputplumber/devices/60-cec.yaml new file mode 100644 index 00000000..82a966dc --- /dev/null +++ b/rootfs/usr/share/inputplumber/devices/60-cec.yaml @@ -0,0 +1,45 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/ShadowBlip/InputPlumber/main/rootfs/usr/share/inputplumber/schema/composite_device_v1.json +# Schema version number +version: 1 + +# The type of configuration schema +kind: CompositeDevice + +# Name of the composite device mapping +name: CEC + +# Maximum number of source devices per CompositeDevice. +maximum_sources: 2 + +# Only use this profile if *any* of the given matches matches. If this list is +# empty, then the source devices will *always* be checked. +# /sys/class/dmi/id/product_name +matches: [] + +# One or more source devices to combine into a single virtual device. The events +# from these devices will be watched and translated according to the key map. +source_devices: + - group: gamepad + udev: + attributes: + - name: protocols + value: '\[cec\]' + sys_name: "event*" + subsystem: input + - group: gamepad + udev: + sys_name: "cec*" + subsystem: "cec" + +# Optional configuration for the composite device +options: + # If true, InputPlumber will automatically try to manage the input device. If + # this is false, InputPlumber will not try to manage the device unless an + # external service enables management of the device. Defaults to 'false' + auto_manage: false + +# The target input device(s) to emulate by default +target_devices: + - xbox-elite + - mouse + - keyboard diff --git a/src/cli/mod.rs b/src/cli/mod.rs index b026ec02..56824eba 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -46,6 +46,8 @@ pub enum Commands { #[command(subcommand)] cmd: TargetsCommand, }, + /// Query a given device + Query { udev: Option }, } pub async fn main_cli(args: Args) -> Result<(), Box> { @@ -65,6 +67,10 @@ pub async fn main_cli(args: Args) -> Result<(), Box> { Commands::Device { id: number, cmd } => handle_device(connection, cmd, number).await?, Commands::Devices { cmd } => handle_devices(connection, cmd).await?, Commands::Targets { cmd } => handle_targets(connection, cmd).await?, + Commands::Query { udev } => { + println!("Got udev: {udev:?}"); + // + } } Ok(()) diff --git a/src/input/composite_device/mod.rs b/src/input/composite_device/mod.rs index 02f48c07..b212acff 100644 --- a/src/input/composite_device/mod.rs +++ b/src/input/composite_device/mod.rs @@ -34,7 +34,9 @@ use crate::{ Event, }, output_event::UinputOutputEvent, - source::{evdev::EventDevice, hidraw::HidRawDevice, iio::IioDevice, SourceDevice}, + source::{ + cec::CecDevice, evdev::EventDevice, hidraw::HidRawDevice, iio::IioDevice, SourceDevice, + }, }, udev::{device::UdevDevice, hide_device, unhide_device}, }; @@ -1454,6 +1456,11 @@ impl CompositeDevice { let device = IioDevice::new(device, self.client(), source_config.clone())?; SourceDevice::Iio(device) } + "cec" => { + log::debug!("Adding source device: {:?}", device.name()); + let device = CecDevice::new(device, self.client(), source_config.clone())?; + SourceDevice::Cec(device) + } _ => { return Err(format!( "Unspported subsystem: {subsystem}, unable to add source device {}", diff --git a/src/input/manager.rs b/src/input/manager.rs index 33d0b001..b7d694f7 100644 --- a/src/input/manager.rs +++ b/src/input/manager.rs @@ -1381,6 +1381,56 @@ impl Manager { log::debug!("Finished adding event device {id}"); } + "cec" => { + if device.devnode().is_empty() { + log::warn!("cec device discarded for missing devnode: {dev_name} ({dev_sysname}) at {dev_path}"); + return Ok(()); + } + + log::debug!("cec device added: {} ({})", device.name(), device.sysname()); + + // Create a DBus interface for the event device + let conn = self.dbus.clone(); + let path = iio::get_dbus_path(sys_name.clone()); + + log::debug!("Attempting to listen on dbus for device {dev_name} ({dev_sysname}) | {dev_path}"); + let dbus_path = path.clone(); + task::spawn(async move { + let result = SourceUdevDeviceInterface::listen_on_dbus( + conn.clone(), + dbus_path.as_str(), + sysname.as_str(), + dev.clone(), + ) + .await; + if let Err(e) = result { + log::error!("Error creating source udev dbus interface: {e:?}"); + } + + //let result = SourceCecInterface::listen_on_dbus(conn, sysname, dev).await; + //if let Err(e) = result { + // log::error!("Error creating source evdev dbus interface: {e:?}"); + //} + log::debug!("Finished adding source device on dbus"); + }); + + // Add the device as a source device + self.source_device_dbus_paths.insert(id.clone(), path); + + // Check to see if the device is virtual + if device.is_virtual() { + log::debug!("{dev_name} ({dev_sysname}) is virtual, skipping consideration for {dev_path}"); + return Ok(()); + } else { + log::trace!("Device {dev_name} ({dev_sysname}) is real - {dev_path}"); + } + + // Signal that a source device was added + log::debug!("Spawing task to add source device: {id}"); + self.on_source_device_added(id.clone(), device).await?; + log::debug!("Finished adding event device {id}"); + } + _ => { return Err(format!("Device subsystem not supported: {subsystem:?}").into()); } @@ -1428,6 +1478,11 @@ impl Manager { .remove::(path.clone()) .await } + //"cec" => { + // conn.object_server() + // .remove::(path.clone()) + // .await + //} _ => Err(zbus::Error::Failure(format!( "Invalid subsystem: '{subsystem}'" ))), @@ -1542,10 +1597,12 @@ impl Manager { let subsystem = { match base_path.as_str() { "/dev" => { - if !name.starts_with("hidraw") { - None - } else { + if name.starts_with("hidraw") { Some("hidraw") + } else if name.starts_with("cec") { + Some("cec") + } else { + None } } "/dev/input" => Some("input"), @@ -1647,6 +1704,9 @@ impl Manager { let iio_devices = udev::discover_devices("iio")?; let iio_devices = iio_devices.into_iter().map(|dev| dev.into()).collect(); Manager::discover_devices(cmd_tx, iio_devices).await?; + let cec_devices = udev::discover_devices("cec")?; + let cec_devices = cec_devices.into_iter().map(|dev| dev.into()).collect(); + Manager::discover_devices(cmd_tx, cec_devices).await?; Ok(()) } diff --git a/src/input/source/cec.rs b/src/input/source/cec.rs new file mode 100644 index 00000000..53b67931 --- /dev/null +++ b/src/input/source/cec.rs @@ -0,0 +1,69 @@ +use std::error::Error; + +use device::CecRawDevice; + +use crate::{ + config, + input::{capability::Capability, composite_device::client::CompositeDeviceClient}, + udev::device::UdevDevice, +}; + +use super::{client::SourceDeviceClient, SourceDeviceCompatible, SourceDriver}; + +pub mod device; + +/// [CecDevice] represents an input device using CEC +#[derive(Debug)] +pub enum CecDevice { + Device(SourceDriver), +} + +impl SourceDeviceCompatible for CecDevice { + fn get_device_ref(&self) -> &UdevDevice { + match self { + Self::Device(source_driver) => source_driver.info_ref(), + } + } + + fn get_id(&self) -> String { + match self { + Self::Device(source_driver) => source_driver.get_id(), + } + } + + fn client(&self) -> SourceDeviceClient { + match self { + Self::Device(source_driver) => source_driver.client(), + } + } + + async fn run(self) -> Result<(), Box> { + match self { + Self::Device(source_driver) => source_driver.run().await, + } + } + + fn get_capabilities(&self) -> Result, super::InputError> { + match self { + Self::Device(source_driver) => source_driver.get_capabilities(), + } + } + + fn get_device_path(&self) -> String { + match self { + Self::Device(source_driver) => source_driver.get_device_path(), + } + } +} + +impl CecDevice { + pub fn new( + device_info: UdevDevice, + composite_device: CompositeDeviceClient, + conf: Option, + ) -> Result> { + let device = CecRawDevice::new(); + let source_device = SourceDriver::new(composite_device, device, device_info, conf); + Ok(Self::Device(source_device)) + } +} diff --git a/src/input/source/cec/device.rs b/src/input/source/cec/device.rs new file mode 100644 index 00000000..8603c19b --- /dev/null +++ b/src/input/source/cec/device.rs @@ -0,0 +1,36 @@ +use cec_rs::{CecConnectionCfgBuilder, CecDeviceType, CecDeviceTypeVec}; + +use crate::input::{ + capability::Capability, + source::{InputError, SourceInputDevice, SourceOutputDevice}, +}; + +#[derive(Debug)] +pub struct CecRawDevice {} + +impl CecRawDevice { + pub fn new() -> Self { + let cfg = CecConnectionCfgBuilder::default() + .device_types(CecDeviceTypeVec::new(CecDeviceType::AudioSystem)) + .build(); + Self {} + } +} + +impl Default for CecRawDevice { + fn default() -> Self { + Self::new() + } +} + +impl SourceInputDevice for CecRawDevice { + fn poll(&mut self) -> Result, InputError> { + todo!() + } + + fn get_capabilities(&self) -> Result, InputError> { + todo!() + } +} + +impl SourceOutputDevice for CecRawDevice {} diff --git a/src/input/source/evdev.rs b/src/input/source/evdev.rs index 1b200c17..91fbdeee 100644 --- a/src/input/source/evdev.rs +++ b/src/input/source/evdev.rs @@ -1,10 +1,12 @@ pub mod blocked; +pub mod cec; pub mod gamepad; pub mod keyboard; pub mod touchscreen; use std::{collections::HashMap, error::Error, time::Duration}; +use cec::CecEventDevice; use evdev::{Device, EventType}; use keyboard::KeyboardEventDevice; use touchscreen::TouchscreenEventDevice; @@ -24,6 +26,7 @@ enum DriverType { Gamepad, Touchscreen, Keyboard, + Cec, } /// [EventDevice] represents an input device using the input event subsystem. @@ -33,6 +36,7 @@ pub enum EventDevice { Gamepad(SourceDriver), Touchscreen(SourceDriver), Keyboard(SourceDriver), + Cec(SourceDriver), } impl SourceDeviceCompatible for EventDevice { @@ -42,6 +46,7 @@ impl SourceDeviceCompatible for EventDevice { EventDevice::Gamepad(source_driver) => source_driver.info_ref(), EventDevice::Touchscreen(source_driver) => source_driver.info_ref(), EventDevice::Keyboard(source_driver) => source_driver.info_ref(), + EventDevice::Cec(source_driver) => source_driver.info_ref(), } } @@ -51,6 +56,7 @@ impl SourceDeviceCompatible for EventDevice { EventDevice::Gamepad(source_driver) => source_driver.get_id(), EventDevice::Touchscreen(source_driver) => source_driver.get_id(), EventDevice::Keyboard(source_driver) => source_driver.get_id(), + EventDevice::Cec(source_driver) => source_driver.get_id(), } } @@ -60,6 +66,7 @@ impl SourceDeviceCompatible for EventDevice { EventDevice::Gamepad(source_driver) => source_driver.client(), EventDevice::Touchscreen(source_driver) => source_driver.client(), EventDevice::Keyboard(source_driver) => source_driver.client(), + EventDevice::Cec(source_driver) => source_driver.client(), } } @@ -69,6 +76,7 @@ impl SourceDeviceCompatible for EventDevice { EventDevice::Gamepad(source_driver) => source_driver.run().await, EventDevice::Touchscreen(source_driver) => source_driver.run().await, EventDevice::Keyboard(source_driver) => source_driver.run().await, + EventDevice::Cec(source_driver) => source_driver.run().await, } } @@ -80,6 +88,7 @@ impl SourceDeviceCompatible for EventDevice { EventDevice::Gamepad(source_driver) => source_driver.get_capabilities(), EventDevice::Touchscreen(source_driver) => source_driver.get_capabilities(), EventDevice::Keyboard(source_driver) => source_driver.get_capabilities(), + EventDevice::Cec(source_driver) => source_driver.get_capabilities(), } } @@ -89,6 +98,7 @@ impl SourceDeviceCompatible for EventDevice { EventDevice::Gamepad(source_driver) => source_driver.get_device_path(), EventDevice::Touchscreen(source_driver) => source_driver.get_device_path(), EventDevice::Keyboard(source_driver) => source_driver.get_device_path(), + EventDevice::Cec(source_driver) => source_driver.get_device_path(), } } } @@ -137,6 +147,11 @@ impl EventDevice { let source_device = SourceDriver::new(composite_device, device, device_info, conf); Ok(Self::Keyboard(source_device)) } + DriverType::Cec => { + let device = CecEventDevice::new(device_info.clone(), &conf)?; + let source_device = SourceDriver::new(composite_device, device, device_info, conf); + Ok(Self::Cec(source_device)) + } } } @@ -149,6 +164,13 @@ impl EventDevice { return DriverType::Blocked; } + let attributes = device.get_attributes(); + if let Some(protocols) = attributes.get("protocols") { + if protocols.as_str() == "[cec]" { + return DriverType::Cec; + } + } + let properties = device.get_properties(); if properties.contains_key("ID_INPUT_TOUCHSCREEN") { return DriverType::Touchscreen; diff --git a/src/input/source/evdev/cec.rs b/src/input/source/evdev/cec.rs new file mode 100644 index 00000000..d332e02f --- /dev/null +++ b/src/input/source/evdev/cec.rs @@ -0,0 +1,146 @@ +use std::error::Error; +use std::fmt::Debug; +use std::os::fd::AsRawFd; + +use evdev::{Device, EventType, InputEvent}; +use nix::fcntl::{FcntlArg, OFlag}; + +use crate::{ + config::SourceDevice, + input::{ + capability::Capability, + event::{evdev::EvdevEvent, native::NativeEvent}, + source::{InputError, SourceInputDevice, SourceOutputDevice}, + }, + udev::device::UdevDevice, +}; + +// https://github.com/torvalds/linux/blob/master/drivers/media/rc/keymaps/rc-cec.c + +/// Source device implementation for evdev gamepads +pub struct CecEventDevice { + device: Device, +} + +impl CecEventDevice { + /// Create a new [CecEventDevice] source device from the given udev info + pub fn new( + device_info: UdevDevice, + config: &Option, + ) -> Result> { + let path = device_info.devnode(); + log::debug!("Opening device at: {}", path); + let mut device = Device::open(path.clone())?; + + // Grab exclusive access to the device + let should_passthru = config.as_ref().and_then(|c| c.passthrough).unwrap_or(false); + if !should_passthru { + device.grab()?; + } + + // Set the device to do non-blocking reads + // TODO: use epoll to wake up when data is available + // https://github.com/emberian/evdev/blob/main/examples/evtest_nonblocking.rs + let raw_fd = device.as_raw_fd(); + nix::fcntl::fcntl(raw_fd, FcntlArg::F_SETFL(OFlag::O_NONBLOCK))?; + + Ok(Self { device }) + } + + /// Translate the given evdev event into a native event + fn translate(&mut self, event: InputEvent) -> Option { + log::trace!("Received event: {:?}", event); + + // Block Sync events, we create these at the target anyway and they waste processing. + if event.event_type() == EventType::SYNCHRONIZATION { + log::trace!("Holding Sync event from propagating through the processing stack."); + return None; + } + + // Convert the event into a [NativeEvent] + let native_event = NativeEvent::from_evdev_raw(event.into(), None); + + Some(native_event) + } +} + +impl SourceInputDevice for CecEventDevice { + /// Poll the given input device for input events + fn poll(&mut self) -> Result, InputError> { + // Read events from the device + let events = { + let result = self.device.fetch_events(); + let events = match result { + Ok(events) => events, + Err(err) => match err.kind() { + // Do nothing if this would block + std::io::ErrorKind::WouldBlock => return Ok(vec![]), + _ => { + log::trace!("Failed to fetch events: {:?}", err); + let msg = format!("Failed to fetch events: {:?}", err); + return Err(msg.into()); + } + }, + }; + + let events: Vec = events.into_iter().collect(); + events + }; + + // Convert the events into native events + let native_events = events + .into_iter() + .filter_map(|e| self.translate(e)) + .collect(); + + Ok(native_events) + } + + /// Returns the possible input events this device is capable of emitting + fn get_capabilities(&self) -> Result, InputError> { + let mut capabilities = vec![]; + + // Loop through all support events + let events = self.device.supported_events(); + for event in events.iter() { + match event { + EventType::SYNCHRONIZATION => { + capabilities.push(Capability::Sync); + } + EventType::KEY => { + let Some(keys) = self.device.supported_keys() else { + continue; + }; + for key in keys.iter() { + let input_event = InputEvent::new(event.0, key.0, 0); + let evdev_event = EvdevEvent::from(input_event); + let cap = evdev_event.as_capability(); + capabilities.push(cap); + } + } + EventType::RELATIVE => (), + EventType::ABSOLUTE => (), + EventType::MISC => (), + EventType::SWITCH => (), + EventType::LED => (), + EventType::SOUND => (), + EventType::REPEAT => (), + EventType::FORCEFEEDBACK => (), + EventType::POWER => (), + EventType::FORCEFEEDBACKSTATUS => (), + EventType::UINPUT => (), + _ => (), + } + } + + Ok(capabilities) + } +} + +impl SourceOutputDevice for CecEventDevice {} + +impl Debug for CecEventDevice { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("CecEventDevice").finish() + } +} diff --git a/src/input/source/mod.rs b/src/input/source/mod.rs index e4ac264a..9fa7547a 100644 --- a/src/input/source/mod.rs +++ b/src/input/source/mod.rs @@ -8,6 +8,7 @@ use std::{ }; use ::evdev::FFEffectData; +use cec::CecDevice; use thiserror::Error; use tokio::sync::mpsc::{self, error::TryRecvError}; @@ -25,6 +26,7 @@ use super::{ output_event::OutputEvent, }; +pub mod cec; pub mod client; pub mod command; pub mod evdev; @@ -467,6 +469,7 @@ pub enum SourceDevice { Event(EventDevice), HidRaw(HidRawDevice), Iio(IioDevice), + Cec(CecDevice), } impl SourceDevice { @@ -476,6 +479,7 @@ impl SourceDevice { SourceDevice::Event(device) => device.get_device_ref(), SourceDevice::HidRaw(device) => device.get_device_ref(), SourceDevice::Iio(device) => device.get_device_ref(), + SourceDevice::Cec(device) => device.get_device_ref(), } } @@ -485,6 +489,7 @@ impl SourceDevice { SourceDevice::Event(device) => device.get_id(), SourceDevice::HidRaw(device) => device.get_id(), SourceDevice::Iio(device) => device.get_id(), + SourceDevice::Cec(device) => device.get_id(), } } @@ -494,6 +499,7 @@ impl SourceDevice { SourceDevice::Event(device) => device.client(), SourceDevice::HidRaw(device) => device.client(), SourceDevice::Iio(device) => device.client(), + SourceDevice::Cec(device) => device.client(), } } @@ -503,6 +509,7 @@ impl SourceDevice { SourceDevice::Event(device) => device.run().await, SourceDevice::HidRaw(device) => device.run().await, SourceDevice::Iio(device) => device.run().await, + SourceDevice::Cec(device) => device.run().await, } } @@ -512,6 +519,7 @@ impl SourceDevice { SourceDevice::Event(device) => device.get_capabilities(), SourceDevice::HidRaw(device) => device.get_capabilities(), SourceDevice::Iio(device) => device.get_capabilities(), + SourceDevice::Cec(device) => device.get_capabilities(), } } @@ -521,6 +529,7 @@ impl SourceDevice { SourceDevice::Event(device) => device.get_device_path(), SourceDevice::HidRaw(device) => device.get_device_path(), SourceDevice::Iio(device) => device.get_device_path(), + SourceDevice::Cec(device) => device.get_device_path(), } } }