diff --git a/Cargo.lock b/Cargo.lock index 97c8283..cbd8aad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -118,7 +118,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", "synstructure 0.13.1", ] @@ -141,7 +141,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -158,13 +158,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -187,17 +187,17 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -289,9 +289,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.14" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932" +checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" dependencies = [ "shlex", ] @@ -400,9 +400,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -489,7 +489,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -565,7 +565,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -732,7 +732,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -799,9 +799,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "gio-sys" @@ -818,9 +818,9 @@ dependencies = [ [[package]] name = "glib" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b19429cb83fcbf1f00b31ae3a123fab5cd3761bdd15b0cc07905804742f0d0e4" +checksum = "9c1ea829497810f8e87f5ee6d05c4879af641704add879e6b6080607cceeefe4" dependencies = [ "bitflags 2.6.0", "futures-channel", @@ -839,22 +839,22 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960349f56469b75794157e93bf04f0bc8a622d0a6612d6a8f8d7eac41e0e1ee1" +checksum = "951aa19c5e89555c0ca5e94ee874b24b2594ece8412b387bd84ee3266b8a3ea0" dependencies = [ "heck", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] name = "glib-sys" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44edae63bea922f18f7e63977ee60a257ec27c4613aff1a6a9bb572ad0d88269" +checksum = "92eee4531c1c9abba945d19378b205031b5890e1f99c319ba0503b6e0c06a163" dependencies = [ "libc", "system-deps", @@ -884,9 +884,9 @@ dependencies = [ [[package]] name = "gstreamer" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e95b1d1153239a621ec143501fdcca6c1ad3efb87d268597285f85c4136f73" +checksum = "683e15f8cc3a1a2646d9fe2181a58b7abb4c166256d8d15cce368e420c741140" dependencies = [ "cfg-if", "futures-channel", @@ -937,9 +937,9 @@ dependencies = [ [[package]] name = "gstreamer-base" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3faa0b3cf361bf538dcb25b5cb7f6e73bd872ed031d85f3997b42d3fbd66409" +checksum = "ed5d73cb5cbf229c8904fba5ff93b1863f186bccc062064c1b2a9000750cc06e" dependencies = [ "atomic_refcell", "cfg-if", @@ -1051,9 +1051,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -1091,9 +1091,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "itertools" @@ -1188,11 +1188,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -1292,18 +1292,18 @@ dependencies = [ [[package]] name = "object" -version = "0.36.3" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] [[package]] name = "oid-registry" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" dependencies = [ "asn1-rs 0.6.2", ] @@ -1371,9 +1371,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -1437,9 +1437,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" dependencies = [ "memchr", "thiserror", @@ -1448,9 +1448,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "664d22978e2815783adbdd2c588b455b1bd625299ce36b2a99881ac9627e6d8d" dependencies = [ "pest", "pest_generator", @@ -1458,22 +1458,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "a2d5487022d5d33f4c30d91c22afa240ce2a644e87fe08caad974d4eab6badbe" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "0091754bbd0ea592c4deb3a122ce8ecbb0753b738aa82bc055fcc2eccc8d8174" dependencies = [ "once_cell", "pest", @@ -1552,11 +1552,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] @@ -1739,9 +1739,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -1777,9 +1777,9 @@ checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" dependencies = [ "ring", "rustls-pki-types", @@ -1832,29 +1832,29 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", "memchr", @@ -1969,7 +1969,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2045,9 +2045,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.76" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -2074,7 +2074,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2113,7 +2113,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2183,9 +2183,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.3" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -2207,7 +2207,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2224,9 +2224,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -2244,7 +2244,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit", ] [[package]] @@ -2256,17 +2256,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.20" @@ -2277,7 +2266,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -2299,7 +2288,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2494,7 +2483,7 @@ dependencies = [ [[package]] name = "vcs-common" version = "0.1.0" -source = "git+https://git.nickiel.net/VCC/vcs-common.git?branch=main#a89e970be35e01eb8a59c368e7b817e93984c137" +source = "git+https://git.nickiel.net/VCC/vcs-common.git?branch=main#01495ff1d8d105de485f0c746251cd471176d1cc" dependencies = [ "async-channel", "bincode", @@ -2838,15 +2827,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.6.18" @@ -2922,7 +2902,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2942,5 +2922,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] diff --git a/src/main.rs b/src/main.rs index f900b67..c6c0000 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,8 +18,15 @@ use vcs_common::{AppReceiver, AppSender, ApplicationMessage}; mod config; mod gst; +mod rig; +mod tracker; mod web_rtc; +use rig::{start_event_loop, ApplicationEvent}; +use tracker::{tracker_loop, TrackerEvent}; + +const SATELLITE_NAME: &str = "CameraSatellite_1"; + #[tokio::main] async fn main() { let uuid = uuid::Uuid::new_v4().to_string(); @@ -59,7 +66,7 @@ async fn main() { .await { Err(e) => panic!("There was an error connecting to the remote: {e}"), - Ok((sender, recvr)) => { + Ok((sender, recvr, _ws_open)) => { app_sender = sender; app_receiver = recvr; } @@ -167,10 +174,21 @@ async fn main() { } }); + let (to_mec, mec) = async_channel::bounded::(20); + tokio::spawn(start_event_loop(mec, to_mec.clone())); + + let (to_tec, tec) = async_channel::bounded::(20); + tokio::spawn(tracker_loop( + to_tec.clone(), + tec, + to_mec.clone(), + app_sender.clone(), + )); + // loop through messages coming from the remote. while let Ok(msg) = app_receiver.recv().await { match msg { - ApplicationMessage::WebRTCPacket(pkt) => { + ApplicationMessage::WebRTCPacket(_pkt) => { error!("don't know what to do with this packet!"); } ApplicationMessage::WebRTCIceCandidateInit(pkt) => { @@ -178,9 +196,35 @@ async fn main() { error!("There was an error adding the trickle ICE candidate! {e}"); } } - ApplicationMessage::WebRTCIceCandidate(pkg) => { + ApplicationMessage::WebRTCIceCandidate(_pkg) => { error!("Unhandled ice candidate!"); } + ApplicationMessage::NameRequest(Some(name)) => info!("Got a message about '{}'", name), + ApplicationMessage::NameRequest(None) => { + if let Err(e) = app_sender + .send(ApplicationMessage::NameRequest(Some( + SATELLITE_NAME.to_owned(), + ))) + .await + { + error!("Could not let the remote know my name! {e}"); + } + } + ApplicationMessage::ChangeTrackingID(id) => { + if let Err(e) = to_tec.send(TrackerEvent::ChangeID(id)).await { + error!("Could not send message to tracker state! Closing down. {e}"); + break; + } + } + ApplicationMessage::TrackingBoxes(_) => { + error!("I got a tracking boxes message?"); + } + ApplicationMessage::ManualMovementOverride((x, y)) => { + if let Err(e) = to_mec.send(ApplicationEvent::ManualMoveEvent((x, y))).await { + error!("Could not send manual override to state machine! {e}"); + break; + } + } } } } diff --git a/src/rig/mod.rs b/src/rig/mod.rs new file mode 100644 index 0000000..a17987f --- /dev/null +++ b/src/rig/mod.rs @@ -0,0 +1,16 @@ +mod state_machine; + +use std::time::Instant; + +pub use state_machine::{start_event_loop, ApplicationEvent}; + +struct Position { + x: i32, + y: i32, +} + +struct RigState { + last_update: Instant, +} + +impl RigState {} diff --git a/src/rig/state_machine.rs b/src/rig/state_machine.rs new file mode 100644 index 0000000..e52d322 --- /dev/null +++ b/src/rig/state_machine.rs @@ -0,0 +1,39 @@ +use async_channel::{Receiver, Sender}; +use tracing::{error, info}; + +pub enum ApplicationEvent { + ManualMoveEvent((i32, i32)), + TrackerUpdate(vcs_common::types::TrackingUpdate), +} + +pub async fn start_event_loop(mec: Receiver, to_mec: Sender) { + while let Ok(msg) = mec.recv().await { + match msg { + ApplicationEvent::ManualMoveEvent((x, y)) => { + info!("State machine manual override! ({}, {})", x, y); + } + ApplicationEvent::TrackerUpdate(update) => { + if update.target_id.is_some() { + let target = update + .boxes + .iter() + .filter(|x| x.id == *update.target_id.as_ref().unwrap()) + .cloned() + .collect::>(); + + match target.len() { + 0 => error!("Target not found, add handling code for this case"), + 1 => info!("Target was found"), + _ => error!( + "MOre than one of the target was found, that should be impossible" + ), + } + } else { + info!("No tracking target found. Should this be handled differently?"); + } + } + } + } + + info!("Shutting down state machine listener!"); +} diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs new file mode 100644 index 0000000..ef6dbde --- /dev/null +++ b/src/tracker/mod.rs @@ -0,0 +1,70 @@ +use async_channel::{Receiver, Sender}; +use tracing::{error, info}; +use vcs_common::{AppSender, ApplicationMessage}; + +use crate::rig::ApplicationEvent; + +pub enum TrackerEvent { + ChangeID(u16), +} + +pub struct TrackerState { + pub target_id: Option, + pub app_sender: AppSender, +} + +impl TrackerState {} + +pub async fn tracker_loop( + to_tec: Sender, + tec: Receiver, + to_mec: Sender, + app_sender: AppSender, +) { + let mut state = TrackerState { + target_id: None, + app_sender, + }; + + while let Ok(msg) = tec.recv().await { + match msg { + TrackerEvent::ChangeID(new_id) => { + state.target_id = Some(new_id); + } + } + + // Pretend we processed a video frame! + if let Err(e) = to_mec + .send(ApplicationEvent::TrackerUpdate( + vcs_common::types::TrackingUpdate { + target_id: None, + boxes: vec![], + }, + )) + .await + { + error!("Could not send tracking update to MEC! {e}"); + } + + if let Err(e) = state + .app_sender + .send(ApplicationMessage::TrackingBoxes( + vcs_common::types::TrackingUpdate { + target_id: None, + boxes: vec![vcs_common::types::NormalizedBoxCoords { + id: 1, + x1: 0.25, + y1: 0.25, + x2: 0.75, + y2: 0.75, + }], + }, + )) + .await + { + error!("Could not send message to remote core! {e}"); + break; + } + } + info!("Tracking loop is shutting down"); +} diff --git a/src/web_rtc.rs b/src/web_rtc.rs index 3c0c2e7..b265683 100644 --- a/src/web_rtc.rs +++ b/src/web_rtc.rs @@ -26,6 +26,8 @@ use webrtc::{ Error, }; +use crate::SATELLITE_NAME; + /// Boilerplate for creating the initial Peer Connection /// Takes a unique ID representing this instance to name the tracks and streams #[instrument] @@ -199,6 +201,22 @@ pub async fn kickoff_connection( Ok(ApplicationMessage::WebRTCIceCandidate(_pkt)) => { error!("Got a non init ice candidate. Now what?"); } + Ok(ApplicationMessage::NameRequest(Some(name))) => { + info!("Got a message about '{}'", name) + } + Ok(ApplicationMessage::NameRequest(None)) => { + if let Err(e) = app_sender + .send(ApplicationMessage::NameRequest(Some( + SATELLITE_NAME.to_owned(), + ))) + .await + { + error!("Could not let the remote know my name! {e}"); + } + } + Ok(ApplicationMessage::ChangeTrackingID(_)) + | Ok(ApplicationMessage::TrackingBoxes(_)) + | Ok(ApplicationMessage::ManualMovementOverride(_)) => {} Err(e) => { panic!("WC channel was closed?! {e}"); }