From 285c50fc20dc05e7a3224704ea2f98fad0e72f26 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 13 Nov 2025 13:47:50 +0100 Subject: [PATCH] important bugfix: added serial flushing --- Cargo.toml | 2 +- src/transport/serial.rs | 12 +++++------- src/transport/tcp.rs | 1 + 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b20063b..183ec35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,6 @@ edition = "2024" [dependencies] thiserror = "2" -serialport = { version = "4.8.2-alpha.0", git = "https://github.com/us-irs/serialport-rs.git", branch = "add-vmin-vtime-and-non-blocking-support" } +serialport = { version = "4" } cobs = "0.5" log = "0.4" diff --git a/src/transport/serial.rs b/src/transport/serial.rs index f688ff8..940f6a8 100644 --- a/src/transport/serial.rs +++ b/src/transport/serial.rs @@ -2,7 +2,6 @@ use std::time::Duration; use cobs::CobsDecoderOwned; -use serialport::ReadMode; use crate::transport::PacketTransport; @@ -27,12 +26,10 @@ impl PacketTransportSerialCobs { baud_rate: u32, max_rx_packet_size: usize, ) -> Result { - #[cfg(target_os = "linux")] - let mut serial = serialport::new(port_name, baud_rate).open_native()?; - #[cfg(target_os = "linux")] - serial.set_read_mode(ReadMode::Immediate)?; - #[cfg(not(target_os = "linux"))] - let mut serial = serialport::new(port_name, baud_rate).open()?; + let serial = serialport::new(port_name, baud_rate).open_native()?; + // Not merged yet in upstream.. + //#[cfg(target_os = "linux")] + //serial.set_read_mode(ReadMode::Immediate)?; Ok(Self::new( Box::new(serial), CobsDecoderOwned::new(max_rx_packet_size), @@ -61,6 +58,7 @@ impl PacketTransportSerialCobs { let encoded = cobs::encode_vec_including_sentinels(packet); log::debug!("sending COBS encoded packet: {:?}", encoded); self.serial.write_all(&encoded)?; + self.serial.flush()?; Ok(()) } diff --git a/src/transport/tcp.rs b/src/transport/tcp.rs index 0164e61..cb8b021 100644 --- a/src/transport/tcp.rs +++ b/src/transport/tcp.rs @@ -82,6 +82,7 @@ impl PacketTransportTcpWithCobs { } } + /// Close the connection by shutting down the TCP stream. pub fn close(&mut self) -> std::io::Result<()> { self.tcp_stream.shutdown(std::net::Shutdown::Both) }