From faccd959960514cd7fbc1c992a2621ba31b34f61 Mon Sep 17 00:00:00 2001
From: Federico Lolli <federico.lolli@skywarder.eu>
Date: Mon, 19 Feb 2024 17:20:49 +0100
Subject: [PATCH] add timeout to reading (waiting 200ms before emitting error)

---
 src/serial.rs | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/serial.rs b/src/serial.rs
index a850c29..731be06 100644
--- a/src/serial.rs
+++ b/src/serial.rs
@@ -6,6 +6,7 @@ use std::{
         Arc,
     },
     thread::{self, JoinHandle},
+    time::Duration,
 };
 
 use hashbrown::HashMap;
@@ -83,7 +84,11 @@ impl SerialQueue {
     /// Open the serial port and start a thread to write data as soon as it is
     /// available (by using a channel)
     fn open(port: &str, baudrate: u32) -> SResult<Self> {
-        let serial = Arc::new(Mutex::new(serialport::new(port, baudrate).open()?));
+        let serial = Arc::new(Mutex::new(
+            serialport::new(port, baudrate)
+                .timeout(Duration::from_millis(200))
+                .open()?,
+        ));
         let (tx, rx) = channel::<Vec<u8>>();
         let ser = Arc::clone(&serial);
         let _handle = thread::spawn(move || {
-- 
GitLab