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