diff --git a/src/main.rs b/src/main.rs
index cc5686a44289e2940a8668e61f8d9c42636043e2..077f1b5b7c2dc385db4595feb6510cd01024c780 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,8 +1,8 @@
 mod ffi;
 
+use std::io;
 use std::io::{Read, Write};
-use std::time::Duration;
-use std::{io, thread};
+use std::time::Instant;
 
 use ffi::MavlinkPayloadFlightTM;
 use serialport::SerialPort;
@@ -52,27 +52,56 @@ fn main() {
 
     // read from buffer and print to stdout
     let mut buffer = [0u8; 1000];
+    let mut buffered_string = String::new();
+    let mut start: Option<Instant> = None;
+    let mut times = Vec::new();
+    let mut i = 0;
     loop {
         match port.read(&mut buffer) {
             Ok(t) => {
                 // encode the buffer into a string
                 let input = String::from_utf8_lossy(&buffer[..t]);
                 // if we got the signal to start sending data, send it
-                if input.contains("[WAITING]") {
+                buffered_string.push_str(&input);
+                if buffered_string.contains("[WAITING]") {
+                    buffered_string.clear();
                     if let Some(packet) = iter.next() {
+                        if let Some(t) = start {
+                            times.push(t.elapsed().as_millis());
+                        }
+                        start = Some(Instant::now());
                         write_port.write_packet(packet);
+                        i += 1;
+                    } else {
+                        break;
                     }
                 }
-                // std::io::stdout().write_all(&input.as_bytes()).unwrap();
-                for line in input.lines() {
-                    if !line.contains("[WAITING]") {
-                        println!("{}", line);
-                    }
+                std::io::stdout().write_all(input.as_bytes()).unwrap();
+
+                if i == 580 {
+                    break;
                 }
+                // for line in input.lines() {
+                //     if !line.contains("[WAITING]") {
+                //         println!("{}", line);
+                //     }
+                // }
             }
             Err(ref e) if e.kind() == io::ErrorKind::TimedOut => (),
             Err(e) => eprintln!("{:?}", e),
         }
-        thread::sleep(Duration::from_millis(100));
     }
+
+    // print stats (mean, median, std, etc)
+    let mean = times.iter().sum::<u128>() as f64 / times.len() as f64;
+    let median = times[times.len() / 2] as f64;
+    let std = times
+        .iter()
+        .map(|&x| (x as f64 - mean).powi(2))
+        .sum::<f64>()
+        .sqrt()
+        / times.len() as f64;
+    println!("Mean: {}ms", mean);
+    println!("Median: {}ms", median);
+    println!("Std: {}ms", std);
 }