diff --git a/bluetooth-lib/.gitignore b/bluetooth-lib/.gitignore deleted file mode 100644 index f4dfb82..0000000 --- a/bluetooth-lib/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -/target/ - diff --git a/bluetooth-lib/Cargo.lock b/bluetooth-lib/Cargo.lock deleted file mode 100644 index 6dc0cef..0000000 --- a/bluetooth-lib/Cargo.lock +++ /dev/null @@ -1,1492 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "anyhow" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" - -[[package]] -name = "async-stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.105", -] - -[[package]] -name = "async-trait" -version = "0.1.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08b108ad2665fa3f6e6a517c3d80ec3e77d224c47d605167aefaa5d7ef97fa48" -dependencies = [ - "async-trait", - "axum-core", - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b8558f5a0581152dc94dcd289132a1d377494bdeafcd41869b3258e3e2ad92" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "bluetooth-lib" -version = "0.1.0" -dependencies = [ - "async-trait", - "iobluetooth", - "log", - "thiserror", - "tokio", - "windows", -] - -[[package]] -name = "bumpalo" -version = "3.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" - -[[package]] -name = "bytes" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" - -[[package]] -name = "cc" -version = "1.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -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 = "futures" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" - -[[package]] -name = "futures-executor" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" - -[[package]] -name = "futures-macro" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.105", -] - -[[package]] -name = "futures-sink" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - -[[package]] -name = "futures-task" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" - -[[package]] -name = "futures-util" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "h2" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "iobluetooth" -version = "0.1.0" -dependencies = [ - "async-stream", - "cocoa", - "core-foundation", - "futures", - "itertools", - "lazy_static", - "libc", - "log", - "objc", - "prost", - "tokio", - "tokio-stream", - "tonic", - "tonic-build", - "tower", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.138" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matchit" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "num_cpus" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "once_cell" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "petgraph" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.105", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c142c0e46b57171fe0c528bee8c5b7569e80f0c17e377cd0e30ea57dbc11bb51" -dependencies = [ - "proc-macro2", - "syn 1.0.105", -] - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b18e655c21ff5ac2084a5ad0611e827b3f92badf79f4910b5a5c58f4d87ff0" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276470f7f281b0ed53d2ae42dd52b4a8d08853a3c70e7fe95882acbb98a6ae94" -dependencies = [ - "bytes", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 1.0.105", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 1.0.105", -] - -[[package]] -name = "prost-types" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "regex" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustls" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" -dependencies = [ - "base64", -] - -[[package]] -name = "rustversion" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "serde" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256b9932320c590e707b94576e3cc1f7c9024d0ee6612dfbcf1cb106cbe8e055" - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "socket2" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "syn" -version = "1.0.105" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "tokio" -version = "1.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.105", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-stream" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tonic" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64", - "bytes", - "flate2", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "prost-derive", - "rustls-pemfile", - "tokio", - "tokio-rustls", - "tokio-stream", - "tokio-util", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic-build" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "quote", - "syn 1.0.105", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.105", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.105", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.105", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "which" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" -dependencies = [ - "either", - "libc", - "once_cell", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.0", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm 0.42.0", - "windows_x86_64_msvc 0.42.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/bluetooth-lib/Cargo.toml b/bluetooth-lib/Cargo.toml deleted file mode 100644 index 609dbce..0000000 --- a/bluetooth-lib/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "bluetooth-lib" -version = "0.2.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -tokio = { version = "1.24.2", features = ["time", "macros", "rt-multi-thread"] } -async-trait = "0.1.68" -log = "0.4.17" -thiserror = "1.0.40" - -[target.'cfg(target_os = "macos")'.dependencies] -iobluetooth = { path = "iobluetooth" } - -[target.'cfg(target_os = "windows")'.dependencies.windows] -version = "0.48.0" -features = [ - "Win32_Foundation", - "Win32_Networking_WinSock", - "Win32_Devices_Bluetooth", - "Devices_Bluetooth", - "Devices_Bluetooth_Rfcomm", - "Devices_Enumeration", - "Foundation_Collections", - "Foundation", - "Storage_Streams", - "Networking_Sockets" -] diff --git a/bluetooth-lib/Readme.md b/bluetooth-lib/Readme.md deleted file mode 100644 index dadaa1d..0000000 --- a/bluetooth-lib/Readme.md +++ /dev/null @@ -1,6 +0,0 @@ -# bluetooth-lib -Internal Bluetooth Library used primarily for RFCOMM sockets - -# TODO -- Async windows Sockets (https://learn.microsoft.com/en-us/windows/uwp/devices-sensors/send-or-receive-files-with-rfcomm) -- Async Linux sockets \ No newline at end of file diff --git a/bluetooth-lib/examples/rfcomm.rs b/bluetooth-lib/examples/rfcomm.rs deleted file mode 100644 index 6570201..0000000 --- a/bluetooth-lib/examples/rfcomm.rs +++ /dev/null @@ -1,13 +0,0 @@ -use bluetooth_lib::{platform::RFCOMM, RFCOMMClient}; - -#[tokio::main] -async fn main() { - let mut rfcomm = RFCOMM::new().await.unwrap(); - rfcomm - .connect_uuid( - "AC:12:2F:6A:D2:07".into(), - "00001101-0000-1000-8000-00805F9B34FB", - ) - .await - .unwrap(); -} diff --git a/bluetooth-lib/examples/scan.rs b/bluetooth-lib/examples/scan.rs deleted file mode 100644 index b781506..0000000 --- a/bluetooth-lib/examples/scan.rs +++ /dev/null @@ -1,8 +0,0 @@ -use bluetooth_lib::{platform::BthScanner, Scanner}; - -#[tokio::main] -async fn main() { - let mut scanner = BthScanner::new(); - let devices = scanner.scan().await; - println!("{:?}", devices); -} diff --git a/bluetooth-lib/iobluetooth/.gitignore b/bluetooth-lib/iobluetooth/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/bluetooth-lib/iobluetooth/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/bluetooth-lib/iobluetooth/Cargo.lock b/bluetooth-lib/iobluetooth/Cargo.lock deleted file mode 100644 index 0388343..0000000 --- a/bluetooth-lib/iobluetooth/Cargo.lock +++ /dev/null @@ -1,1383 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "anyhow" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" - -[[package]] -name = "async-stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08b108ad2665fa3f6e6a517c3d80ec3e77d224c47d605167aefaa5d7ef97fa48" -dependencies = [ - "async-trait", - "axum-core", - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b8558f5a0581152dc94dcd289132a1d377494bdeafcd41869b3258e3e2ad92" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "bumpalo" -version = "3.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" - -[[package]] -name = "bytes" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" - -[[package]] -name = "cc" -version = "1.0.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -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 = "futures" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" - -[[package]] -name = "futures-executor" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" - -[[package]] -name = "futures-macro" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - -[[package]] -name = "futures-task" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" - -[[package]] -name = "futures-util" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "h2" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "iobluetooth" -version = "0.1.0" -dependencies = [ - "async-stream", - "cocoa", - "core-foundation", - "futures", - "itertools", - "lazy_static", - "libc", - "log", - "objc", - "prost", - "tokio", - "tokio-stream", - "tonic", - "tonic-build", - "tower", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.138" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matchit" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "num_cpus" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "once_cell" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "petgraph" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c142c0e46b57171fe0c528bee8c5b7569e80f0c17e377cd0e30ea57dbc11bb51" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "proc-macro2" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b18e655c21ff5ac2084a5ad0611e827b3f92badf79f4910b5a5c58f4d87ff0" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e330bf1316db56b12c2bcfa399e8edddd4821965ea25ddb2c134b610b1c1c604" -dependencies = [ - "bytes", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "regex" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustls" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" -dependencies = [ - "base64", -] - -[[package]] -name = "rustversion" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "serde" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256b9932320c590e707b94576e3cc1f7c9024d0ee6612dfbcf1cb106cbe8e055" - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "socket2" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "syn" -version = "1.0.105" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "tokio" -version = "1.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-stream" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tonic" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64", - "bytes", - "flate2", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "prost-derive", - "rustls-pemfile", - "tokio", - "tokio-rustls", - "tokio-stream", - "tokio-util", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic-build" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "quote", - "syn", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "which" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" -dependencies = [ - "either", - "libc", - "once_cell", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" diff --git a/bluetooth-lib/iobluetooth/Cargo.toml b/bluetooth-lib/iobluetooth/Cargo.toml deleted file mode 100644 index 672cffd..0000000 --- a/bluetooth-lib/iobluetooth/Cargo.toml +++ /dev/null @@ -1,36 +0,0 @@ -[package] -name = "iobluetooth" -build = "build.rs" -version = "0.2.0" -edition = "2021" - -[[bin]] -name = "client" -path = "src/client.rs" - -[[bin]] -name = "soundcoremanager-iobtserver" -path = "src/server.rs" - - - -[target.'cfg(target_os = "macos")'.dependencies] -itertools = "0.10.5" -# Required for tonic -async-stream = "0.3" -futures = "0.3.25" -prost = "0.11" -tokio = { version = "1.24.2", features = [ "rt-multi-thread", "time", "fs", "macros", "net"] } -tokio-stream = { version = "0.1", features = ["net"] } -tonic = { version = "0.8.3", features = ["tls", "gzip"] } -tower = { version = "0.4" } -# Required for mac -objc = { version = "0.2.7" } -cocoa = "0.24.1" -core-foundation = "0.9.1" -libc = "0.2.112" -log = "0.4.17" -lazy_static = "1.4.0" - -[build-dependencies] -tonic-build = { version = "0.8.4", features = ["prost"] } diff --git a/bluetooth-lib/iobluetooth/build.rs b/bluetooth-lib/iobluetooth/build.rs deleted file mode 100644 index c34a1de..0000000 --- a/bluetooth-lib/iobluetooth/build.rs +++ /dev/null @@ -1,9 +0,0 @@ -fn main() -> Result<(), Box> { - // Compile the proto files in the protos directory - // only on macOS - if cfg!(target_os = "macos") { - tonic_build::compile_protos("protos/search.proto").unwrap(); - tonic_build::compile_protos("protos/rfcomm.proto").unwrap(); - } - Ok(()) -} diff --git a/bluetooth-lib/iobluetooth/examples/search.rs b/bluetooth-lib/iobluetooth/examples/search.rs deleted file mode 100644 index 3716e0e..0000000 --- a/bluetooth-lib/iobluetooth/examples/search.rs +++ /dev/null @@ -1,9 +0,0 @@ -#[cfg(target_os = "macos")] -use iobluetooth::scan; - -fn main() { - #[cfg(target_os = "macos")] - let res = scan(); - #[cfg(target_os = "macos")] - println!("{:?}", res); -} diff --git a/bluetooth-lib/iobluetooth/protos/rfcomm.proto b/bluetooth-lib/iobluetooth/protos/rfcomm.proto deleted file mode 100644 index 2197538..0000000 --- a/bluetooth-lib/iobluetooth/protos/rfcomm.proto +++ /dev/null @@ -1,38 +0,0 @@ -syntax = "proto3"; - -package RFCOMM; - -service RFCOMM { - rpc OpenRFCOMMChannel(OpenRFCOMMChannelRequest) returns (OpenRFCOMMChannelResponse); - rpc CloseRFCOMMChannel(CloseRFCOMMChannelRequest) returns (CloseRFCOMMChannelResponse); - rpc SendRFCOMMData(SendRFCOMMDataRequest) returns (SendRFCOMMDataResponse); - rpc RecvRFCOMMData(RecvRFCOMMDataRequest) returns (RecvRFCOMMDataResponse); -} - -message OpenRFCOMMChannelRequest { - string addr = 1; - string uuid = 2; -} - -message OpenRFCOMMChannelResponse { - bool success = 1; -} - -message CloseRFCOMMChannelRequest {} - -message CloseRFCOMMChannelResponse {} - -message SendRFCOMMDataRequest { - bytes data = 1; -} - -message SendRFCOMMDataResponse { - bool success = 1; -} - -message RecvRFCOMMDataRequest { -} - -message RecvRFCOMMDataResponse { - bytes data = 1; -} \ No newline at end of file diff --git a/bluetooth-lib/iobluetooth/protos/search.proto b/bluetooth-lib/iobluetooth/protos/search.proto deleted file mode 100644 index e9e1501..0000000 --- a/bluetooth-lib/iobluetooth/protos/search.proto +++ /dev/null @@ -1,21 +0,0 @@ -syntax = "proto3"; - -package Searcher; - -service BtSearcher { - rpc scan (SearchRequest) returns (SearchResponse) {} -} - -message SearchRequest { - optional uint64 timeToScan = 1; -} - -message SearchResponse { - repeated SearchItem result = 1; -} - -message SearchItem { - string name = 1; - string addr = 2; - bool isConnected = 3; -} \ No newline at end of file diff --git a/bluetooth-lib/iobluetooth/src/client.rs b/bluetooth-lib/iobluetooth/src/client.rs deleted file mode 100644 index e8cc9d3..0000000 --- a/bluetooth-lib/iobluetooth/src/client.rs +++ /dev/null @@ -1,91 +0,0 @@ -#[cfg(target_os = "macos")] -use rfcomm::{ - rfcomm_client::RfcommClient, OpenRfcommChannelRequest, OpenRfcommChannelResponse, - RecvRfcommDataRequest, RecvRfcommDataResponse, SendRfcommDataRequest, SendRfcommDataResponse, -}; -#[cfg(target_os = "macos")] -use searcher::{bt_searcher_client::BtSearcherClient, SearchItem, SearchRequest}; -#[cfg(target_os = "macos")] -use tokio::runtime::{Handle, Runtime}; - -#[cfg(target_os = "macos")] -pub mod searcher { - tonic::include_proto!("Searcher"); -} - -#[cfg(target_os = "macos")] -pub mod rfcomm { - tonic::include_proto!("RFCOMM"); -} -#[cfg(target_os = "macos")] -fn main() { - // let scan_res = scan(); - // println!("scan_res: {:?}", scan_res); - // open_rfcomm( - // "00001101-0000-1000-8000-00805F9B34FB".to_string(), - // "AC-12-2F-6A-D2-07".to_string(), - // ); - // let rf_req = tonic::Request::new(rfcomm::OpenRfcommChannelRequest { - // addr: "AC-12-2F-6A-D2-07".to_string(), - // uuid: "00001101-0000-1000-8000-00805F9B34FB".to_string(), - // }); - // let mut rf_client = RfcommClient::connect("http://[::1]:8080").await.unwrap(); - // // let rf_resp = rf_client.open_rfcomm_channel(rf_req).await.unwrap(); - // // println!("got rf_resp {:?}", rf_resp); - //open_rfcomm("00001101-0000-1000-8000-00805F9B34FB".to_string(), "AC-12-2F-6A-D2-07".to_string()); - let data = [0x08, 0xEE, 0x00, 0x00, 0x00, 0x01, 0x05, 0x0A, 0x00, 0x06]; - send_rfcomm_data(data.to_vec()); - let recv = recv_rfcomm_data(); - println!("recv: {:?}", recv); - let recv = recv_rfcomm_data(); - println!("recv: {:?}", recv); - // let rf_send_req = tonic::Request::new(rfcomm::SendRfcommDataRequest { - // data: data.to_vec(), - // }); - // let rf_send_resp = rf_client.send_rfcomm_data(rf_send_req).await.unwrap(); - // println!("got rf_send_resp {:?}", rf_send_resp); -} - -#[tokio::main] -#[cfg(target_os = "macos")] -async fn send_rfcomm_data(data: Vec) { - let rf_send_req = tonic::Request::new(rfcomm::SendRfcommDataRequest { data: data }); - let mut rf_client = RfcommClient::connect("http://[::1]:8080").await.unwrap(); - let _rf_send_resp = rf_client.send_rfcomm_data(rf_send_req).await.unwrap(); -} - -#[tokio::main] -#[cfg(target_os = "macos")] -async fn recv_rfcomm_data() -> Vec { - let rf_recv_req = tonic::Request::new(rfcomm::RecvRfcommDataRequest {}); - let mut rf_client = RfcommClient::connect("http://[::1]:8080").await.unwrap(); - let rf_recv_resp = rf_client.recv_rfcomm_data(rf_recv_req).await.unwrap(); - rf_recv_resp.into_inner().data -} - -#[tokio::main] -#[cfg(target_os = "macos")] -async fn open_rfcomm(uuid: String, addr: String) { - let rf_req = tonic::Request::new(rfcomm::OpenRfcommChannelRequest { - addr: addr, - uuid: uuid, - }); - let mut rf_client = RfcommClient::connect("http://[::1]:8080").await.unwrap(); - let _rf_resp = rf_client.open_rfcomm_channel(rf_req).await.unwrap(); -} - -#[tokio::main] -#[cfg(target_os = "macos")] -async fn scan() -> Vec { - let mut client = - futures::executor::block_on(BtSearcherClient::connect("http://[::1]:8080")).unwrap(); - let request = tonic::Request::new(SearchRequest { - time_to_scan: Some(5), - }); - let resp = futures::executor::block_on(client.scan(request)).unwrap(); - let scan_res: Vec = resp.into_inner().result; - scan_res -} - -#[cfg(not(target_os = "macos"))] -fn main() {} diff --git a/bluetooth-lib/iobluetooth/src/inquiry_adapter.rs b/bluetooth-lib/iobluetooth/src/inquiry_adapter.rs deleted file mode 100644 index 2fb279d..0000000 --- a/bluetooth-lib/iobluetooth/src/inquiry_adapter.rs +++ /dev/null @@ -1,98 +0,0 @@ -use std::{ - sync::{Arc, Mutex}, - time::{Duration, Instant}, -}; - -use itertools::Itertools; - -use cocoa::{ - base::id, - foundation::{NSDate, NSRunLoop}, -}; -use core_foundation::{ - base::{kCFAllocatorDefault, kCFAllocatorNull, Boolean}, - mach_port::CFIndex, - runloop::{CFRunLoopGetCurrent, CFRunLoopRun, CFRunLoopRunInMode, CFRunLoopStop}, - string::{kCFStringEncodingUTF8, CFString, CFStringCreateWithBytesNoCopy, CFStringRef}, -}; -use lazy_static::lazy_static; -use objc::{ - msg_send, - rc::StrongPtr, - runtime::{Class, Object}, - sel, sel_impl, class, -}; - -use crate::{ - inquiry_delegate::InquiryDelegate::{self}, - iobluetoothdevice::IOBTDevice, - iobluetoothdeviceinquiry::IOBluetoothDeviceInquiry, -}; - -pub struct InquiryAdapter { - inquiry: StrongPtr, - delegate: StrongPtr, /* We need to hold the delegate otherwise it gets dropped */ -} -unsafe impl Send for InquiryAdapter {} -unsafe impl Sync for InquiryAdapter {} - -lazy_static! { - static ref SCAN_RESULTS: Arc>> = Arc::new(Mutex::new(Vec::new())); -} - -impl InquiryAdapter { - pub fn new() -> Self { - unsafe { - let d = InquiryDelegate::delegate(Self::add_device_cb as fn(IOBTDevice)); - let delegate = StrongPtr::new(d); - let inquiry = IOBluetoothDeviceInquiry::new(*delegate); - Self { - inquiry: StrongPtr::new(inquiry.as_obj()), - delegate: delegate, - } - } - } - pub fn scan(&self) { - unsafe { - let () = msg_send![*self.inquiry, start]; - } - } - - pub fn stop(&self) { - unsafe { - let () = msg_send![*self.inquiry, stop]; - // CFRunLoopStop(CFRunLoopGetCurrent()); - } - } - - fn add_device_cb(device: IOBTDevice) { - SCAN_RESULTS.lock().unwrap().push(device); - } -} - -pub fn search(duration: Option) -> Vec { - SCAN_RESULTS.lock().unwrap().clear(); - let adapt = Arc::new(InquiryAdapter::new()); - if let Some(dur) = duration { - let a = adapt.clone(); - std::thread::spawn(move || { - std::thread::sleep(dur); - a.stop(); - }); - } - adapt.scan(); - if let Some(dur) = duration { - std::thread::sleep(dur); - } - unsafe { - let paired: id = msg_send![class!(IOBluetoothDevice), pairedDevices]; - // paired is an NSArray of IOBluetoothDevice - let count: CFIndex = msg_send![paired, count]; - for i in 0..count { - let dev: id = msg_send![paired, objectAtIndex: i]; - SCAN_RESULTS.lock().unwrap().push(IOBTDevice::from_id(dev)); - } - } - /* Collect results */ - SCAN_RESULTS.lock().unwrap().clone().into_iter().unique_by(|d| d.address()).collect() -} diff --git a/bluetooth-lib/iobluetooth/src/inquiry_delegate.rs b/bluetooth-lib/iobluetooth/src/inquiry_delegate.rs deleted file mode 100644 index cbdda61..0000000 --- a/bluetooth-lib/iobluetooth/src/inquiry_delegate.rs +++ /dev/null @@ -1,126 +0,0 @@ -use cocoa::base::id; -use futures::channel::mpsc::{self, Receiver, Sender}; -use futures::sink::SinkExt; -use libc::c_void; -use objc::runtime::Class; -use objc::{ - class, - declare::ClassDecl, - runtime::{Object, Sel}, -}; -use objc::{msg_send, sel, sel_impl}; -use std::sync::Once; - -/* Huge Thanks to https://github.com/deviceplug/btleplug/blob/886a905298d007fb4a53f6490b8e35f110a1c2c1/src/corebluetooth/central_delegate.rs */ - -pub mod InquiryDelegate { - use cocoa::base::BOOL; - use core_foundation::runloop::{CFRunLoopGetCurrent, CFRunLoopStop}; - use log::trace; - - pub type AddDeviceCallback = fn(IOBTDevice) -> (); - - use crate::iobluetoothdevice::IOBTDevice; - - use super::*; - - const DELEGATE_SENDER_IVAR: &str = "_add_dev_cb"; - - pub fn delegate(cb: AddDeviceCallback) -> id { - let cb = Box::new(cb); - let delegate = unsafe { - let mut delegate: id = msg_send![delegate_class(), alloc]; - delegate = msg_send![delegate, initWithSender: Box::into_raw(cb) as *mut c_void]; - delegate - }; - delegate - } - - fn delegate_class() -> &'static Class { - static REGISTER_DELEGATE_CLASS: Once = Once::new(); - REGISTER_DELEGATE_CLASS.call_once(|| { - let mut decl = ClassDecl::new("IOBTInquiryDelegate", class!(NSObject)).unwrap(); - // For some odd reason IOBluetoothDeviceInquiryDelegate is not found, but using only NSObject works - //let proto = Protocol::get("IOBluetoothDeviceInquiryDelegate").unwrap(); - //decl.add_protocol(proto); - decl.add_ivar::<*mut c_void>(DELEGATE_SENDER_IVAR); - unsafe { - decl.add_method( - sel!(initWithSender:), - delegate_init as extern "C" fn(&mut Object, Sel, *mut c_void) -> id, - ); - decl.add_method( - sel!(deviceInquiryComplete:error:aborted:), - inquirydelegate_deviceInquiryComplete - as extern "C" fn(&mut Object, Sel, *mut Object, i32, BOOL), - ); - decl.add_method( - sel!(deviceInquiryStarted:), - inquirydelegate_deviceInquiryStarted - as extern "C" fn(&mut Object, Sel, *mut Object), - ); - decl.add_method( - sel!(deviceInquiryDeviceFound:device:), - inquirydelegate_deviceInquiryDeviceFound - as extern "C" fn(&mut Object, Sel, *mut Object, *mut Object), - ); - } - decl.register(); - }); - - class!(IOBTInquiryDelegate) - } - - /* Utility Functions */ - - fn delegate_get_cb_fn(delegate: &mut Object) -> AddDeviceCallback { - unsafe { - let cb = &(*(*(&*delegate).get_ivar::<*mut c_void>(DELEGATE_SENDER_IVAR) - as *mut AddDeviceCallback)); - cb.clone() - } - } - - extern "C" fn delegate_init(delegate: &mut Object, _cmd: Sel, sender: *mut c_void) -> id { - /* initWithSender */ - unsafe { - delegate.set_ivar(DELEGATE_SENDER_IVAR, sender); - } - delegate - } - - /* Handlers */ - - extern "C" fn inquirydelegate_deviceInquiryStarted( - _delegate: &mut Object, - _cmd: Sel, - _sender: *mut Object, - ) { - trace!("inquiry started"); - } - - extern "C" fn inquirydelegate_deviceInquiryComplete( - _delegate: &mut Object, - _cmd: Sel, - _sender: *mut Object, - _error: i32, - _aborted: BOOL, - ) { - unsafe { - CFRunLoopStop(CFRunLoopGetCurrent()); - } - trace!("inquiry complete"); - } - - extern "C" fn inquirydelegate_deviceInquiryDeviceFound( - delegate: &mut Object, - _cmd: Sel, - _sender: *mut Object, - device: *mut Object, - ) { - unsafe { - trace!("device found"); - delegate_get_cb_fn(delegate)(IOBTDevice::from_id(device)); - } - } -} diff --git a/bluetooth-lib/iobluetooth/src/iobluetoothdevice.rs b/bluetooth-lib/iobluetooth/src/iobluetoothdevice.rs deleted file mode 100644 index c0dbbf5..0000000 --- a/bluetooth-lib/iobluetooth/src/iobluetoothdevice.rs +++ /dev/null @@ -1,143 +0,0 @@ -use std::fmt::Debug; - -use cocoa::base::{id, BOOL}; -use libc::{uint32_t, uint8_t, KERN_SUCCESS}; -use objc::{ - class, msg_send, - rc::StrongPtr, - runtime::{Class, Object}, - sel, sel_impl, -}; - -use crate::util::{string_to_string, IOBluetoothRFCOMMChannel, IOReturn}; - -#[derive(Clone, Copy)] -pub struct IOBTDevice { - device: id, /* IOBluetoothDevice */ -} - -impl Debug for IOBTDevice { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("IOBTDevice") - .field("name", &self.name()) - .field("mac", &self.address()) - .finish() - } -} - -impl Default for IOBTDevice { - fn default() -> Self { - unsafe { - let null_ptr = std::ptr::null::(); - Self::from_id(null_ptr as id) - } - } -} - -unsafe impl Send for IOBTDevice {} -unsafe impl Sync for IOBTDevice {} - -impl IOBTDevice { - /* Form of NSString is xx:xx:xx:xx:xx:xx */ - pub fn new(add: &str) -> IOBTDevice { - /* Convert string to NSString */ - unsafe { - let addr = cocoa::foundation::NSString::init_str( - cocoa::foundation::NSString::alloc(cocoa::base::nil), - add, - ); - - IOBTDevice { - device: msg_send![ - Class::get("IOBluetoothDevice").unwrap(), - deviceWithAddressString: addr /* NSString */ - ], - } - } - } - - pub fn from_id(device: id /* IOBluetoothDevice object */) -> IOBTDevice { - IOBTDevice { device } - } - - pub fn as_id(&self) -> id { - self.device - } - - pub fn address(&self) -> String { - unsafe { - let addr: id = msg_send![self.device, addressString]; - string_to_string(addr) - } - } - - pub fn name(&self) -> String { - unsafe { - let name: id = msg_send![self.device, name]; - string_to_string(name) - } - } - - pub fn is_paired(&self) -> bool { - unsafe { - let is_paired: BOOL = msg_send![self.device, isPaired]; - is_paired - } - } - - pub fn is_connected(&self) -> bool { - unsafe { - let is_connected: BOOL = msg_send![self.device, isConnected]; - is_connected - } - } - - pub fn open_connection(&self) -> Result<(), ()> { - unsafe { - let ret: IOReturn = msg_send![self.device, openConnection]; - match ret { - KERN_SUCCESS => Ok(()), - _ => Err(()), - } - } - } - - pub fn close_connection(&self) { - unsafe { - let _ret: IOReturn = msg_send![self.device, closeConnection]; - } - } - - pub fn perform_sdp_query(&self) { - unsafe { - let _ret: IOReturn = msg_send![self.device, performSDPQuery:0 ]; - } - } - - // pub fn perform_sdp_query_uuid(&self, uuid: Vec){ - // /* Convert each String to IOBluetoothSDPUUID then push them to a NSArray */ - // } - - pub fn open_rfcomm_channel_sync(&self, channel_id: u8, delegate: id) -> id /* IOBluetoothRFCOMMChannel */ - { - unsafe { - let val: *mut Object = msg_send![class!(IOBluetoothRFCOMMChannel), alloc]; - let addr: *const *mut Object = &val; - // println!("ret_before: {:?}", add); - //println!("val_before: {:?}", val); - let _ret: IOReturn = msg_send![self.device, openRFCOMMChannelSync:addr /* Docs call for double pointer */ - withChannelID:channel_id delegate:delegate]; - // println!("ret_after: {:?}", add); - //println!("val_after: {:?}", val); - val - } - } - - pub fn get_service_record(&self, uuid: &str) -> id { - unsafe { - let uuid = crate::util::sdpuuid_from_str(uuid); - let service_record: id = msg_send![self.device, getServiceRecordForUUID: uuid]; - service_record - } - } -} diff --git a/bluetooth-lib/iobluetooth/src/iobluetoothdeviceinquiry.rs b/bluetooth-lib/iobluetooth/src/iobluetoothdeviceinquiry.rs deleted file mode 100644 index df905f6..0000000 --- a/bluetooth-lib/iobluetooth/src/iobluetoothdeviceinquiry.rs +++ /dev/null @@ -1,39 +0,0 @@ -use cocoa::base::id; -use objc::{msg_send, sel, sel_impl, runtime::Class}; - -pub struct IOBluetoothDeviceInquiry { - inquiry: id -} - -impl IOBluetoothDeviceInquiry{ - - pub fn as_obj (&self) -> id { - self.inquiry - } - - /* It does not return already connected devices atm */ - pub fn new(delegate: id) -> IOBluetoothDeviceInquiry { - let inquiry = unsafe { - let inq: id = msg_send![Class::get("IOBluetoothDeviceInquiry").unwrap(), alloc]; - let () = msg_send![inq, initWithDelegate: delegate]; - let () = msg_send![inq, setUpdateNewDeviceNames: true]; - inq - }; - IOBluetoothDeviceInquiry { - inquiry - } - } - - // pub fn start(&self) { - // unsafe { - // let () = msg_send![self.inquiry, start]; - // } - // } - - // pub fn stop(&self) { - // unsafe { - // let () = msg_send![self.inquiry, stop]; - // } - // } - -} \ No newline at end of file diff --git a/bluetooth-lib/iobluetooth/src/lib.rs b/bluetooth-lib/iobluetooth/src/lib.rs deleted file mode 100644 index 5efb30d..0000000 --- a/bluetooth-lib/iobluetooth/src/lib.rs +++ /dev/null @@ -1,11 +0,0 @@ -#![cfg(target_os = "macos")] -pub mod searcher { - tonic::include_proto!("Searcher"); -} - -pub mod rfcomm { - tonic::include_proto!("RFCOMM"); -} - -pub use tonic::transport::Channel as TonicTransportChannel; -pub use tonic::Request; diff --git a/bluetooth-lib/iobluetooth/src/main.rs b/bluetooth-lib/iobluetooth/src/main.rs deleted file mode 100644 index e13bdf0..0000000 --- a/bluetooth-lib/iobluetooth/src/main.rs +++ /dev/null @@ -1,220 +0,0 @@ -#[cfg(target_os = "macos")] -use std::{ - ffi::CStr, - io::{BufRead, BufReader, Read, Write}, - net::{TcpListener, TcpStream}, - sync::{Arc, Mutex, Once}, - thread::{self, sleep}, - time::Duration, -}; -#[cfg(target_os = "macos")] -extern crate cocoa; -#[cfg(target_os = "macos")] -extern crate lazy_static; -#[cfg(target_os = "macos")] -extern crate objc; - -#[cfg(target_os = "macos")] -use cocoa::{ - base::{id, nil}, - foundation::{NSDate, NSDefaultRunLoopMode, NSRunLoop}, -}; -#[cfg(target_os = "macos")] -use core_foundation::{ - mach_port::{CFMachPort, CFMachPortCreateRunLoopSource}, - runloop::{ - kCFRunLoopDefaultMode, CFRunLoopAddSource, CFRunLoopGetCurrent, CFRunLoopRun, CFRunLoopStop, - }, -}; -#[cfg(target_os = "macos")] -use iobluetoothdevice::IOBTDevice; -#[cfg(target_os = "macos")] -use libc::uint8_t; -#[cfg(target_os = "macos")] -use log::{trace, warn}; -#[cfg(target_os = "macos")] -use objc::{ - class, - declare::ClassDecl, - msg_send, - runtime::{Class, Object, Protocol, Sel, BOOL}, -}; -#[cfg(target_os = "macos")] -use objc::{sel, sel_impl}; -#[cfg(target_os = "macos")] -use util::IOBluetoothSDPServiceRecord; - -#[cfg(target_os = "macos")] -use crate::util::IOBluetoothRFCOMMChannel; - -#[cfg(target_os = "macos")] -mod inquiry_adapter; -#[cfg(target_os = "macos")] -mod inquiry_delegate; -#[cfg(target_os = "macos")] -mod iobluetoothdevice; -#[cfg(target_os = "macos")] -mod iobluetoothdeviceinquiry; -#[cfg(target_os = "macos")] -mod rfcomm_delegate; -#[cfg(target_os = "macos")] -mod util; - -#[cfg(target_os = "macos")] -fn handle_client(mut stream: TcpStream) { - let channel = open_rfcomm( - "00001101-0000-1000-8000-00805F9B34FB".to_string(), - "AC-12-2F-6A-D2-07".to_string(), - ); - // read 20 bytes at a time from stream echoing back to stream - loop { - let mut read = [0; 1028]; - match stream.read(&mut read) { - Ok(n) => { - if n == 0 { - // connection was closed - break; - } - println!("data: {:?}", &read[0..n]); - - // if channel.is_open() { - // let buf = [8, 238, 0, 0, 0, 1, 5, 10, 0, 6]; - // channel.write_sync(&buf); - // } - - let data = [0x08, 0xEE, 0x00, 0x00, 0x00, 0x01, 0x05, 0x0A, 0x00, 0x06]; - channel.write_sync(&data); - let buf = match channel.is_open() { - true => "OK".as_bytes(), - false => "CLOSED".as_bytes(), - }; - - stream.write(&buf).unwrap(); - } - Err(err) => { - panic!("{}", err); - } - } - } -} - -#[cfg(target_os = "macos")] -fn on_data_cb(data: &[u8]) { - println!("data: {:?}", data); -} - -#[cfg(target_os = "macos")] -fn open_rfcomm(uuid: String, mac_addr: String) -> IOBluetoothRFCOMMChannel { - let channel_obj; - unsafe { - let device = Arc::new(IOBTDevice::new(&mac_addr)); /* "AC-12-2F-6A-D2-07" */ - device.open_connection().unwrap(); - device.perform_sdp_query(); - let record = device.get_service_record(&uuid); - let mut channel_id: u8 = 0; - let record = IOBluetoothSDPServiceRecord::new(record); - record.get_rfcomm_channel_id(&mut channel_id); - println!("channel: {}", record.get_service_name()); - let delegate = rfcomm_delegate::delegate(on_data_cb); - channel_obj = device.open_rfcomm_channel_sync(channel_id, delegate); - } - - IOBluetoothRFCOMMChannel::new_id(channel_obj) -} - -#[cfg(target_os = "macos")] -fn search() -> String { - let result = inquiry_adapter::search(Some(Duration::from_secs(3))); - // for device in result { - // if device.name().contains("Liberty") { - // return device.name() - // } - // } - println!("Result: {:?}", &result); - return "None".to_string(); -} - -/* This is a cli which runs in the background if --rfcomm is passed and opens a gRPC/socket server to accept write/read commands */ -/* We can open channels and search on background thread a long the main RunLoop is running */ -/* We must also warn the user that in order to open a rfcomm connection the MUST be disconnected from the device */ -#[cfg(target_os = "macos")] -fn main() { - /* We create a process which uses gRPC */ - // let channel_obj; - // unsafe { - // let device = Arc::new(IOBTDevice::new("AC-12-2F-6A-D2-07")); - // device.open_connection(); - // device.perform_sdp_query(); - // let record = device.get_service_record("00001101-0000-1000-8000-00805F9B34FB"); - // let mut channel_id: u8 = 0; - // let record = IOBluetoothSDPServiceRecord::new(record); - // record.get_rfcomm_channel_id(&mut channel_id); - // println!("channel: {}", record.get_service_name()); - // let delegate = rfcomm_delegate::delegate(); - // channel_obj = device.open_rfcomm_channel_sync(channel_id, delegate); - // } - // let channel = Arc::new(IOBluetoothRFCOMMChannel::new_id(channel_obj)); - // println!("channel: {}", channel.is_open()); - - // let clon = channel.clone(); - - std::thread::spawn(move || { - // let id = clon.as_id(); - let listener = TcpListener::bind("127.0.0.1:7878").unwrap(); - - for stream in listener.incoming() { - let stream = stream.unwrap(); - // let c = IOBluetoothRFCOMMChannel::new_id(id); - handle_client(stream); - } - }); - - std::thread::spawn(|| { - // search - search(); - }); - - unsafe { - CFRunLoopRun(); - } - // thread::spawn(move || unsafe { - // std::thread::sleep(std::time::Duration::from_secs(2)); - // println!("Starting"); - // println!("name: {}", chan.get_channel_id()); - // loop { - // if chan.is_open() { - // println!("channel is open"); - // } - // let data = [0x01, 0x02, 0x03, 0x04]; - // chan.write_sync(&data); - // std::thread::sleep(std::time::Duration::from_secs(2)); - // } - // }); - // println!("chan: {:?}", &channel); - // let is_open = unsafe { - // let channel = &mut *channel as *mut Object; - // let is_open: BOOL = msg_send![channel, isOpen]; - // is_open - // }; - // println!("is_open: {}", is_open); - // std::thread::spawn(move || loop { - // std::thread::sleep(std::time::Duration::from_secs(2)); - // println!("is_open: {}", chan.is_open()); - // let data = [0x01, 0x02, 0x03, 0x04]; - // chan.write_sync(&data); - // }); - //unsafe { CFRunLoopRun(); } - loop { - println!("done"); - sleep(std::time::Duration::from_secs(5)); - } - - // loop { - // println!("done after cf"); - // sleep(std::time::Duration::from_secs(5)); - // } -} - -#[cfg(not(target_os = "macos"))] - -fn main() {} diff --git a/bluetooth-lib/iobluetooth/src/rfcomm_delegate.rs b/bluetooth-lib/iobluetooth/src/rfcomm_delegate.rs deleted file mode 100644 index 285d12c..0000000 --- a/bluetooth-lib/iobluetooth/src/rfcomm_delegate.rs +++ /dev/null @@ -1,111 +0,0 @@ -use std::{ - io::{BufRead, BufReader, Read, Write}, - net::{TcpListener, TcpStream}, - sync::Once, -}; - -use cocoa::base::id; -use libc::{c_void, size_t}; -use objc::{ - class, - declare::ClassDecl, - msg_send, - runtime::{Class, Object, Protocol, Sel}, - sel, sel_impl, -}; - -use crate::util::IOBluetoothRFCOMMChannel; - -pub type RfcommDelegateOnDataRecv = fn(data: &[u8]); - -const DELEGATE_RECV_CB_IVAR: &str = "recv_cb"; - -pub fn delegate(on_data: RfcommDelegateOnDataRecv) -> id { - let cb = Box::new(on_data); - let delegate = unsafe { - let delegate: id = msg_send![delegate_class(), alloc]; - let () = msg_send![delegate, initWithCB: Box::into_raw(cb) as *mut c_void]; - delegate - }; - delegate -} - -fn delegate_class() -> &'static Class { - static REGISTER_DELEGATE_CLASS: Once = Once::new(); - REGISTER_DELEGATE_CLASS.call_once(|| { - let mut decl = ClassDecl::new("RFDelegate", class!(NSObject)).unwrap(); - decl.add_ivar::<*mut c_void>(DELEGATE_RECV_CB_IVAR); - unsafe { - decl.add_method( - sel!(initWithCB:), - rfcommdelegate_initWithCB as extern "C" fn(&mut Object, Sel, *mut c_void) -> id, - ); - decl.add_method( - sel!(rfcommChannelOpenComplete:status:), - rfcommdelegate_rfcommChannelOpenComplete - as extern "C" fn(&mut Object, Sel, *mut Object, i32), - ); - decl.add_method( - sel!(rfcommChannelWriteComplete:refcon:status:bytesWritten:), - rfcommdelegate_rfcommChannelWriteComplete - as extern "C" fn(&mut Object, Sel, *mut Object, *mut c_void, i32, size_t), - ); - decl.add_method( - sel!(rfcommChannelData:data:length:), - rfcommdelegate_rfcommChannelData - as extern "C" fn(&mut Object, Sel, *mut Object, *mut c_void, size_t), - ); - } - decl.register(); - }); - class!(RFDelegate) -} - -extern "C" fn rfcommdelegate_initWithCB(delegate: &mut Object, _cmd: Sel, cb: *mut c_void) -> id { - unsafe { - delegate.set_ivar(DELEGATE_RECV_CB_IVAR, cb); - } - delegate -} - -fn delegate_get_cb_fn(delegate: &mut Object) -> RfcommDelegateOnDataRecv { - unsafe { - let cb = &(*(*(&*delegate).get_ivar::<*mut c_void>(DELEGATE_RECV_CB_IVAR) - as *mut RfcommDelegateOnDataRecv)); - cb.clone() - } -} - -extern "C" fn rfcommdelegate_rfcommChannelData( - delegate: &mut Object, - _cmd: Sel, - _channel: *mut Object, - data: *mut c_void, - length: size_t, -) { - // Data is u8 array - let data = unsafe { std::slice::from_raw_parts(data as *const u8, length) }; - println!("rfcommChannelData, data: {:?}", data); - delegate_get_cb_fn(delegate)(data); -} - -extern "C" fn rfcommdelegate_rfcommChannelWriteComplete( - _delegate: &mut Object, - _cmd: Sel, - channel: *mut Object, - refcon: *mut c_void, - status: i32, - bytes_written: size_t, -) { - println!("rfcommChannelWriteComplete, len: {}", bytes_written); -} - -extern "C" fn rfcommdelegate_rfcommChannelOpenComplete( - _delegate: &mut Object, - _cmd: Sel, - channel: *mut Object, - status: i32, -) { - println!("rfcommChannelOpenComplete"); - println!("channel_from_delegate: {:?}", channel); -} diff --git a/bluetooth-lib/iobluetooth/src/server.rs b/bluetooth-lib/iobluetooth/src/server.rs deleted file mode 100644 index 3240601..0000000 --- a/bluetooth-lib/iobluetooth/src/server.rs +++ /dev/null @@ -1,225 +0,0 @@ -#[cfg(target_os = "macos")] -use core_foundation::runloop::CFRunLoopRun; -#[cfg(target_os = "macos")] -use iobluetoothdevice::IOBTDevice; -#[cfg(target_os = "macos")] -use objc::runtime::Object; -#[cfg(target_os = "macos")] -use std::{ - collections::VecDeque, - sync::{Arc, Mutex}, - time::Duration, -}; - -#[cfg(target_os = "macos")] -use tokio::time::sleep; - -#[cfg(target_os = "macos")] -use tonic::{transport::Server, Code, Request, Response, Status}; -#[cfg(target_os = "macos")] -use util::{IOBluetoothRFCOMMChannel, IOBluetoothSDPServiceRecord}; -#[cfg(target_os = "macos")] -use Searcher::{ - bt_searcher_server::{BtSearcher, BtSearcherServer}, - SearchItem, SearchRequest, SearchResponse, -}; -#[cfg(target_os = "macos")] -use RFCOMM::{ - rfcomm_server::{Rfcomm, RfcommServer}, - CloseRfcommChannelRequest, CloseRfcommChannelResponse, OpenRfcommChannelRequest, - OpenRfcommChannelResponse, RecvRfcommDataRequest, RecvRfcommDataResponse, - SendRfcommDataRequest, SendRfcommDataResponse, -}; -#[cfg(target_os = "macos")] -extern crate lazy_static; -#[cfg(target_os = "macos")] -use lazy_static::lazy_static; - -#[cfg(target_os = "macos")] -mod inquiry_adapter; -#[cfg(target_os = "macos")] -mod inquiry_delegate; -#[cfg(target_os = "macos")] -mod iobluetoothdevice; -#[cfg(target_os = "macos")] -mod iobluetoothdeviceinquiry; -#[cfg(target_os = "macos")] -mod rfcomm_delegate; -#[cfg(target_os = "macos")] -mod util; - -#[cfg(target_os = "macos")] - -pub mod Searcher { - tonic::include_proto!("Searcher"); -} - -#[cfg(target_os = "macos")] -pub mod RFCOMM { - tonic::include_proto!("RFCOMM"); -} - -#[derive(Debug, Default)] -struct SearchService {} -#[cfg(target_os = "macos")] -#[tonic::async_trait] -impl BtSearcher for SearchService { - async fn scan( - &self, - request: Request, - ) -> Result, Status> { - let dur = Duration::from_secs(request.into_inner().time_to_scan.unwrap().into()); - let scan_res = inquiry_adapter::search(Some(dur)); - let resp: Vec = scan_res - .into_iter() - .map(|dev| SearchItem { - name: dev.name().into(), - addr: dev.address().into(), - is_connected: dev.is_connected(), - }) - .collect(); - let reply = SearchResponse { result: resp }; - Ok(Response::new(reply)) - } -} - -#[cfg(target_os = "macos")] -#[derive(Default, Debug)] -struct RfcommService {} -#[cfg(target_os = "macos")] - -lazy_static! { - static ref DEVICE: Arc> = Arc::new(Mutex::new(IOBTDevice::default())); - static ref RFCOMM_CHANNEL: Arc> = - Arc::new(Mutex::new(IOBluetoothRFCOMMChannel::default())); - static ref DATA_STACK: Arc>>> = Arc::new(Mutex::new(VecDeque::new())); - static ref LAST_MSG_SEND: Arc> = Arc::new(Mutex::new(false)); -} -#[cfg(target_os = "macos")] - -fn on_data_cb(data: &[u8]) { - let mut last_msg_send = LAST_MSG_SEND.lock().unwrap(); - if *last_msg_send { - let mut stack = DATA_STACK.lock().unwrap(); - stack.push_front(data.to_vec()); - *last_msg_send = false; - } -} -#[cfg(target_os = "macos")] -#[tonic::async_trait] -impl Rfcomm for RfcommService { - async fn open_rfcomm_channel( - &self, - request: Request, - ) -> Result, Status> { - let args = request.into_inner(); - let mut dev = DEVICE - .lock() - .map_err(|_| Status::new(Code::Internal, "Device MutexGuard error"))?; - let mut channel = RFCOMM_CHANNEL - .lock() - .map_err(|_| Status::new(Code::Internal, "Channel MutexGuard error"))?; - - // if channel.is_open() { - // return Err(Status::already_exists("RFCOMM Channel is already open, close it first.")); - // } - *dev = IOBTDevice::new(args.addr.as_str()); - dev.open_connection().map_err(|_| { - Status::new( - Code::Internal, - format!("Failed to open connection to {}", args.addr), - ) - })?; - dev.perform_sdp_query(); - let svc_record = - IOBluetoothSDPServiceRecord::new(dev.get_service_record(args.uuid.as_str())); - let mut channel_id = 0; - svc_record.get_rfcomm_channel_id(&mut channel_id); - let delegate = rfcomm_delegate::delegate(on_data_cb); - let channel_ref = dev.open_rfcomm_channel_sync(channel_id, delegate); - *channel = IOBluetoothRFCOMMChannel::new_id(channel_ref); - let reply = OpenRfcommChannelResponse { success: true }; - /* Wait for channel to open, so that if we do a write/read req channel is initialized */ - sleep(Duration::from_millis(1000)); - Ok(Response::new(reply)) - } - - async fn close_rfcomm_channel( - &self, - _request: Request, - ) -> Result, Status> { - let mut channel = RFCOMM_CHANNEL - .lock() - .map_err(|_| Status::new(Code::Internal, "Channel MutexGuard error"))?; - if channel.is_open() { - channel.close_channel(); - } - let reply = CloseRfcommChannelResponse {}; - Ok(Response::new(reply)) - } - - async fn send_rfcomm_data( - &self, - request: Request, - ) -> Result, Status> { - let args = request.into_inner(); - let channel = RFCOMM_CHANNEL - .lock() - .map_err(|_| Status::new(Code::Internal, "Channel MutexGuard error"))?; - let mut last_msg_send = LAST_MSG_SEND - .lock() - .map_err(|_| Status::new(Code::Internal, "Last msg send MutexGuard error"))?; - if channel.is_open() { - channel.write_sync(&args.data); - *last_msg_send = true; - let reply = SendRfcommDataResponse { success: true }; - /* Wait for data to actually be sent */ - sleep(Duration::from_millis(200)); - Ok(Response::new(reply)) - } else { - Err(Status::new(Code::Cancelled, "Channel is not open")) - } - } - - async fn recv_rfcomm_data( - &self, - _request: Request, - ) -> Result, Status> { - sleep(Duration::from_millis(200)); - let data_to_send = DATA_STACK - .lock() - .map_err(|_| Status::new(Code::Internal, "Data stack MutexGuard error"))? - .pop_front(); - if let Some(data) = data_to_send { - let reply = RecvRfcommDataResponse { data }; - Ok(Response::new(reply)) - } else { - Err(Status::new(Code::Cancelled, "No data to send")) - } - } -} -#[cfg(target_os = "macos")] -/* We should use 1 thread for tokio */ -#[tokio::main(flavor = "current_thread")] -async fn launch_rpc_server() { - let address = "[::1]:55777".parse().unwrap(); - let search_svc = SearchService::default(); - let rfcomm_svc = RfcommService::default(); - - Server::builder() - .add_service(BtSearcherServer::new(search_svc)) - .add_service(RfcommServer::new(rfcomm_svc)) - .serve(address) - .await - .unwrap(); -} -#[cfg(target_os = "macos")] - -fn main() { - std::thread::spawn(|| launch_rpc_server()); - unsafe { - CFRunLoopRun(); - } -} -#[cfg(not(target_os = "macos"))] -fn main() {} diff --git a/bluetooth-lib/iobluetooth/src/util.rs b/bluetooth-lib/iobluetooth/src/util.rs deleted file mode 100644 index 9cd6090..0000000 --- a/bluetooth-lib/iobluetooth/src/util.rs +++ /dev/null @@ -1,164 +0,0 @@ -use std::{ffi::CStr, fmt::Formatter}; - -use cocoa::{ - base::{id, nil, BOOL}, - foundation::{NSData, NSString}, -}; -use libc::{c_char, c_void}; -use objc::{class, msg_send, rc::StrongPtr, runtime::{Class, Object}, sel, sel_impl}; -use std::fmt::Debug; - -pub type IOReturn = libc::c_int; - -pub fn string_to_string(nsstring: id) -> String { - if nsstring == nil { - return String::from("nil"); - } - unsafe { - String::from( - CStr::from_ptr(string_utf8string(nsstring)) - .to_str() - .unwrap(), - ) - } -} - -pub fn string_utf8string(nsstring: id) -> *const c_char { - unsafe { - let utf8string: *const c_char = msg_send![nsstring, UTF8String]; - utf8string - } -} - -/* Initialize CBUUID from String then convert it to IOBluetoothSDPUUID */ -pub fn sdpuuid_from_str(uuid: &str) -> id { - unsafe { - let nsstr = NSString::alloc(nil).init_str(uuid); - let id: id = msg_send![class!(CBUUID), UUIDWithString: nsstr]; - let uuid_data: id = msg_send![id, data]; - let uuid: id = msg_send![ - Class::get("IOBluetoothSDPUUID").unwrap(), - uuidWithData: uuid_data - ]; - uuid - } -} - -pub struct IOBluetoothSDPServiceRecord { - record: id, -} - -unsafe impl Send for IOBluetoothSDPServiceRecord {} -unsafe impl Sync for IOBluetoothSDPServiceRecord {} - -impl IOBluetoothSDPServiceRecord { - pub fn new(record: id) -> IOBluetoothSDPServiceRecord { - IOBluetoothSDPServiceRecord { record } - } - - pub fn as_id(&self) -> id { - self.record - } - - pub fn get_rfcomm_channel_id(&self, write_ref: &mut u8) { - unsafe { - let channel_id: u8 = msg_send![self.record, getRFCOMMChannelID: write_ref]; - } - } - - pub fn get_l2cap_psm(&self, write_ref: &mut u16) { - unsafe { - let psm: u16 = msg_send![self.record, getL2CAPPSM: write_ref]; - } - } - - pub fn get_service_name(&self) -> String { - unsafe { - let name: id = msg_send![self.record, getServiceName]; - string_to_string(name) - } - } -} - -pub struct IOBluetoothRFCOMMChannel { - channel: StrongPtr, -} - -unsafe impl Send for IOBluetoothRFCOMMChannel {} -unsafe impl Sync for IOBluetoothRFCOMMChannel {} - -impl Debug for IOBluetoothRFCOMMChannel { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - f.debug_struct("IOBluetoothRFCOMMChannel") - .field("channel_id", &self.get_channel_id()) - .field("is_open", &self.is_open()) - .finish() - } -} - -/* Default impl is null */ -impl Default for IOBluetoothRFCOMMChannel { - fn default() -> Self { - unsafe { - let null_ptr = std::ptr::null::(); - Self::new_id(null_ptr as id) - } - } -} - -impl IOBluetoothRFCOMMChannel { - pub fn new() -> IOBluetoothRFCOMMChannel { - unsafe { - let chan: id = { msg_send![class!(IOBluetoothRFCOMMChannel), alloc] }; - let channel: id = { msg_send![chan, init] }; - - IOBluetoothRFCOMMChannel { - channel: StrongPtr::new(channel), - } - } - } - - pub fn new_id(channel: id) -> IOBluetoothRFCOMMChannel { - let channel = unsafe { StrongPtr::new(channel) }; - IOBluetoothRFCOMMChannel { channel } - } - - pub fn as_id(&self) -> id { - *self.channel - } - - pub fn close_channel(&self) { - unsafe { - let _ret: IOReturn = msg_send![*self.channel, closeChannel]; - } - } - - pub fn get_device(&self) -> id /* IOBluetoothDevice */ { - unsafe { - let device: id = msg_send![*self.channel, getDevice]; - device - } - } - - pub fn is_open(&self) -> bool { - unsafe { - let is_open: BOOL = msg_send![*self.channel, isOpen]; - is_open - } - } - - pub fn write_sync(&self, data: &[u8]) { - unsafe { - let len = data.len(); - let data_ptr: *const *mut c_void = data.as_ptr() as *const *mut c_void; - let _ret: IOReturn = msg_send![*self.channel, writeSync: data_ptr length: len]; - } - } - - pub fn get_channel_id(&self) -> u8 { - unsafe { - let channel_id: u8 = msg_send![*self.channel, getChannelID]; - channel_id - } - } -} diff --git a/bluetooth-lib/src/error.rs b/bluetooth-lib/src/error.rs deleted file mode 100644 index 065162c..0000000 --- a/bluetooth-lib/src/error.rs +++ /dev/null @@ -1,33 +0,0 @@ -use thiserror::Error; - -#[derive(Debug, Error)] -pub enum BthError { - #[error("Unknown error")] - Unknown, - #[error("FdInitError")] - FdInitError, - #[error("TryConnectError")] - TryConnectError, - #[error("SendError")] - SendError, - #[error("RecvError")] - RecvError, - #[error("ConversionError")] - ConversionError, - #[error("InvalidSocketError")] - InvalidSocketError, - #[error("Conversion error")] - ParseInt { - #[from] - source: std::num::ParseIntError, - }, - #[error("Windows error")] - Windows { - #[from] - source: windows::core::Error, - }, - #[error("Device not found")] - DeviceNotFound, - #[error("Rfcomm service not found")] - RfcommServiceNotFound, -} diff --git a/bluetooth-lib/src/lib.rs b/bluetooth-lib/src/lib.rs deleted file mode 100644 index 333012f..0000000 --- a/bluetooth-lib/src/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -pub mod error; -mod types; - -#[cfg(target_os = "macos")] -mod macos; - -#[cfg(target_os = "windows")] -mod win32; -#[cfg(target_os = "windows")] -mod winrt; - -pub mod platform; -pub use { - error::BthError, - types::BluetoothDevice, - types::{BluetoothAdrr, RFCOMMClient, Scanner}, -}; diff --git a/bluetooth-lib/src/macos/mod.rs b/bluetooth-lib/src/macos/mod.rs deleted file mode 100644 index 8d48b23..0000000 --- a/bluetooth-lib/src/macos/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod rfcomm; -pub mod scanner; diff --git a/bluetooth-lib/src/macos/rfcomm.rs b/bluetooth-lib/src/macos/rfcomm.rs deleted file mode 100644 index 8863ab6..0000000 --- a/bluetooth-lib/src/macos/rfcomm.rs +++ /dev/null @@ -1,82 +0,0 @@ -use async_trait::async_trait; -use std::{ - cell::{Ref, RefCell}, - sync::Arc, -}; -use tokio::runtime::{Handle, Runtime}; - -use crate::{BthError, RFCOMMClient}; - -use iobluetooth::{ - rfcomm::{self, rfcomm_client::RfcommClient}, - Request, TonicTransportChannel, -}; - -pub struct RFCOMM { - client: RfcommClient, -} - -#[async_trait] -impl RFCOMMClient for RFCOMM { - async fn new() -> Result { - let client = RfcommClient::connect("http://[::1]:55777").await; - match client { - Ok(c) => Ok(RFCOMM { client: c }), - Err(_e) => Err(BthError::FdInitError), - } - } - - async fn connect_uuid( - &mut self, - bt_addr: crate::BluetoothAdrr, - uuid: &str, - ) -> Result<(), crate::BthError> { - let req = Request::new(rfcomm::OpenRfcommChannelRequest { - addr: bt_addr.to_string(), - uuid: uuid.to_string(), - }); - match self.client.open_rfcomm_channel(req).await { - Ok(_r) => Ok(()), - Err(_e) => Err(BthError::TryConnectError), - } - } - - async fn connect_port( - &mut self, - address: crate::BluetoothAdrr, - port: u32, - ) -> Result<(), crate::BthError> { - unimplemented!() - } - - async fn send(&self, data: &[u8]) -> Result<(), crate::BthError> { - let mut client = self.client.clone(); - let req = Request::new(rfcomm::SendRfcommDataRequest { - data: data.to_vec(), - }); - match client.send_rfcomm_data(req).await { - Ok(_r) => Ok(()), - Err(_e) => Err(BthError::SendError), - } - } - - async fn recv(&self, num_of_bytes: usize) -> Result, crate::BthError> { - let mut res: Vec = Vec::with_capacity(num_of_bytes); - let mut client = self.client.clone(); - let req = Request::new(rfcomm::RecvRfcommDataRequest {}); - match client.recv_rfcomm_data(req).await { - Ok(r) => { - let mut resp_data = r.into_inner().data; - resp_data.resize(num_of_bytes, 0); - Ok(resp_data) - } - Err(_e) => Err(BthError::RecvError), - } - } - - async fn close(&self) { - let mut client = self.client.clone(); - let req = Request::new(rfcomm::CloseRfcommChannelRequest {}); - let _ = client.close_rfcomm_channel(req).await; - } -} diff --git a/bluetooth-lib/src/macos/scanner.rs b/bluetooth-lib/src/macos/scanner.rs deleted file mode 100644 index a7fa273..0000000 --- a/bluetooth-lib/src/macos/scanner.rs +++ /dev/null @@ -1,34 +0,0 @@ -use crate::types::{BluetoothAdrr, BluetoothDevice, Scanner}; -use async_trait::async_trait; -use iobluetooth::searcher::{bt_searcher_client::BtSearcherClient, SearchRequest}; - -pub struct BthScanner {} - -#[async_trait] -impl Scanner for BthScanner { - fn new() -> BthScanner { - BthScanner {} - } - - async fn scan(&mut self) -> Vec { - let request = iobluetooth::Request::new(SearchRequest { - time_to_scan: Some(5), - }); - let mut client = BtSearcherClient::connect("http://[::1]:55777") - .await - .unwrap(); - let resp = client.scan(request).await.unwrap(); - drop(client); - let devices = resp.into_inner().result; - let mut res = Vec::new(); - for dev in devices { - res.push(BluetoothDevice { - name: dev.name, - address: BluetoothAdrr::from(dev.addr), - connected: dev.is_connected, - remembered: false, - }); - } - res - } -} diff --git a/bluetooth-lib/src/platform.rs b/bluetooth-lib/src/platform.rs deleted file mode 100644 index f6f08e8..0000000 --- a/bluetooth-lib/src/platform.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[cfg(target_os = "macos")] -pub use crate::macos::{rfcomm::RFCOMM, scanner::BthScanner}; - -#[cfg(target_os = "windows")] -pub use crate::{win32::scanner::BthScanner, winrt::rfcomm::RFCOMM}; diff --git a/bluetooth-lib/src/types.rs b/bluetooth-lib/src/types.rs deleted file mode 100644 index 8a14dcf..0000000 --- a/bluetooth-lib/src/types.rs +++ /dev/null @@ -1,160 +0,0 @@ -use std::fmt::{Debug, Display}; - -use crate::BthError; -use async_trait::async_trait; - -#[cfg(target_os = "windows")] -use windows::Win32::Devices::Bluetooth::{BLUETOOTH_ADDRESS, BLUETOOTH_DEVICE_INFO}; - -#[async_trait] -pub trait Scanner { - fn new() -> Self; - async fn scan(&mut self) -> Vec; -} - -#[async_trait] -pub trait RFCOMMClient: Sized { - async fn new() -> Result; - async fn connect_uuid(&mut self, bt_addr: BluetoothAdrr, uuid: &str) -> Result<(), BthError>; - async fn connect_port(&mut self, address: BluetoothAdrr, port: u32) -> Result<(), BthError>; - async fn send(&self, data: &[u8]) -> Result<(), BthError>; - async fn recv(&self, num_of_bytes: usize) -> Result, BthError>; - async fn close(&self); -} - -#[derive(Clone, Eq, PartialEq)] -pub struct BluetoothDevice { - pub name: String, - pub address: BluetoothAdrr, - pub connected: bool, - pub remembered: bool, -} - -#[derive(Debug, Clone, Eq, PartialEq)] -pub struct BluetoothAdrr { - pub address: [u8; 6], -} - -impl From for BluetoothAdrr { - fn from(address: String) -> Self { - if address.contains(':') { - let address = address - .split(':') - .map(|x| u8::from_str_radix(x, 16).unwrap()) - .collect::>(); - Self { - address: address.try_into().unwrap(), - } - } else { - let address = address - .split('-') - .map(|x| u8::from_str_radix(x, 16).unwrap()) - .collect::>(); - Self { - address: address.try_into().unwrap(), - } - } - } -} - -impl From<&str> for BluetoothAdrr { - fn from(address: &str) -> Self { - if address.contains(':') { - let address = address - .split(':') - .map(|x| u8::from_str_radix(x, 16).unwrap()) - .collect::>(); - Self { - address: address.try_into().unwrap(), - } - } else { - let address = address - .split('-') - .map(|x| u8::from_str_radix(x, 16).unwrap()) - .collect::>(); - Self { - address: address.try_into().unwrap(), - } - } - } -} - -#[cfg(target_os = "windows")] -impl From for BluetoothAdrr { - fn from(address: u64) -> Self { - /* used for BluetoothDevice.BluetoothAddress() from windows crate */ - let bytes = address.to_be_bytes(); - BluetoothAdrr { - address: [bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7]], - } - } -} - -#[cfg(target_os = "windows")] -impl From for u64 { - fn from(val: BluetoothAdrr) -> Self { - let mut bytes = [0u8; 8]; - bytes[2..8].copy_from_slice(&val.address); - u64::from_be_bytes(bytes) - } -} - -#[cfg(target_os = "windows")] -impl From for BluetoothDevice { - fn from(device_info: BLUETOOTH_DEVICE_INFO) -> BluetoothDevice { - BluetoothDevice { - name: String::from_utf16_lossy(&device_info.szName).replace('\0', ""), - address: BluetoothAdrr::from(device_info.Address), - connected: device_info.fConnected.as_bool(), - remembered: device_info.fRemembered.as_bool(), - } - } -} - -#[cfg(target_os = "windows")] -impl From for BluetoothAdrr { - fn from(address: BLUETOOTH_ADDRESS) -> BluetoothAdrr { - let mut bytes; - /* Safety: Union type defined by Microsoft docs */ - unsafe { - bytes = address.Anonymous.rgBytes; - } - bytes.reverse(); - BluetoothAdrr { address: bytes } - } -} - -impl Display for BluetoothDevice { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "- Name: {}\n\tAddress: {} Connected: {} Remembered: {}", - self.name, self.address, self.connected, self.remembered - ) - } -} - -impl Debug for BluetoothDevice { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "- Name: {}\n\tAddress: {} Connected: {} Remembered: {}", - self.name, self.address, self.connected, self.remembered - ) - } -} - -impl Display for BluetoothAdrr { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "{:02X}:{:02X}:{:02X}:{:02X}:{:02X}:{:02X}", - self.address[0], - self.address[1], - self.address[2], - self.address[3], - self.address[4], - self.address[5] - ) - } -} diff --git a/bluetooth-lib/src/win32/mod.rs b/bluetooth-lib/src/win32/mod.rs deleted file mode 100644 index 57fd5cc..0000000 --- a/bluetooth-lib/src/win32/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod rfcomm; -pub mod scanner; -mod util; diff --git a/bluetooth-lib/src/win32/rfcomm.rs b/bluetooth-lib/src/win32/rfcomm.rs deleted file mode 100644 index 1b0f56b..0000000 --- a/bluetooth-lib/src/win32/rfcomm.rs +++ /dev/null @@ -1,174 +0,0 @@ -use async_trait::async_trait; -use log::trace; -use windows::{ - self, - Win32::{ - Devices::Bluetooth::{AF_BTH, BTHPROTO_RFCOMM, SOCKADDR_BTH}, - Networking::WinSock::{ - closesocket, connect, recv, send, socket, WSACleanup, INVALID_SOCKET, SEND_RECV_FLAGS, - SOCKADDR, SOCKET, SOCKET_ERROR, SOCK_STREAM, - }, - }, -}; - -use crate::{ - error::BthError, - types::{BluetoothAdrr, RFCOMMClient}, - win32::util::init_winsock, -}; - -#[derive(Debug)] -pub struct RFCOMM { - fd: SOCKET, - connected: bool, -} - -#[async_trait] -impl RFCOMMClient for RFCOMM { - async fn new() -> Result { - init_winsock(); - let fd: SOCKET; - unsafe { - fd = socket( - AF_BTH.into(), - SOCK_STREAM, - BTHPROTO_RFCOMM - .try_into() - .map_err(|_| BthError::FdInitError)?, - ); - } - if fd == INVALID_SOCKET { - return Err(BthError::FdInitError); - } - trace!("RFCOMM win32 socket created"); - Ok(RFCOMM { - fd, - connected: false, - }) - } - - // fn create_rfcomm_socket(&self) -> Result { - // let mut fd: SOCKET; - // unsafe { - // fd = socket( - // AF_BTH.into(), - // SOCK_STREAM.into(), - // BTHPROTO_RFCOMM.try_into().unwrap(), - // ); - // } - // if fd == INVALID_SOCKET { - // fd = SOCKET::default(); - // return Err(BthError::FdInitError); - // } - // Ok(RFCOMM { - // fd: fd, - // connected: false, - // }) - // } - - async fn connect_uuid(&mut self, bt_addr: BluetoothAdrr, uuid: &str) -> Result<(), BthError> { - if self.fd == INVALID_SOCKET { - return Err(BthError::InvalidSocketError); - } - - let s_addr: SOCKADDR_BTH = SOCKADDR_BTH { - addressFamily: AF_BTH, - btAddr: u64::from_str_radix(&bt_addr.to_string().replace(':', ""), 16)?, - serviceClassId: windows::core::GUID::from(uuid), - port: 0, // When using uuid, port is 0 - }; - - unsafe { - let ret = connect( - self.fd, - &s_addr as *const SOCKADDR_BTH as *const SOCKADDR, - std::mem::size_of::() as i32, - ); - if ret == SOCKET_ERROR { - closesocket(self.fd); - return Err(BthError::TryConnectError); - } - } - self.connected = true; - trace!("Connected to uuid: {}", uuid); - return Ok(()); - } - - async fn connect_port(&mut self, bt_addr: BluetoothAdrr, port: u32) -> Result<(), BthError> { - if self.fd == INVALID_SOCKET { - return Err(BthError::InvalidSocketError); - } - - unsafe { - let s_addr: SOCKADDR_BTH = SOCKADDR_BTH { - addressFamily: AF_BTH, - btAddr: u64::from_str_radix(&bt_addr.to_string().replace(':', ""), 16)?, - serviceClassId: std::mem::zeroed(), - port, - }; - - let ret = connect( - self.fd, - &s_addr as *const SOCKADDR_BTH as *const SOCKADDR, - std::mem::size_of::() as i32, - ); - if ret == SOCKET_ERROR { - closesocket(self.fd); - return Err(BthError::TryConnectError); - } - } - trace!("Connected to port: {}", port); - self.connected = true; - return Ok(()); - } - - async fn send(&self, data: &[u8]) -> Result<(), BthError> { - if !self.connected || self.fd == INVALID_SOCKET { - return Err(BthError::InvalidSocketError); - } - unsafe { - if send( - self.fd, - data, - windows::Win32::Networking::WinSock::SEND_RECV_FLAGS(0), - ) == SOCKET_ERROR - { - return Err(BthError::SendError); - } - } - trace!("Sent data: {:?}", data); - Ok(()) - } - - async fn recv(&self, num_of_bytes: usize) -> Result, BthError> { - if !self.connected || self.fd == INVALID_SOCKET { - return Err(BthError::InvalidSocketError); - } - let mut data: Vec = vec![0; num_of_bytes]; - unsafe { - /* Safety Warning: Could result in buffer overflow!! */ - /* I think excess bytes are discarded... */ - if recv(self.fd, &mut data, SEND_RECV_FLAGS(0)) == SOCKET_ERROR { - return Err(BthError::RecvError); - } - } - trace!("Received data: {:?}", data); - Ok(data) - } - - async fn close(&self) { - unsafe { - WSACleanup(); - closesocket(self.fd); - } - } -} - -impl Drop for RFCOMM { - fn drop(&mut self) { - unsafe { - closesocket(self.fd); - // WSACleanup(); - } - } -} diff --git a/bluetooth-lib/src/win32/scanner.rs b/bluetooth-lib/src/win32/scanner.rs deleted file mode 100644 index 5abed17..0000000 --- a/bluetooth-lib/src/win32/scanner.rs +++ /dev/null @@ -1,74 +0,0 @@ -use async_trait::async_trait; -use log::debug; -use windows::Win32::{ - Devices::Bluetooth::{ - BluetoothFindFirstDevice, BluetoothFindNextDevice, BLUETOOTH_DEVICE_INFO, - BLUETOOTH_DEVICE_SEARCH_PARAMS, - }, - Foundation::{BOOL, HANDLE}, - Networking::WinSock::WSACleanup, -}; - -use crate::{ - types::{BluetoothDevice, Scanner}, - win32::util::init_winsock, -}; - -pub struct BthScanner { - params: BLUETOOTH_DEVICE_SEARCH_PARAMS, - device_info: BLUETOOTH_DEVICE_INFO, -} - -#[async_trait] -impl Scanner for BthScanner { - fn new() -> BthScanner { - init_winsock(); - /* Safety: Zeroed Memory */ - unsafe { - BthScanner { - params: BLUETOOTH_DEVICE_SEARCH_PARAMS { - dwSize: std::mem::size_of::() as u32, - fReturnAuthenticated: BOOL::from(true), - fReturnRemembered: BOOL::from(true), - fReturnUnknown: BOOL::from(true), - fReturnConnected: BOOL::from(true), - fIssueInquiry: BOOL::from(true), - cTimeoutMultiplier: 1, - hRadio: HANDLE::default(), - }, - device_info: BLUETOOTH_DEVICE_INFO { - dwSize: std::mem::size_of::() as u32, - Address: std::mem::zeroed(), - ulClassofDevice: std::mem::zeroed(), - fConnected: std::mem::zeroed(), - fRemembered: std::mem::zeroed(), - fAuthenticated: std::mem::zeroed(), - stLastSeen: std::mem::zeroed(), - stLastUsed: std::mem::zeroed(), - szName: std::mem::zeroed(), - }, - } - } - } - - async fn scan(&mut self) -> Vec { - let mut devices = Vec::new(); - unsafe { - let h_device = BluetoothFindFirstDevice(&self.params, &mut self.device_info).unwrap(); - devices.push(BluetoothDevice::from(self.device_info)); - while BluetoothFindNextDevice(h_device, &mut self.device_info) == BOOL::from(true) { - devices.push(BluetoothDevice::from(self.device_info)); - } - } - debug!("Found {} devices using win32 bt scan", devices.len()); - devices - } -} - -impl Drop for BthScanner { - fn drop(&mut self) { - unsafe { - WSACleanup(); - } - } -} diff --git a/bluetooth-lib/src/win32/util.rs b/bluetooth-lib/src/win32/util.rs deleted file mode 100644 index b6d7b32..0000000 --- a/bluetooth-lib/src/win32/util.rs +++ /dev/null @@ -1,10 +0,0 @@ -use windows::Win32::Networking::WinSock::WSAStartup; - -pub(crate) fn init_winsock() -> i32 { - let wsa_data = Box::into_raw(Box::default()); - let i_result: i32; - unsafe { - i_result = WSAStartup(0x0202, wsa_data); - } - i_result -} diff --git a/bluetooth-lib/src/winrt/mod.rs b/bluetooth-lib/src/winrt/mod.rs deleted file mode 100644 index d089eef..0000000 --- a/bluetooth-lib/src/winrt/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod rfcomm; diff --git a/bluetooth-lib/src/winrt/rfcomm.rs b/bluetooth-lib/src/winrt/rfcomm.rs deleted file mode 100644 index d17f7da..0000000 --- a/bluetooth-lib/src/winrt/rfcomm.rs +++ /dev/null @@ -1,114 +0,0 @@ -use crate::{BluetoothAdrr, BthError, RFCOMMClient}; -use async_trait::async_trait; -use log::{debug, trace}; -use windows::{ - core::{GUID, HSTRING}, - Devices::{ - Bluetooth::{ - BluetoothCacheMode, - Rfcomm::{RfcommDeviceService, RfcommServiceId}, - }, - }, - Networking::Sockets::StreamSocket, - Storage::Streams::{DataReader, DataWriter, InputStreamOptions}, -}; - -pub struct RFCOMM { - sock: StreamSocket, - connected: bool, - dr: Option, - dw: Option, - _device_selector: HSTRING, -} - -#[async_trait] -impl RFCOMMClient for RFCOMM { - async fn new() -> Result { - let sock = StreamSocket::new()?; - Ok(RFCOMM { - sock, - connected: false, - dr: None, - dw: None, - _device_selector: windows::Devices::Bluetooth::BluetoothDevice::GetDeviceSelector()?, - }) - } - - async fn connect_uuid(&mut self, bt_addr: BluetoothAdrr, uuid: &str) -> Result<(), BthError> { - trace!("Trying to connect to {} with uuid {}", bt_addr, uuid); - let svc_id = RfcommServiceId::FromUuid(GUID::from(uuid))?; - let device = windows::Devices::Bluetooth::BluetoothDevice::FromBluetoothAddressAsync( - bt_addr.into(), - )? - .await?; - - debug!( - "Found {} rfcomm services", - device - .GetRfcommServicesForIdWithCacheModeAsync(&svc_id, BluetoothCacheMode::Uncached)? - .await? - .Services()? - .Size()?, - ); - - let mut service: Option = None; - let mut service_guids: Vec = Vec::new(); - for s in device - .GetRfcommServicesForIdWithCacheModeAsync(&svc_id, BluetoothCacheMode::Uncached)? - .await? - .Services()? - .into_iter() - { - let guid = s.ServiceId()?.Uuid()?; - service_guids.push(guid); - if guid == GUID::from(uuid) { - service = Some(s); - } - } - - debug!("Found rfcomm services with guids: {:?}", service_guids); - - if service.is_none() { - return Err(BthError::RfcommServiceNotFound); - } else { - let svc = service.unwrap(); - trace!("Attempting to connect to service: {}", svc.ConnectionServiceName()?); - self.sock - .ConnectAsync(&svc.ConnectionHostName()?, &svc.ConnectionServiceName()?)? - .await?; - trace!("Successfully connected to service. Creating data reader and writer"); - self.connected = true; - self.dr = Some(DataReader::CreateDataReader(&self.sock.InputStream()?)?); - self.dw = Some(DataWriter::CreateDataWriter(&self.sock.OutputStream()?)?); - trace!("Successfully created data reader and writer"); - Ok(()) - } - } - - async fn connect_port(&mut self, _bt_addr: BluetoothAdrr, _port: u32) -> Result<(), BthError> { - unimplemented!() - } - - async fn send(&self, data: &[u8]) -> Result<(), BthError> { - let dw = self.dw.clone().unwrap(); - dw.WriteBytes(data)?; - dw.StoreAsync()?.await?; - Ok(()) - } - - async fn recv(&self, _num_of_bytes: usize) -> Result, BthError> { - let dr = self.dr.clone().unwrap(); - dr.SetInputStreamOptions(InputStreamOptions::Partial)?; - let mut out_buf: Vec = Vec::new(); - dr.LoadAsync(1024)?.get()?; - while dr.UnconsumedBufferLength()? > 0 { - out_buf.push(dr.ReadByte()?); - } - Ok(out_buf) - } - - async fn close(&self) { - debug!("Closing winrt socket"); - self.sock.Close().expect("Failed to close socket"); - } -} diff --git a/manager-app/Cargo.toml b/manager-app/Cargo.toml index f3efbfd..4b14c27 100644 --- a/manager-app/Cargo.toml +++ b/manager-app/Cargo.toml @@ -15,7 +15,6 @@ tauri-build = { version = "1.2", features = [] } [dependencies] tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } log = "0.4.17" -serde_json = "1.0" typeshare = "1.0.1" serde = { workspace = true, features = ["derive"] } tokio = { workspace = true, features = [ @@ -31,9 +30,6 @@ tauri = { version = "1.2.5", features = [ "system-tray", ] } soundcore-lib = { workspace = true } -bluetooth-lib = { path = "../bluetooth-lib/" } -async-trait = { workspace = true } -futures = { workspace = true } [dev-dependencies] soundcore-lib = { workspace = true, features = ["mock"], default-features = false} diff --git a/manager-app/build.rs b/manager-app/build.rs index dcd420a..d860e1e 100644 --- a/manager-app/build.rs +++ b/manager-app/build.rs @@ -1,51 +1,3 @@ -use std::{ - env, - path::{Path}, - process::Command, -}; - fn main() { - if cfg!(target_os = "macos") { - build_iobluetooth(); - } tauri_build::build() } - -fn build_iobluetooth() { - /* TODO: Rerun if server.rs changes */ - // println!("cargo:rerun-if-changed=../bluetooth-lib/iobluetooth/src/server.rs"); Does not work - - let mut build = Command::new("cargo") - .arg("build") - .arg("--release") - .arg("--manifest-path") - .arg("../bluetooth-lib/iobluetooth/Cargo.toml") - .arg("--bin") - .arg("soundcoremanager-iobtserver") - .spawn() - .expect("Failed to build iobluetooth server"); - - if build.wait().unwrap().success() { - let mut basedir = env::current_dir().unwrap(); - basedir.pop(); - let src = Path::join( - &basedir, - "bluetooth-lib/iobluetooth/target/release/soundcoremanager-iobtserver", - ); - /* Add target triple to server - Required by Tauri to bundle it */ - let target = std::env::var("TARGET").unwrap(); - std::fs::rename( - src, - Path::join( - &basedir, - format!( - "bluetooth-lib/iobluetooth/target/release/soundcoremanager-iobtserver-{}", - target - ), - ), - ) - .expect("Failed to rename iobluetooth server"); - } else { - panic!("Failed to build iobluetooth server!"); - } -} \ No newline at end of file diff --git a/soundcore-lib/Cargo.toml b/soundcore-lib/Cargo.toml index ecbe1b9..201ae75 100644 --- a/soundcore-lib/Cargo.toml +++ b/soundcore-lib/Cargo.toml @@ -29,7 +29,6 @@ futures = { workspace = true } strum = { version = "0.26", features = ["derive"] } nom = "7" enumflags2 = { version = "0.7.7", features = ["serde"] } -bluetooth-lib = { path = "../bluetooth-lib" } phf = { version = "0.11", default-features = false, features = ["macros"] } derive_more = { version = "0.99", features = ["from"] } uuid = { version = "1.6.1", features = ["v4", "serde"] } diff --git a/soundcore-lib/src/api/feature_set/flags.rs b/soundcore-lib/src/api/feature_set/flags.rs index f80c7c0..890f15d 100644 --- a/soundcore-lib/src/api/feature_set/flags.rs +++ b/soundcore-lib/src/api/feature_set/flags.rs @@ -7,7 +7,6 @@ use typeshare::typeshare; Debug, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Hash, EnumIter, )] #[typeshare] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] pub enum FeatureFlags { DRC, HEARID, diff --git a/soundcore-lib/src/base.rs b/soundcore-lib/src/base.rs deleted file mode 100644 index 59d245d..0000000 --- a/soundcore-lib/src/base.rs +++ /dev/null @@ -1,98 +0,0 @@ -use async_trait::async_trait; -use bluetooth_lib::BluetoothAdrr; - -use crate::{ - error::SoundcoreLibError, - types::{ - ANCProfile, BatteryCharging, BatteryLevel, DeviceInfo, DeviceStatus, EQWave, - ResponseDecoder, - }, -}; - -/* Should we require all traits or make this be a SoundcoreBase and have all -other traits be "extensions" (may require unsafe downcasting/upcasting) */ -/* We can't require Default trait as it implements static methods and makes SoundcoreDevice not object safe. */ - -#[async_trait] -pub trait SoundcoreDevice: - SoundcoreANC - + SoundcoreEQ - + SoundcoreLDAC - + SoundcoreHearID - + ResponseDecoder - + ResponseDecoder - + Send - + Sync -{ - async fn init( - &self, - btaddr: BluetoothAdrr, - ) -> Result, SoundcoreLibError>; - async fn close(&self) -> Result<(), SoundcoreLibError>; - async fn send(&self, data: &[u8]) -> Result<(), SoundcoreLibError>; - async fn recv(&self) -> Result, SoundcoreLibError>; - async fn build_and_send_cmd( - &self, - cmd: [i8; 7], - data: Option<&[u8]>, - ) -> Result<(), SoundcoreLibError>; - async fn get_status(&self) -> Result; - async fn get_info(&self) -> Result; - async fn get_battery_level(&self) -> Result; - async fn get_battery_charging(&self) -> Result; -} - -/* "Optional" traits - Not really since SoundcoreDevice -has a bound on them but they return Err by default */ -#[async_trait] -pub trait SoundcoreANC: Sync + Send { - async fn set_anc(&self, _profile: ANCProfile) -> Result<(), SoundcoreLibError> { - Err(SoundcoreLibError::FeatureNotSupported( - "ANC - set_anc".to_string(), - )) - } - async fn get_anc(&self) -> Result { - Err(SoundcoreLibError::FeatureNotSupported( - "ANC - get_anc".to_string(), - )) - } -} -#[async_trait] -pub trait SoundcoreEQ: Sync + Send { - async fn set_eq(&self, _wave: EQWave) -> Result<(), SoundcoreLibError> { - Err(SoundcoreLibError::FeatureNotSupported( - "EQ - set_eq".to_string(), - )) - } - async fn get_eq(&self) -> Result { - Err(SoundcoreLibError::FeatureNotSupported( - "EQ - get_eq".to_string(), - )) - } -} -#[async_trait] -pub trait SoundcoreLDAC: Sync + Send { - async fn set_ldac(&self, _toggle: bool) -> Result<(), SoundcoreLibError> { - Err(SoundcoreLibError::FeatureNotSupported( - "LDAC - set_ldac".to_string(), - )) - } - async fn get_ldac(&self) -> Result { - Err(SoundcoreLibError::FeatureNotSupported( - "LDAC - get_ldac".to_string(), - )) - } -} -#[async_trait] -pub trait SoundcoreHearID: Sync + Send { - async fn set_hearid(&self) -> Result<(), SoundcoreLibError> { - Err(SoundcoreLibError::FeatureNotSupported( - "HearID - set_hearid".to_string(), - )) - } - async fn get_hearid(&self) -> Result<(), SoundcoreLibError> { - Err(SoundcoreLibError::FeatureNotSupported( - "HearID - get_hearid".to_string(), - )) - } -} diff --git a/soundcore-lib/src/compat.rs b/soundcore-lib/src/compat.rs deleted file mode 100644 index b95eb4d..0000000 --- a/soundcore-lib/src/compat.rs +++ /dev/null @@ -1,3 +0,0 @@ - - -mod state; diff --git a/soundcore-lib/src/compat/state.rs b/soundcore-lib/src/compat/state.rs deleted file mode 100644 index 532bd8a..0000000 --- a/soundcore-lib/src/compat/state.rs +++ /dev/null @@ -1,104 +0,0 @@ -use crate::error::SoundcoreLibError; -use crate::models::{ - Battery, EQConfiguration, MonoEQ, SideTone, SoundMode, TouchTone, TwsStatus, WearDetection, -}; -use crate::packets::ResponsePacket; -use crate::types::{ANCProfile, BatteryCharging, BatteryLevel, DeviceStatus, EQWave}; - -impl TryInto for ResponsePacket { - type Error = SoundcoreLibError; - fn try_into(self) -> Result { - match self { - ResponsePacket::DeviceState(state) => { - let state = state.data; - let (battery_level, battery_charging) = state.battery.into(); - let (left_eq, right_eq) = state.eq.into(); - Ok(DeviceStatus { - host_device: state.host_device.unwrap_or(0), - tws_status: state.tws_status.unwrap_or(TwsStatus(false)).0, - battery_level, - battery_charging, - anc_status: ANCProfile::from(state.sound_mode), - side_tone_enabled: state.side_tone.unwrap_or(SideTone(false)).0, - wear_detection_enabled: state.wear_detection.unwrap_or(WearDetection(false)).0, - touch_tone_enabled: state.touch_tone.unwrap_or(TouchTone(false)).0, - left_eq, - right_eq, - // TODO: Use actual HearID data - hearid_enabled: false, - left_hearid: EQWave::default(), - right_hearid: EQWave::default(), - left_hearid_customdata: EQWave::default(), - right_hearid_customdata: EQWave::default(), - }) - } - _ => Err(SoundcoreLibError::IncompatibleResponse), - } - } -} - -impl From for ANCProfile { - fn from(mode: SoundMode) -> Self { - let bytes = mode.to_bytes(); - - ANCProfile { - option: bytes[0], - anc_option: bytes[1], - transparency_option: bytes[2], - anc_custom: bytes[3], - } - } -} - -impl From for (BatteryLevel, BatteryCharging) { - fn from(val: Battery) -> Self { - match val { - Battery::Single(batt) => { - let left = BatteryLevel { - left: batt.level, - right: 0, - }; - let right = BatteryCharging { - left: batt.charging, - right: false, - }; - (left, right) - } - Battery::Dual(batt) => { - let left = BatteryLevel { - left: batt.left.level, - right: batt.right.level, - }; - let right = BatteryCharging { - left: batt.left.charging, - right: batt.right.charging, - }; - (left, right) - } - } - } -} - -// Maybe figure out how to do this better and test it -impl From for EQWave { - fn from(val: MonoEQ) -> Self { - EQWave::decode(&val.to_bytes(8usize)).unwrap() - } -} - -impl From for (EQWave, EQWave) { - fn from(val: EQConfiguration) -> Self { - match val { - EQConfiguration::Stereo(stereo) => { - let left = stereo.eq.left.into(); - let right = stereo.eq.right.into(); - (left, right) - } - EQConfiguration::Mono(mono) => { - let left = mono.eq.into(); - let right = EQWave::default(); - (left, right) - } - } - } -} diff --git a/soundcore-lib/src/error.rs b/soundcore-lib/src/error.rs index 2214336..0791dae 100644 --- a/soundcore-lib/src/error.rs +++ b/soundcore-lib/src/error.rs @@ -48,11 +48,6 @@ pub enum SoundcoreLibError { #[from] source: std::string::FromUtf8Error, }, - #[error("Bluetooth Error")] - BthError { - #[from] - source: bluetooth_lib::BthError, - }, #[error("Invalid arguments")] InvalidArguments, #[error("Invalid response")] @@ -70,7 +65,10 @@ pub enum SoundcoreLibError { #[error("Invalid MAC address: {addr}")] InvalidMACAddress { addr: String }, // TODO: Remove btleplug-backend feature when device name resolution is fixed *see scanner.rs* - #[cfg(all(target_os = "windows", any(feature = "btleplug-backend", feature = "winrt-backend")))] + #[cfg(all( + target_os = "windows", + any(feature = "btleplug-backend", feature = "winrt-backend") + ))] #[error("Unknown Windows Error")] UnknownWindowsError { #[from] @@ -95,4 +93,4 @@ impl From>> for SoundcoreLibError { error: format!("{:?}", error), } } -} \ No newline at end of file +} diff --git a/soundcore-lib/src/lib.rs b/soundcore-lib/src/lib.rs index 1c7f3fc..57a018f 100644 --- a/soundcore-lib/src/lib.rs +++ b/soundcore-lib/src/lib.rs @@ -1,10 +1,6 @@ -pub use bluetooth_lib::BluetoothAdrr; - pub mod api; -pub mod base; pub mod ble; pub mod btaddr; -pub mod compat; pub mod devices; pub mod error; pub mod models;