From 69a3c82d0e7a9a0e54eb4b5cef91aedefee85213 Mon Sep 17 00:00:00 2001 From: Federico Lolli <federico123579@gmail.com> Date: Mon, 14 Oct 2024 16:02:33 +0200 Subject: [PATCH] fix: moved from serial to udp --- on-host/Cargo.lock | 379 +++++++++++++++---------------------------- on-host/Cargo.toml | 3 +- on-host/src/cli.rs | 23 +-- on-host/src/main.rs | 130 ++++----------- on-host/src/tm.rs | 75 ++++----- on-host/src/utils.rs | 18 -- 6 files changed, 200 insertions(+), 428 deletions(-) diff --git a/on-host/Cargo.lock b/on-host/Cargo.lock index 4cb64bc..5725bbb 100644 --- a/on-host/Cargo.lock +++ b/on-host/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] [[package]] -name = "adler2" -version = "2.0.0" +name = "adler" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "anstream" @@ -71,11 +71,10 @@ name = "arpist" version = "0.4.0" dependencies = [ "clap", + "color-eyre", "csv", "log", - "miette", "serde", - "serialport", "simple_logger", "skyward_mavlink", ] @@ -88,34 +87,19 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", -] - -[[package]] -name = "backtrace-ext" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" -dependencies = [ - "backtrace", ] -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.6.0" @@ -128,6 +112,15 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "cc" +version = "1.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" +dependencies = [ + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -174,6 +167,33 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +[[package]] +name = "color-eyre" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + [[package]] name = "colorchoice" version = "1.0.2" @@ -190,12 +210,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - [[package]] name = "crc-any" version = "2.5.0" @@ -233,20 +247,20 @@ dependencies = [ ] [[package]] -name = "errno" -version = "0.3.9" +name = "eyre" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ - "libc", - "windows-sys 0.52.0", + "indenter", + "once_cell", ] [[package]] name = "gimli" -version = "0.31.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "heck" @@ -255,14 +269,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "io-kit-sys" -version = "0.4.1" +name = "indenter" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b" -dependencies = [ - "core-foundation-sys", - "mach2", -] +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "ioctl-rs" @@ -273,12 +283,6 @@ dependencies = [ "libc", ] -[[package]] -name = "is_ci" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -303,47 +307,12 @@ version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" -[[package]] -name = "libudev" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0" -dependencies = [ - "libc", - "libudev-sys", -] - -[[package]] -name = "libudev-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "mach2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" -dependencies = [ - "libc", -] - [[package]] name = "mavlink-bindgen" version = "0.1.0" @@ -375,55 +344,13 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "miette" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edc8853320c2a0dab800fbda86253c8938f6ea88510dc92c5f1ed20e794afc1" -dependencies = [ - "backtrace", - "backtrace-ext", - "cfg-if", - "miette-derive", - "owo-colors", - "supports-color", - "supports-hyperlinks", - "supports-unicode", - "terminal_size", - "textwrap", - "thiserror", - "unicode-width", -] - -[[package]] -name = "miette-derive" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ - "adler2", -] - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", + "adler", ] [[package]] @@ -463,24 +390,30 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + [[package]] name = "owo-colors" -version = "4.1.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] -name = "pkg-config" -version = "0.3.31" +name = "pin-project-lite" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "powerfmt" @@ -521,31 +454,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustix" -version = "0.38.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - [[package]] name = "ryu" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "serde" version = "1.0.210" @@ -618,23 +532,20 @@ dependencies = [ ] [[package]] -name = "serialport" -version = "4.5.1" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ba776acc8c373b9175829206229366273225436845c04f9c20aab8099960e2e" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "core-foundation-sys", - "io-kit-sys", - "libudev", - "mach2", - "nix", - "scopeguard", - "unescaper", - "winapi", + "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "simple_logger" version = "4.3.3" @@ -652,7 +563,7 @@ name = "skyward_mavlink" version = "0.1.0" source = "git+https://git.skywarder.eu/avn/swd/mavlink/mavlink-skyward-lib.git?branch=main#7abedf9773b3ebce9d14687d13544f40fad5577f" dependencies = [ - "bitflags 2.6.0", + "bitflags", "mavlink-bindgen", "mavlink-core", "num-derive", @@ -661,39 +572,12 @@ dependencies = [ "serde_arrays", ] -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "supports-color" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8775305acf21c96926c900ad056abeef436701108518cf890020387236ac5a77" -dependencies = [ - "is_ci", -] - -[[package]] -name = "supports-hyperlinks" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0a1e5168041f5f3ff68ff7d95dcb9c8749df29f6e7e89ada40dd4c9de404ee" - -[[package]] -name = "supports-unicode" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" - [[package]] name = "syn" version = "2.0.79" @@ -705,16 +589,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "terminal_size" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" -dependencies = [ - "rustix", - "windows-sys 0.48.0", -] - [[package]] name = "termios" version = "0.2.2" @@ -724,17 +598,6 @@ dependencies = [ "libc", ] -[[package]] -name = "textwrap" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" -dependencies = [ - "smawk", - "unicode-linebreak", - "unicode-width", -] - [[package]] name = "thiserror" version = "1.0.64" @@ -755,6 +618,16 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "time" version = "0.3.36" @@ -789,59 +662,63 @@ dependencies = [ ] [[package]] -name = "unescaper" -version = "0.1.5" +name = "tracing" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878a167baa8afd137494101a688ef8c67125089ff2249284bd2b5f9bfedb815" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "thiserror", + "pin-project-lite", + "tracing-core", ] [[package]] -name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "unicode-linebreak" -version = "0.1.5" +name = "tracing-core" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] [[package]] -name = "unicode-width" -version = "0.1.14" +name = "tracing-error" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] [[package]] -name = "utf8parse" -version = "0.2.2" +name = "tracing-subscriber" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] [[package]] -name = "winapi" -version = "0.3.9" +name = "unicode-ident" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "valuable" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "windows-sys" diff --git a/on-host/Cargo.toml b/on-host/Cargo.toml index 5ebf010..3bf65a0 100644 --- a/on-host/Cargo.toml +++ b/on-host/Cargo.toml @@ -7,12 +7,11 @@ edition = "2021" [dependencies] clap = { version = "4", features = ["derive"] } -miette = { version = "7", features = ["fancy"] } csv = "1" log = "0.4" -serialport = "4" simple_logger = { version = "4", features = ["colors"] } serde = { version = "1", features = ["derive"] } +color-eyre = "0.6.3" [dependencies.skyward_mavlink] git = "https://git.skywarder.eu/avn/swd/mavlink/mavlink-skyward-lib.git" diff --git a/on-host/src/cli.rs b/on-host/src/cli.rs index 2f71e4a..4945379 100644 --- a/on-host/src/cli.rs +++ b/on-host/src/cli.rs @@ -11,25 +11,14 @@ use clap::{ #[derive(Debug, Parser)] #[command(styles=get_styles())] pub struct Cli { - /// The serial port to use - #[clap(short, long, value_name = "PORT")] - pub port: Option<String>, + /// The UDP port to use + #[clap(short, long, value_name = "PORT", default_value = "42069")] + pub port: u16, - /// baud rate - #[clap(short, long, default_value = "115200")] - pub baud_rate: u32, + /// Origin of the messages (System ID) + #[clap(short, long, default_value = "171")] + pub system_id: u8, - /// disable SYNC MODE (wait for a sync signal from the device before proceding) - #[clap(short, long)] - pub no_sync: bool, - - // /// The low rate telemetry CSV file to read from - // #[clap(value_name = "LOW_RATE_MAIN_FILE")] - // pub low_rate_file_main: PathBuf, - - // /// The low rate telemetry CSV file to read from - // #[clap(value_name = "LOW_RATE_PAYLOAD_FILE")] - // pub low_rate_file_payload: PathBuf, /// The high rate telemetry CSV file to read from #[clap(value_name = "HIGH_RATE_MAIN_FILE")] pub high_rate_file_main: PathBuf, diff --git a/on-host/src/main.rs b/on-host/src/main.rs index 3fb3736..87495e4 100644 --- a/on-host/src/main.rs +++ b/on-host/src/main.rs @@ -3,32 +3,22 @@ mod packet; mod tm; mod utils; -use std::{ - fs::File, - io::{self, Read}, - time::{Duration, Instant}, -}; +use std::{fs::File, time::Instant}; use clap::Parser; -use log::{debug, error, info}; -use miette::{Context, IntoDiagnostic, Result}; +use color_eyre::eyre::Result; +use log::{debug, info}; use packet::TimedMessage; -use serialport::SerialPort; use skyward_mavlink::{ lyra::MavMessage, - mavlink::{write_v1_msg, MavHeader}, -}; -use tm::{read_high_rate_telemetry, read_low_rate_telemetry, Origin}; - -use crate::{ - cli::Cli, - packet::PacketSequence, - utils::{get_first_stm32_serial_port, print_stats}, + mavlink::{self, MavConnection, MavHeader, MavlinkVersion}, }; +use tm::read_high_rate_telemetry; -const ACK: u8 = 0x06; +use crate::{cli::Cli, packet::PacketSequence, utils::print_stats}; fn main() -> Result<()> { + color_eyre::install()?; let args: Cli = Cli::parse(); let lvl = if args.verbose { @@ -42,14 +32,7 @@ fn main() -> Result<()> { .with_level(lvl) .with_local_timestamps() .env() - .init() - .into_diagnostic()?; - - if !args.no_sync { - info!("SYNC mode ENABLED"); - } else { - info!("SYNC mode DISABLED"); - } + .init()?; let packets = get_packets(&args)?; debug!("collected {} packets", packets.len()); @@ -57,25 +40,18 @@ fn main() -> Result<()> { // convert to packet sequence data structure let mut packets = PacketSequence::from(packets); - // Open the first serialport available. - let port_name = if let Some(name) = args.port { - name - } else if let Some(name) = get_first_stm32_serial_port()? { - debug!("found STM32 device on {}", name); - name - } else { - error!("FATAL: no STM32 serial port found, your device may not be connected properly"); - std::process::exit(1); + // Setup mavlink connection + let mut mavconn = mavlink::connect::<MavMessage>(&format!("udpout:127.0.0.1:{}", args.port))?; + // Lyra dialect use Mavlink version 1 + mavconn.set_protocol_version(MavlinkVersion::V1); + let _header = mavlink::MavHeader { + system_id: args.system_id, + component_id: 0, + sequence: 0, }; - debug!("connecting to serial port {}...", port_name); - let mut port = serialport::new(port_name, args.baud_rate) - .open() - .into_diagnostic() - .wrap_err("Failed to open serial port")?; - let mut write_port = port.try_clone().into_diagnostic()?; + debug!("mavlink flushing on UDP port {}", args.port); // read from buffer and print to stdout - let mut buffer = [0u8; 1000]; let mut start: Option<Instant> = None; let mut times = Vec::new(); @@ -85,17 +61,12 @@ fn main() -> Result<()> { times.push(t.elapsed().as_millis()); } start = Some(Instant::now()); - write_port.write_packet(packet.to_owned())?; + mavconn.write_packet(packet.to_owned(), args.system_id)?; debug!( "sent packet ({}/{})", packets.sent_packets(), packets.total_packets() ); - - // if sync mode is enabled then wait for ACK - if !args.no_sync { - wait_for_ack(&mut port, &mut buffer); - } } info!("sent {} packets", packets.sent_packets()); @@ -105,14 +76,6 @@ fn main() -> Result<()> { } fn get_packets(args: &Cli) -> Result<Vec<TimedMessage>> { - // info!( - // "reading low rate main telemetry from file {}", - // args.low_rate_file_main.display() - // ); - // info!( - // "reading low rate payload telemetry from file {}", - // args.low_rate_file_payload.display() - // ); info!( "reading high rate main telemetry from file {}", args.high_rate_file_main.display() @@ -121,60 +84,25 @@ fn get_packets(args: &Cli) -> Result<Vec<TimedMessage>> { "reading high rate payload telemetry from file {}", args.high_rate_file_payload.display() ); - // let lrtf_main = File::open(&args.low_rate_file_main).into_diagnostic()?; - // let lrtf_payload = File::open(&args.low_rate_file_payload).into_diagnostic()?; - let hrtf_main = File::open(&args.high_rate_file_main).into_diagnostic()?; - let hrtf_payload = File::open(&args.high_rate_file_payload).into_diagnostic()?; - // let mut packets = read_low_rate_telemetry(lrtf_payload, Origin::Payload).into_diagnostic()?; - // packets.extend(read_low_rate_telemetry(lrtf_main, Origin::Main).into_diagnostic()?); - let mut packets = read_high_rate_telemetry(hrtf_payload, Origin::Payload).into_diagnostic()?; - // packets.extend(read_high_rate_telemetry(hrtf_payload, Origin::Payload).into_diagnostic()?); - packets.extend(read_high_rate_telemetry(hrtf_main, Origin::Main).into_diagnostic()?); + let hrtf_main = File::open(&args.high_rate_file_main)?; + let hrtf_payload = File::open(&args.high_rate_file_payload)?; + let mut packets = read_high_rate_telemetry(hrtf_main, hrtf_payload)?; packets.sort(); debug!("collected {} packets", packets.len()); Ok(packets) } -/// Wait for ACK signal from the device -fn wait_for_ack(port: &mut Box<dyn SerialPort>, buffer: &mut [u8]) { - // wait ACK - let start = Instant::now(); - loop { - match port.read(buffer) { - Ok(t) => { - // eprint!("{}", String::from_utf8_lossy(&buffer[..t])); - // if didn't get the signal then print the buffer and exit with error - if buffer[..t].contains(&ACK) { - break; - } else { - std::thread::sleep(Duration::from_millis(10)); - } - } - Err(ref e) if e.kind() == io::ErrorKind::TimedOut => { - if start.elapsed() > Duration::from_secs(5) { - error!("FATAL: didn't get the signal"); - std::process::exit(1); - } - } - Err(e) => { - error!("FATAL: {:?}", e); - std::process::exit(1); - } - } - } - // eprintln!(); -} - trait MavLinkPort { - fn write_packet(&mut self, packet: MavMessage) -> Result<()>; + fn write_packet(&mut self, packet: MavMessage, system_id: u8) -> Result<()>; } -impl<T: AsRef<dyn SerialPort> + std::io::Write> MavLinkPort for T { - fn write_packet(&mut self, packet: MavMessage) -> Result<()> { - let header = MavHeader::default(); - write_v1_msg(self, header, &packet) - .into_diagnostic() - .wrap_err("Failed to write mavlink message to serial port")?; +impl<T: MavConnection<MavMessage> + ?Sized> MavLinkPort for T { + fn write_packet(&mut self, packet: MavMessage, system_id: u8) -> Result<()> { + let header = MavHeader { + system_id, + ..Default::default() + }; + self.send(&header, &packet)?; Ok(()) } } diff --git a/on-host/src/tm.rs b/on-host/src/tm.rs index 6d5e9b0..c048a95 100644 --- a/on-host/src/tm.rs +++ b/on-host/src/tm.rs @@ -80,46 +80,43 @@ pub fn read_low_rate_telemetry(reader: impl Read, origin: Origin) -> Result<Vec< } /// Read high rate telemtry data from a CSV file -pub fn read_high_rate_telemetry(reader: impl Read, origin: Origin) -> Result<Vec<TimedMessage>> { +pub fn read_high_rate_telemetry( + reader_main: impl Read, + reader_payload: impl Read, +) -> Result<Vec<TimedMessage>> { let mut packets = Vec::new(); - let mut rdr = csv::Reader::from_reader(reader); - match origin { - Origin::Main => { - for result in rdr.deserialize() { - let r: HrtmMain = result?; - let msg_data = ROCKET_FLIGHT_TM_DATA { - timestamp: r.timestamp, - nas_n: r.n as f32, - nas_e: r.e as f32, - nas_d: r.d as f32, - nas_vn: r.vn as f32, - nas_ve: r.ve as f32, - nas_vd: r.vd as f32, - altitude_agl: r.altitude_agl as f32, - ada_vert_speed: r.vertical_speed as f32, - ..Default::default() - }; - let mav_msg = MavMessage::ROCKET_FLIGHT_TM(msg_data); - packets.push(TimedMessage::new(r.timestamp, mav_msg)); - } - } - Origin::Payload => { - for result in rdr.deserialize() { - let r: HrtmPayload = result?; - let msg_data = PAYLOAD_FLIGHT_TM_DATA { - timestamp: r.timestamp, - nas_n: r.n as f32, - nas_e: r.e as f32, - nas_d: r.d as f32, - nas_vn: r.vn as f32, - nas_ve: r.ve as f32, - nas_vd: r.vd as f32, - ..Default::default() - }; - let mav_msg = MavMessage::PAYLOAD_FLIGHT_TM(msg_data); - packets.push(TimedMessage::new(r.timestamp, mav_msg)); - } - } + let mut rdr_main = csv::Reader::from_reader(reader_main); + let mut rdr_payload = csv::Reader::from_reader(reader_payload); + for (main_res, payload_res) in rdr_main.deserialize().zip(rdr_payload.deserialize()) { + let rm: HrtmMain = main_res?; + let msg_data = ROCKET_FLIGHT_TM_DATA { + timestamp: rm.timestamp, + nas_n: rm.n as f32, + nas_e: rm.e as f32, + nas_d: rm.d as f32, + nas_vn: rm.vn as f32, + nas_ve: rm.ve as f32, + nas_vd: rm.vd as f32, + altitude_agl: rm.altitude_agl as f32, + ada_vert_speed: rm.vertical_speed as f32, + ..Default::default() + }; + let mav_msg = MavMessage::ROCKET_FLIGHT_TM(msg_data); + packets.push(TimedMessage::new(rm.timestamp, mav_msg)); + + let rp: HrtmPayload = payload_res?; + let msg_data = PAYLOAD_FLIGHT_TM_DATA { + timestamp: rp.timestamp, + nas_n: rp.n as f32, + nas_e: rp.e as f32, + nas_d: rp.d as f32, + nas_vn: rp.vn as f32, + nas_ve: rp.ve as f32, + nas_vd: rp.vd as f32, + ..Default::default() + }; + let mav_msg = MavMessage::PAYLOAD_FLIGHT_TM(msg_data); + packets.push(TimedMessage::new(rm.timestamp, mav_msg)); } Ok(packets) } diff --git a/on-host/src/utils.rs b/on-host/src/utils.rs index c2398a3..ac0c102 100644 --- a/on-host/src/utils.rs +++ b/on-host/src/utils.rs @@ -1,22 +1,4 @@ use log::info; -use miette::{Context, IntoDiagnostic, Result}; - -/// Get the first serial port that contains "STM32" or "ST-LINK" in its product name -pub fn get_first_stm32_serial_port() -> Result<Option<String>> { - let ports = serialport::available_ports() - .into_diagnostic() - .wrap_err("No serial ports found!")?; - for port in ports { - if let serialport::SerialPortType::UsbPort(info) = port.port_type { - if let Some(p) = info.product { - if p.contains("STM32") || p.contains("ST-LINK") { - return Ok(Some(port.port_name)); - } - } - } - } - Ok(None) -} /// print stats (mean, median, std, etc) pub fn print_stats(times: Vec<u128>) { -- GitLab